patches/gcc/4.4.4/190-flatten-switch-stmt-00.patch
author Arnaud Lacombe <lacombar@gmail.com>
Tue Aug 03 06:17:51 2010 +0200 (2010-08-03)
changeset 2064 f5ebe8c429dc
child 2148 ada9128c98b8
permissions -rw-r--r--
libc/uClibc: add uClibc 0.9.30.3

This version has been released a couple of month ago, but it never reached
crosstool-ng tree. This may be linked to the fact that the current 0.9.30.2,
once patched, has nothing much different from 0.9.30.3, released.

I'm not including any patch with this upgrade, on purpose.

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