aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2003-04-09 17:50:08 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2003-04-09 17:50:08 +0000
commit0913e4b49e38718e767bc4e4575a8271ee484efb (patch)
tree34830d3300213fa9d314566552067ebc840c3cb3 /gcc/reload1.c
parent21515593f66c14e18a64eec763152dfaabd95fa3 (diff)
downloadgcc-0913e4b49e38718e767bc4e4575a8271ee484efb.zip
gcc-0913e4b49e38718e767bc4e4575a8271ee484efb.tar.gz
gcc-0913e4b49e38718e767bc4e4575a8271ee484efb.tar.bz2
optabs.c: Comment that gen_add2_insn and others may actually return emitted insns...
* optabs.c: Comment that gen_add2_insn and others may actually return emitted insns, if the gen functions turn out to return emitted insns. * reload1.c (reload_cse_move2add): Cope with emitted insns from gen_add2_insn. From-SVN: r65400
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c70694b..a6e41dd 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -9162,8 +9162,16 @@ reload_cse_move2add (first)
validate_change (insn, &SET_SRC (pat), reg, 0);
else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)
&& have_add2_insn (reg, new_src))
- validate_change (insn, &PATTERN (insn),
- gen_add2_insn (reg, new_src), 0);
+ {
+ rtx newpat = gen_add2_insn (reg, new_src);
+ if (INSN_P (newpat) && NEXT_INSN (newpat) == NULL_RTX)
+ newpat = PATTERN (newpat);
+ /* If it was the first insn of a sequence or
+ some other emitted insn, validate_change will
+ reject it. */
+ validate_change (insn, &PATTERN (insn),
+ newpat, 0);
+ }
else
{
enum machine_mode narrow_mode;
@@ -9243,9 +9251,15 @@ reload_cse_move2add (first)
else if ((rtx_cost (new_src, PLUS)
< COSTS_N_INSNS (1) + rtx_cost (src3, SET))
&& have_add2_insn (reg, new_src))
- success
- = validate_change (next, &PATTERN (next),
- gen_add2_insn (reg, new_src), 0);
+ {
+ rtx newpat = gen_add2_insn (reg, new_src);
+ if (INSN_P (newpat)
+ && NEXT_INSN (newpat) == NULL_RTX)
+ newpat = PATTERN (newpat);
+ success
+ = validate_change (next, &PATTERN (next),
+ newpat, 0);
+ }
if (success)
delete_insn (insn);
insn = next;