aboutsummaryrefslogtreecommitdiff
path: root/gcc/caller-save.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2012-05-21 21:37:01 +0000
committerBernd Schmidt <bernds@codesourcery.com>2012-05-21 21:37:01 +0000
commitcfd92d60aeb9a1c22d4cac8e152cac8362438246 (patch)
tree7115a8e868109f993407bca51ddb1a480c9348a3 /gcc/caller-save.c
parent02314b5680cd71c4599a04d5b1a2c87ec935bec6 (diff)
PR rtl-optimization/53373
* caller-save.c (save_call_clobbered_regs): Look into a possible PARALLEL manually rather than using single_set on a call insn. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@187745 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/caller-save.c')
-rw-r--r--gcc/caller-save.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index c8f3b145946..44131f93efd 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -872,11 +872,13 @@ save_call_clobbered_regs (void)
&& HARD_REGISTER_P (cheap)
&& TEST_HARD_REG_BIT (call_used_reg_set, REGNO (cheap)))
{
- rtx call_set = single_set (insn);
- rtx dest = SET_DEST (call_set);
- rtx pat = gen_rtx_SET (VOIDmode, cheap,
- copy_rtx (dest));
- chain = insert_one_insn (chain, 0, -1, pat);
+ rtx dest, newpat;
+ rtx pat = PATTERN (insn);
+ if (GET_CODE (pat) == PARALLEL)
+ pat = XVECEXP (pat, 0, 0);
+ dest = SET_DEST (pat);
+ newpat = gen_rtx_SET (VOIDmode, cheap, copy_rtx (dest));
+ chain = insert_one_insn (chain, 0, -1, newpat);
}
}
last = chain;