crosstool-ng/patches/gcc/4.2.3/904-flatten-switch-stmt-00.patch
Yann E. MORIN" 8f48d45018 Robert P. J. DAY says:
apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3.  so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories.  seems like a
cheap way to add a couple new versions.
2008-02-17 22:08:06 +00:00

25 lines
920 B
Diff

diff -durN gcc-4.2.1.orig/gcc/stmt.c gcc-4.2.1/gcc/stmt.c
--- gcc-4.2.1.orig/gcc/stmt.c 2007-07-19 05:25:32.000000000 +0200
+++ gcc-4.2.1/gcc/stmt.c 2007-08-03 20:37:19.000000000 +0200
@@ -2512,7 +2512,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);
emit_jump (default_label);
}
@@ -3070,6 +3074,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,