patches/gcc/4.2.3/904-flatten-switch-stmt-00.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
parent 313 patches/gcc/4.2.1/904-flatten-switch-stmt-00.patch@2f223aafc7cb
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
yann@313
     1
diff -durN gcc-4.2.1.orig/gcc/stmt.c gcc-4.2.1/gcc/stmt.c
yann@313
     2
--- gcc-4.2.1.orig/gcc/stmt.c	2007-07-19 05:25:32.000000000 +0200
yann@313
     3
+++ gcc-4.2.1/gcc/stmt.c	2007-08-03 20:37:19.000000000 +0200
yann@313
     4
@@ -2512,7 +2512,11 @@
yann@313
     5
 	  use_cost_table
yann@313
     6
 	    = (TREE_CODE (orig_type) != ENUMERAL_TYPE
yann@313
     7
 	       && estimate_case_costs (case_list));
yann@313
     8
-	  balance_case_nodes (&case_list, NULL);
yann@313
     9
+	  /* When optimizing for size, we want a straight list to avoid
yann@313
    10
+	     jumps as much as possible. This basically creates an if-else
yann@313
    11
+	     chain.  */
yann@313
    12
+	  if (!optimize_size)
yann@313
    13
+	    balance_case_nodes (&case_list, NULL);
yann@313
    14
 	  emit_case_nodes (index, case_list, default_label, index_type);
yann@313
    15
 	  emit_jump (default_label);
yann@313
    16
 	}
yann@313
    17
@@ -3070,6 +3074,7 @@
yann@313
    18
 	    {
yann@313
    19
 	      if (!node_has_low_bound (node, index_type))
yann@313
    20
 		{
yann@313
    21
+		  if (!optimize_size) /* don't jl to the .default_label. */
yann@313
    22
 		  emit_cmp_and_jump_insns (index,
yann@313
    23
 					   convert_modes
yann@313
    24
 					   (mode, imode,