[Bug target/83850] New: [8 Regression] Spills on vector extract, gcc.target/i386/pr80846-1.c FAILs
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 15 10:16:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83850
Bug ID: 83850
Summary: [8 Regression] Spills on vector extract,
gcc.target/i386/pr80846-1.c FAILs
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Keywords: missed-optimization, ra
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: rguenth at gcc dot gnu.org
Target Milestone: ---
Target: x86_64-*-*
This is a regression from development of the PR80846 patch to the point it
landed on trunk. We now spill the accumulator:
.L2:
vmovdqa64 (%esp), %zmm3
vpaddd (%eax), %zmm3, %zmm2
addl $64, %eax
vmovdqa64 %zmm2, (%esp)
cmpl %eax, %edx
jne .L2
which is because of the extraction of the lower/upper half with
_20 = BIT_FIELD_REF <vect_sum_11.4_6, 256, 0>;
_13 = BIT_FIELD_REF <vect_sum_11.4_6, 256, 256>;
_18 = _13 + _20;
which when TERed into the add looks like
(insn 16 15 18 4 (set (reg:V8SI 107)
(plus:V8SI (subreg:V8SI (reg:V16SI 94 [ vect_sum_11.4 ]) 32)
(subreg:V8SI (reg:V16SI 94 [ vect_sum_11.4 ]) 0))) 3004 {*addv8si3}
(expr_list:REG_DEAD (reg:V16SI 94 [ vect_sum_11.4 ])
(nil)))
before IRA/LRA but LRA then ends up spilling reg:V16SI 94. That defeats
the optimization intended by the PR80846 fix.
More information about the Gcc-bugs
mailing list