mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-16 00:16:50 +00:00
Allow vector fsub ops with constants to get the same optimizations as scalars.
This problem is bigger than just fsub, but this is the minimum fix to solve fneg for PR20556 ( http://llvm.org/bugs/show_bug.cgi?id=20556 ), and we solve zero subtraction with the same change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217286 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e8b19acded
commit
52af82df95
@ -6754,8 +6754,8 @@ SDValue DAGCombiner::visitFADD(SDNode *N) {
|
||||
SDValue DAGCombiner::visitFSUB(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
SDValue N1 = N->getOperand(1);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
|
||||
ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0);
|
||||
ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1);
|
||||
EVT VT = N->getValueType(0);
|
||||
SDLoc dl(N);
|
||||
const TargetOptions &Options = DAG.getTarget().Options;
|
||||
|
23
test/CodeGen/X86/vec_unsafe-fp-math.ll
Normal file
23
test/CodeGen/X86/vec_unsafe-fp-math.ll
Normal file
@ -0,0 +1,23 @@
|
||||
; RUN: llc < %s -enable-unsafe-fp-math -mtriple=x86_64-unknown-unknown -mcpu=corei7 | FileCheck %s
|
||||
|
||||
; Make sure that vectors get the same benefits as scalars when using unsafe-fp-math.
|
||||
|
||||
; Subtracting zero is free.
|
||||
define <4 x float> @vec_fsub_zero(<4 x float> %x) {
|
||||
; CHECK-LABEL: vec_fsub_zero:
|
||||
; CHECK-NOT: subps
|
||||
; CHECK-NOT: xorps
|
||||
; CHECK: retq
|
||||
%sub = fsub <4 x float> %x, zeroinitializer
|
||||
ret <4 x float> %sub
|
||||
}
|
||||
|
||||
; Negating doesn't require subtraction.
|
||||
define <4 x float> @vec_fneg(<4 x float> %x) {
|
||||
; CHECK-LABEL: vec_fneg:
|
||||
; CHECK: xorps {{.*}}LCP{{.*}}, %xmm0
|
||||
; CHECK-NOT: subps
|
||||
; CHECK-NEXT: retq
|
||||
%sub = fsub <4 x float> zeroinitializer, %x
|
||||
ret <4 x float> %sub
|
||||
}
|
Loading…
Reference in New Issue
Block a user