summaryrefslogtreecommitdiff
path: root/patches/gcc/4.4.2/190-flatten-switch-stmt-00.patch
blob: 8db1cccc878bfc076440a2764f659166d7dcd569 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
diff -durN gcc-4.4.0.orig/gcc/stmt.c gcc-4.4.0/gcc/stmt.c
--- gcc-4.4.0.orig/gcc/stmt.c	2009-02-27 20:49:42.000000000 +0100
+++ gcc-4.4.0/gcc/stmt.c	2009-05-27 21:38:21.000000000 +0200
@@ -2376,7 +2376,11 @@
 	  use_cost_table
 	    = (TREE_CODE (orig_type) != ENUMERAL_TYPE
 	       && estimate_case_costs (case_list));
-	  balance_case_nodes (&case_list, NULL);
+	  /* When optimizing for size, we want a straight list to avoid
+	     jumps as much as possible. This basically creates an if-else
+	     chain.  */
+	  if (!optimize_size)
+	    balance_case_nodes (&case_list, NULL);
 	  emit_case_nodes (index, case_list, default_label, index_type);
 	  if (default_label)
 	    emit_jump (default_label);
@@ -2942,6 +2946,7 @@
 	    {
 	      if (!node_has_low_bound (node, index_type))
 		{
+		  if (!optimize_size) /* don't jl to the .default_label. */
 		  emit_cmp_and_jump_insns (index,
 					   convert_modes
 					   (mode, imode,