aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2003-08-31 13:59:33 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-08-31 13:59:33 +0000
commit9e4b13a79edbe22a7a4d20f0d4aefe59b9b2380b (patch)
tree2943e960a71d6eeaa5a2638ab20272ec65e903d9
parent7c66d5f5f91c0e83d53ad9f9fbc129675d0dea08 (diff)
downloadgcc-9e4b13a79edbe22a7a4d20f0d4aefe59b9b2380b.zip
gcc-9e4b13a79edbe22a7a4d20f0d4aefe59b9b2380b.tar.gz
gcc-9e4b13a79edbe22a7a4d20f0d4aefe59b9b2380b.tar.bz2
re PR middle-end/11823 (Optimizing large jump tables for switch statements)
PR middle-end/11823 * stmt.c (expand_end_case_type): Only use jump tables for dense switch statements when optimizing for size. Co-Authored-By: Roger Sayle <roger@eyesopen.com> From-SVN: r70959
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/stmt.c3
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 790f581..422ceb9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-08-31 Steven Bosscher <steven@gcc.gnu.org>
+ Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/11823
+ * stmt.c (expand_end_case_type): Only use jump tables for dense
+ switch statements when optimizing for size.
+
2003-08-31 Olivier Hainque <hainque@act-europe.fr>
* builtins.c (expand_builtin_setjmp): Use emit_jump to jump around
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 54c93be..9a8c0bc 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -5419,7 +5419,8 @@ expand_end_case_type (tree orig_index, tree orig_type)
because we can optimize it. */
else if (count < case_values_threshold ()
- || compare_tree_int (range, 10 * count) > 0
+ || compare_tree_int (range,
+ (optimize_size ? 3 : 10) * count) > 0
/* RANGE may be signed, and really large ranges will show up
as negative numbers. */
|| compare_tree_int (range, 0) < 0