diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-14 08:35:56 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-14 08:35:56 +0000 |
commit | 1e21781187db46627e7a9d60478045e305ecfc5b (patch) | |
tree | e4089684e1d7c267db1bb44c506adcc2d83afe75 /gcc/cse.c | |
parent | b408db88ceb558693bf1d665771404f1b9290073 (diff) | |
download | gcc-1e21781187db46627e7a9d60478045e305ecfc5b.tar.gz |
* cse.c (cse_insn): When changing (set (pc) (reg)) to
(set (pc) (label_ref)), verify the change creates a valid insn.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31407 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cse.c b/gcc/cse.c index 25821abdb2b..40d30a79d38 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -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; } |