diff options
author | Bernd Schmidt <bernds@codesourcery.com> | 2012-05-21 21:37:01 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2012-05-21 21:37:01 +0000 |
commit | 1d2944a3fe5f08e0588d855e52f5ad14c8241c97 (patch) | |
tree | 7115a8e868109f993407bca51ddb1a480c9348a3 /gcc/caller-save.c | |
parent | a9a587118e31b4b8571ca1fe65113634aae7b21f (diff) | |
download | gcc-1d2944a3fe5f08e0588d855e52f5ad14c8241c97.zip gcc-1d2944a3fe5f08e0588d855e52f5ad14c8241c97.tar.gz gcc-1d2944a3fe5f08e0588d855e52f5ad14c8241c97.tar.bz2 |
re PR rtl-optimization/53373 (ICE on valid code with -mavx)
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.
From-SVN: r187745
Diffstat (limited to 'gcc/caller-save.c')
-rw-r--r-- | gcc/caller-save.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/caller-save.c b/gcc/caller-save.c index c8f3b14..44131f9 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; |