diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2007-01-18 08:17:06 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2007-01-18 08:17:06 +0000 |
commit | aeceeb06a15d71d55fcc41c0ff3b3b9be01c79a1 (patch) | |
tree | 454922e216b8e55458271a4dd8cad1c5803279a6 /gcc/ifcvt.c | |
parent | 0eb5e2b93d6816f51c3d61ca837853c9364fbb6f (diff) | |
download | gcc-aeceeb06a15d71d55fcc41c0ff3b3b9be01c79a1.zip gcc-aeceeb06a15d71d55fcc41c0ff3b3b9be01c79a1.tar.gz gcc-aeceeb06a15d71d55fcc41c0ff3b3b9be01c79a1.tar.bz2 |
cfgcleanup.c (cleanup_cfg): Detect cfglayout mode and set the CLEANUP_CFGLAYOUT flag when in cfglayout mode.
* cfgcleanup.c (cleanup_cfg): Detect cfglayout mode and set
the CLEANUP_CFGLAYOUT flag when in cfglayout mode.
* Makefile.c (GTFILES): Add cfglayout.h.
* gengtype.c (open_base_files): Likewise.
* cfglayout.c (cfg_layout_function_footer,
cfg_layout_function_header) Reindent to make gengtype happy.
* cfglayout.h (cfg_layout_function_footer,
cfg_layout_function_header): Add GTY(()) marker.
* ifcvt.c (noce_try_sign_mask): Make sure INSN_B is non-null.
From-SVN: r120893
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r-- | gcc/ifcvt.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 9e65a25..99228a8 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -1866,6 +1866,7 @@ noce_try_sign_mask (struct noce_if_info *if_info) rtx cond, t, m, c, seq; enum machine_mode mode; enum rtx_code code; + bool b_unconditional; if (no_new_pseudos) return FALSE; @@ -1899,9 +1900,12 @@ noce_try_sign_mask (struct noce_if_info *if_info) /* This is only profitable if T is cheap, or T is unconditionally executed/evaluated in the original insn sequence. The latter - happens if INSN_B was taken from TEST_BB. */ + happens if INSN_B was taken from TEST_BB, or if there was no + INSN_B which can happen for e.g. conditional stores to memory. */ + b_unconditional = (if_info->insn_b == NULL_RTX + || BLOCK_FOR_INSN (if_info->insn_b) == if_info->test_bb); if (rtx_cost (t, SET) >= COSTS_N_INSNS (2) - && (BLOCK_FOR_INSN (if_info->insn_b) != if_info->test_bb + && (!b_unconditional || t != if_info->b)) return FALSE; |