patches/gcc/4.4.2/190-flatten-switch-stmt-00.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 1544 2228ea3f6b79
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
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,