Add target-specific dag combines for FAND(x,0) and FOR(x,0). This allows
authorChris Lattner <sabre@nondot.org>
Fri, 25 Jan 2008 05:46:26 +0000 (05:46 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 25 Jan 2008 05:46:26 +0000 (05:46 +0000)
commitaf723b9ae460aa42388ee15a79b68bb1c66e9775
treeeb62818a23874fa1e14d81bb28a098140e36a46e
parent8eea3392984428930b287aecb160c2feda981a13
Add target-specific dag combines for FAND(x,0) and FOR(x,0).  This allows
us to compile:

double test(double X) {
  return copysign(0.0, X);
}

into:

_test:
andpd LCPI1_0(%rip), %xmm0
ret

instead of:
_test:
pxor %xmm1, %xmm1
andpd LCPI1_0(%rip), %xmm1
movapd %xmm0, %xmm2
andpd LCPI1_1(%rip), %xmm2
movapd %xmm1, %xmm0
orpd %xmm2, %xmm0
ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46344 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/copysign-zero.ll [new file with mode: 0644]