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,
|