patches/gcc/4.4.4/190-flatten-switch-stmt-00.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:56:22 2011 +0200 (2011-07-17)
changeset 2889 f3b2199620f1
parent 1948 d341be24dc68
permissions -rw-r--r--
cc/gcc: pass the install prefix to the core passes

Currently, the discrimination on the core compilers prefixes depends on
the type of core compiler to build.

This is not correct, and the caller of the core backend should specify
the prefix.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.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,