diff options
author | Roger Sayle <roger@eyesopen.com> | 2001-10-24 22:11:40 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-10-24 15:11:40 -0700 |
commit | 1ff37128ae7fd03586750ae1269dd3ef179f3832 (patch) | |
tree | 9e551549baa1abd0812c74a8619b5f316aec7e28 | |
parent | d76b2527779c3a822586c5b1543f5d7d9d22d49c (diff) | |
download | gcc-1ff37128ae7fd03586750ae1269dd3ef179f3832.zip gcc-1ff37128ae7fd03586750ae1269dd3ef179f3832.tar.gz gcc-1ff37128ae7fd03586750ae1269dd3ef179f3832.tar.bz2 |
stmt.c (expand_end_case): Index jumptables from zero for suitably small values of minval.
* stmt.c (expand_end_case): Index jumptables from zero for
suitably small values of minval.
From-SVN: r46478
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/stmt.c | 13 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f704e4a..1dfc939 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-10-24 Roger Sayle <roger@eyesopen.com> + + * stmt.c (expand_end_case): Index jumptables from zero for + suitably small values of minval. + 2001-10-24 Jakub Jelinek <jakub@redhat.com> * stor-layout.c (place_union_field): If any field was aligned with @@ -5534,6 +5534,17 @@ expand_end_case (orig_index) table_label, default_label)) { index_type = thiscase->data.case_stmt.nominal_type; + + /* Index jumptables from zero for suitable values of + minval to avoid a subtraction. */ + if (! optimize_size + && compare_tree_int (minval, 0) > 0 + && compare_tree_int (minval, 3) < 0) + { + minval = integer_zero_node; + range = maxval; + } + if (! try_tablejump (index_type, index_expr, minval, range, table_label, default_label)) abort (); @@ -5541,7 +5552,7 @@ expand_end_case (orig_index) /* Get table of labels to jump to, in order of case index. */ - ncases = TREE_INT_CST_LOW (range) + 1; + ncases = tree_low_cst (range, 0) + 1; labelvec = (rtx *) alloca (ncases * sizeof (rtx)); memset ((char *) labelvec, 0, ncases * sizeof (rtx)); |