mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 12:50:00 +00:00
Fix a bug in InstCombine where we failed to preserve fast math flags when optimizing an FMUL expression.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199424 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4b81ee4d9a
commit
da5e148474
@ -525,8 +525,11 @@ Instruction *InstCombiner::visitFMul(BinaryOperator &I) {
|
||||
Value *N1 = dyn_castFNegVal(Opnd1, IgnoreZeroSign);
|
||||
|
||||
// -X * -Y => X*Y
|
||||
if (N1)
|
||||
return BinaryOperator::CreateFMul(N0, N1);
|
||||
if (N1) {
|
||||
Value *FMul = Builder->CreateFMul(N0, N1);
|
||||
FMul->takeName(&I);
|
||||
return ReplaceInstUsesWith(I, FMul);
|
||||
}
|
||||
|
||||
if (Opnd0->hasOneUse()) {
|
||||
// -X * Y => -(X*Y) (Promote negation as high as possible)
|
||||
|
@ -24,10 +24,10 @@ define float @test2(float %x) {
|
||||
define float @test3(float %x, float %y) {
|
||||
%sub1 = fsub float -0.000000e+00, %x
|
||||
%sub2 = fsub float -0.000000e+00, %y
|
||||
%mul = fmul float %sub1, %sub2
|
||||
%mul = fmul fast float %sub1, %sub2
|
||||
ret float %mul
|
||||
; CHECK-LABEL: @test3(
|
||||
; CHECK: fmul float %x, %y
|
||||
; CHECK: fmul fast float %x, %y
|
||||
}
|
||||
|
||||
; (0.0 - X) * (0.0 - Y) => X * Y
|
||||
@ -104,4 +104,3 @@ define float @test9(float %x) {
|
||||
; CHECK: fsub
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user