[Bug target/86722] New: ifcvt produces x&0 that is never cleaned up
glisse at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Jul 29 12:43:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86722
Bug ID: 86722
Summary: ifcvt produces x&0 that is never cleaned up
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: glisse at gcc dot gnu.org
Target Milestone: ---
Target: x86_64-*-*
(could be rtl-optimization or target)
void f(double*d,double*e){
for(;d<e;++d)
*d=(*d<.5)?.7:0;
}
Compiling at -O2, noce_try_cmove is triggered and produces
pxor %xmm4, %xmm4
[...]
cmpltsd %xmm2, %xmm0
andpd %xmm0, %xmm3
andnpd %xmm4, %xmm0
orpd %xmm3, %xmm0
The last 2 instructions are useless since xmm4 is 0. I don't know if we should
have something to cleanup x&0 later than pass ce2 or if the cmove expansion
should have a special case for the value 0.
More information about the Gcc-bugs
mailing list