diff options
author | Jeffrey A Law <law@cygnus.com> | 2000-01-14 08:35:56 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2000-01-14 01:35:56 -0700 |
commit | 516ff948a73dc0f5520eeea790ae0d7d3a09ead9 (patch) | |
tree | e4089684e1d7c267db1bb44c506adcc2d83afe75 /gcc/cse.c | |
parent | 66ec08884147b3cd0638b20f625f3a87897fdd76 (diff) | |
download | gcc-516ff948a73dc0f5520eeea790ae0d7d3a09ead9.zip gcc-516ff948a73dc0f5520eeea790ae0d7d3a09ead9.tar.gz gcc-516ff948a73dc0f5520eeea790ae0d7d3a09ead9.tar.bz2 |
cse.c (cse_insn): When changing (set (pc) (reg)) to (set (pc) (label_ref))...
* cse.c (cse_insn): When changing (set (pc) (reg)) to
(set (pc) (label_ref)), verify the change creates a valid insn.
From-SVN: r31407
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -5189,8 +5189,18 @@ cse_insn (insn, libcall_insn) trial = gen_rtx_LABEL_REF (Pmode, get_label_after (trial)); - SET_SRC (sets[i].rtl) = trial; - cse_jumps_altered = 1; + if (trial == pc_rtx) + { + SET_SRC (sets[i].rtl) = trial; + cse_jumps_altered = 1; + break; + } + + /* We must actually validate the change. Consider a target + where unconditional jumps are more complex than + (set (pc) (label_ref)) such as the fr30. */ + if (validate_change (insn, &SET_SRC (sets[i].rtl), trial, 0)) + cse_jumps_altered = 1; break; } |