diff options
author | Jan Hubicka <jh@suse.cz> | 2002-10-15 10:24:36 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2002-10-15 08:24:36 +0000 |
commit | 1877be457e46e1f22414e7c215805e9e51c93cea (patch) | |
tree | 2926a21bf98ecf1245514d8ae40ece750b02bc54 /gcc/expr.c | |
parent | 0aab899b147fdb4d232e55bb9307777d07f7ebe4 (diff) | |
download | gcc-1877be457e46e1f22414e7c215805e9e51c93cea.tar.gz |
re PR c/7344 (performance regression on huge case statements)
* i386.md (movv2di_internal): New pattern.
(movv2df_internal, movv8hi_internal, movv16qi_internal): Fix predicate.
(movv2di): New expander.
* i386.c (ix86_preferred_reload_class): Return NO_REGS for vector operands.
* i386.c (ix86_expand_timode_binop_builtin): Delete.
(builtin_description): Add SSE1 logicals; rename SSE2 logicals.
(ix86_init_mmx_sse_builtins): Kill SSE1 logicals.
(ix86_expand_builtin): Likewise.
* i386.h (sse_andti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
sse_andti3,
sse_andnti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
sse_andnti3,
sse_orti4_df_1, sse_orti3_df_2, sse_orti3_sf_1, sse_orti3_sf_2,
sse_orti3,
sse_xorti4_df_1, sse_xorti3_df_2, sse_xorti3_sf_1, sse_xorti3_sf_2,
sse_xorti3): Kill.
(sse_andv4sf3, sse_andnv4sf3, sse_orv2df3, sse_xorv2df3, sse_andv2df3,
sse_andnv2df3, sse_orv2df3, sse_xorv2df3): New expanders.
(*sse_andv4sf3, *sse_andnv2df3, *sse_orv4sf3, *sse_xorv4sf3, *sse_andv2df3,
*sse_andnv2df3, *sse_orv2df3, *sse_xorv2df3): New patterns.
(*sse_andsf3, *sse_andndf3, *sse_ordf3, *sse_xordf3, *sse_anddf3,
*sse_andndf3, *sse_orv2df3, *sse_xorv2df3): New patterns.
* xmmintrin.h (__m128i): Define as __v2di.
PR c/7344
* predict.c (can_predict_insn_p): New function.
(estimate_probability): Avoid unnecesary work.
(process_note_prediction): Likewise.
* toplev.c (rest_of_compilation): Account early branch prediction pass
as TV_BRANCH_PROB.
PR c++/6419
(expand_expr): Use DECL_RTL_SET_P.
From-SVN: r58156
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index e33d8145e1f..c736ebc73e7 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6532,7 +6532,7 @@ expand_expr (exp, target, tmode, modifier) } case PARM_DECL: - if (DECL_RTL (exp) == 0) + if (!DECL_RTL_SET_P (exp)) { error_with_decl (exp, "prior parameter's size depends on `%s'"); return CONST0_RTX (mode); @@ -10942,6 +10942,9 @@ do_tablejump (index, mode, range, table_label, default_label) { rtx temp, vector; + if (range > cfun->max_jumptable_ents) + cfun->max_jumptable_ents = range; + /* Do an unsigned comparison (in the proper mode) between the index expression and the value which represents the length of the range. Since we just finished subtracting the lower bound of the range |