patches/gcc/4.4.1/190-flatten-switch-stmt-00.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Mar 20 18:42:34 2010 +0100 (2010-03-20)
branch1.6
changeset 1883 eec58bf93a1c
parent 1393 b432bd628b10
permissions -rw-r--r--
cc/gcc: fix building for powerpc for the 4.4.x series

Reported by: Thomas Petazzoni
http://sourceware.org/ml/crossgcc/2010-03/msg00057.html

Discussions:
http://lists.uclibc.org/pipermail/uclibc/2010-March/043697.html
http://lists.uclibc.org/pipermail/buildroot/2010-March/032790.html
http://ibot.rikers.org/%23uclibc/20100316.html.gz
(search for "copysignl", by kos_tom, blindvt and y_morin)
(transplanted from 76b1923da63d2e3b8e9010b6138e33f6a99720a8)
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,