patches/gcc/4.4.2/190-flatten-switch-stmt-00.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Dec 31 18:47:37 2011 +0100 (2011-12-31)
changeset 2829 0c3c95f911ec
parent 1544 2228ea3f6b79
permissions -rw-r--r--
docs: credit Konrad EISELE for the initial multilib support

Konrad submitted an initial patch adding multlib support:
http://sourceware.org/ml/crossgcc/2011-11/msg00040.html

The patch was full of good ideas, but had a few issues, so
I (Yann E. MORIN) started it all from scatch, re-using part
of the original patch. This got implemented in this series:
hg log -r 446a17b5dd1e:e47d17391ae3

As I forgot to credit Konrad in these changelogs, update the
docs so that the work by Konrad gets credited. Without his
initial effort, we would probably not have had multlib support
so soon. Thank you Konrad!

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1393
     1
diff -durN gcc-4.4.0.orig/gcc/stmt.c gcc-4.4.0/gcc/stmt.c
yann@1393
     2
--- gcc-4.4.0.orig/gcc/stmt.c	2009-02-27 20:49:42.000000000 +0100
yann@1393
     3
+++ gcc-4.4.0/gcc/stmt.c	2009-05-27 21:38:21.000000000 +0200
yann@1393
     4
@@ -2376,7 +2376,11 @@
yann@1393
     5
 	  use_cost_table
yann@1393
     6
 	    = (TREE_CODE (orig_type) != ENUMERAL_TYPE
yann@1393
     7
 	       && estimate_case_costs (case_list));
yann@1393
     8
-	  balance_case_nodes (&case_list, NULL);
yann@1393
     9
+	  /* When optimizing for size, we want a straight list to avoid
yann@1393
    10
+	     jumps as much as possible. This basically creates an if-else
yann@1393
    11
+	     chain.  */
yann@1393
    12
+	  if (!optimize_size)
yann@1393
    13
+	    balance_case_nodes (&case_list, NULL);
yann@1393
    14
 	  emit_case_nodes (index, case_list, default_label, index_type);
yann@1393
    15
 	  if (default_label)
yann@1393
    16
 	    emit_jump (default_label);
yann@1393
    17
@@ -2942,6 +2946,7 @@
yann@1393
    18
 	    {
yann@1393
    19
 	      if (!node_has_low_bound (node, index_type))
yann@1393
    20
 		{
yann@1393
    21
+		  if (!optimize_size) /* don't jl to the .default_label. */
yann@1393
    22
 		  emit_cmp_and_jump_insns (index,
yann@1393
    23
 					   convert_modes
yann@1393
    24
 					   (mode, imode,