diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2017-12-07 17:50:54 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2017-12-07 17:50:54 +0000 |
commit | 75214935bee043e659ca7172a84451ded10e8987 (patch) | |
tree | d8573e0592c70f7dbd5aff292a730f6d78f007be /gcc/lra.c | |
parent | 47f5f7e74920fe65f5ebe4737a9c70c34178990a (diff) | |
download | gcc-75214935bee043e659ca7172a84451ded10e8987.zip gcc-75214935bee043e659ca7172a84451ded10e8987.tar.gz gcc-75214935bee043e659ca7172a84451ded10e8987.tar.bz2 |
re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")
2017-12-07 Vladimir Makarov <vmakarov@redhat.com>
PR target/83252
PR rtl-optimization/80818
* lra.c (add_regs_to_insn_regno_info): Make a hard reg in CLOBBER
always early clobbered.
* lra-lives.c (process_bb_lives): Check input hard regs for early
clobbered non-operand hard reg.
From-SVN: r255471
Diffstat (limited to 'gcc/lra.c')
-rw-r--r-- | gcc/lra.c | 14 |
1 files changed, 5 insertions, 9 deletions
@@ -1476,15 +1476,11 @@ add_regs_to_insn_regno_info (lra_insn_recog_data_t data, rtx x, add_regs_to_insn_regno_info (data, SET_SRC (x), insn, OP_IN, false, 0); break; case CLOBBER: - { - int code = INSN_CODE (insn); - - /* We treat clobber of non-operand hard registers as early - clobber (the behavior is expected from asm). */ - add_regs_to_insn_regno_info (data, XEXP (x, 0), insn, OP_OUT, - code < 0, code < 0 ? ALL_ALTERNATIVES : 0); - break; - } + /* We treat clobber of non-operand hard registers as early + clobber. */ + add_regs_to_insn_regno_info (data, XEXP (x, 0), insn, OP_OUT, + true, ALL_ALTERNATIVES); + break; case PRE_INC: case PRE_DEC: case POST_INC: case POST_DEC: add_regs_to_insn_regno_info (data, XEXP (x, 0), insn, OP_INOUT, false, 0); break; |