mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
[InstSimplify] fsub nnan x, x -> 0.0 is valid without ninf
Both inf - inf and (-inf) - (-inf) are NaN, so it's already covered by nnan. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239702 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -854,8 +854,8 @@ static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
|
|||||||
return X;
|
return X;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fsub nnan ninf x, x ==> 0.0
|
// fsub nnan x, x ==> 0.0
|
||||||
if (FMF.noNaNs() && FMF.noInfs() && Op0 == Op1)
|
if (FMF.noNaNs() && Op0 == Op1)
|
||||||
return Constant::getNullValue(Op0->getType());
|
return Constant::getNullValue(Op0->getType());
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -70,17 +70,17 @@ define float @fadd_fsub_0(float %a) {
|
|||||||
ret float %ret
|
ret float %ret
|
||||||
}
|
}
|
||||||
|
|
||||||
; fsub nnan ninf x, x ==> 0.0
|
; fsub nnan x, x ==> 0.0
|
||||||
; CHECK-LABEL: @fsub_x_x(
|
; CHECK-LABEL: @fsub_x_x(
|
||||||
define float @fsub_x_x(float %a) {
|
define float @fsub_x_x(float %a) {
|
||||||
; X - X ==> 0
|
; X - X ==> 0
|
||||||
%zero1 = fsub nnan ninf float %a, %a
|
%zero1 = fsub nnan float %a, %a
|
||||||
|
|
||||||
; Dont fold
|
; Dont fold
|
||||||
; CHECK: %no_zero1 = fsub
|
; CHECK: %no_zero1 = fsub
|
||||||
%no_zero1 = fsub ninf float %a, %a
|
%no_zero1 = fsub ninf float %a, %a
|
||||||
; CHECK: %no_zero2 = fsub
|
; CHECK: %no_zero2 = fsub
|
||||||
%no_zero2 = fsub nnan float %a, %a
|
%no_zero2 = fsub float %a, %a
|
||||||
; CHECK: %no_zero = fadd
|
; CHECK: %no_zero = fadd
|
||||||
%no_zero = fadd float %no_zero1, %no_zero2
|
%no_zero = fadd float %no_zero1, %no_zero2
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user