patches/gcc/4.4.4/190-flatten-switch-stmt-00.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Wed Dec 26 13:30:51 2012 +0100 (2012-12-26)
changeset 3145 598880dab0f3
parent 1948 d341be24dc68
permissions -rw-r--r--
libc/glibc: both glibc and eglibc have pkgversion and bugurl

Well, all eglibc version we support do, and latest glibc versions
we support do.

Not all glibc versions do, but older versions simply ignore the
unrecognised ./configure flags.

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