Skip to content

Commit 6da191e

Browse files
committed
[ValueTracking] Don't take sign bit from NaN operands
1 parent c4fcf16 commit 6da191e

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5058,6 +5058,11 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
50585058
KnownRHS.isKnownNeverPosZero()) &&
50595059
(KnownLHS.isKnownNeverPosZero() ||
50605060
KnownRHS.isKnownNeverNegZero()))) {
5061+
// Don't take sign bit from NaN operands.
5062+
if (!KnownLHS.isKnownNeverNaN())
5063+
KnownLHS.SignBit = std::nullopt;
5064+
if (!KnownRHS.isKnownNeverNaN())
5065+
KnownRHS.SignBit = std::nullopt;
50615066
if ((IID == Intrinsic::maximum || IID == Intrinsic::maximumnum ||
50625067
IID == Intrinsic::maxnum) &&
50635068
(KnownLHS.SignBit == false || KnownRHS.SignBit == false))

llvm/test/Transforms/InstCombine/is_fpclass.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3927,7 +3927,7 @@ define i1 @test_class_is_not_psub_pnorm_pinf__dynamic(float %arg) #3 {
39273927
define i1 @minnum_qnan(i32 %x) {
39283928
; CHECK-LABEL: @minnum_qnan(
39293929
; CHECK-NEXT: entry:
3930-
; CHECK-NEXT: ret i1 false
3930+
; CHECK-NEXT: ret i1 true
39313931
;
39323932
entry:
39333933
%qnan_bits = or i32 %x, -5938

0 commit comments

Comments
 (0)