Skip to content

Commit e1fa250

Browse files
committed
fixup! [ValueTracking] Compute known FPClass from dominating condition
1 parent 9fc28b7 commit e1fa250

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4231,17 +4231,14 @@ static void computeKnownFPClassFromCond(const Value *V, Value *Cond,
42314231
KnownFPClass &KnownFromContext) {
42324232
CmpInst::Predicate Pred;
42334233
Value *LHS;
4234-
Value *RHS;
42354234
uint64_t ClassVal = 0;
4235+
const APFloat *CRHS;
42364236
// TODO: handle sign-bit check idiom
4237-
if (match(Cond, m_FCmp(Pred, m_Value(LHS), m_Value(RHS)))) {
4238-
const APFloat *CRHS;
4239-
if (match(RHS, m_APFloat(CRHS))) {
4240-
auto [CmpVal, MaskIfTrue, MaskIfFalse] = fcmpImpliesClass(
4241-
Pred, *CxtI->getParent()->getParent(), LHS, *CRHS, LHS != V);
4242-
if (CmpVal == V)
4243-
KnownFromContext.knownNot(~(CondIsTrue ? MaskIfTrue : MaskIfFalse));
4244-
}
4237+
if (match(Cond, m_FCmp(Pred, m_Value(LHS), m_APFloat(CRHS)))) {
4238+
auto [CmpVal, MaskIfTrue, MaskIfFalse] = fcmpImpliesClass(
4239+
Pred, *CxtI->getParent()->getParent(), LHS, *CRHS, LHS != V);
4240+
if (CmpVal == V)
4241+
KnownFromContext.knownNot(~(CondIsTrue ? MaskIfTrue : MaskIfFalse));
42454242
} else if (match(Cond, m_Intrinsic<Intrinsic::is_fpclass>(
42464243
m_Value(LHS), m_ConstantInt(ClassVal)))) {
42474244
FPClassTest Mask = static_cast<FPClassTest>(ClassVal);

llvm/test/Transforms/InstCombine/fpclass-from-dom-cond.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ define i1 @test6(double %x) {
134134
; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt double [[X]], 0.000000e+00
135135
; CHECK-NEXT: br i1 [[CMP]], label [[LAND_RHS:%.*]], label [[LAND_END:%.*]]
136136
; CHECK: land.rhs:
137-
; CHECK-NEXT: [[AND_I:%.*]] = bitcast double [[X]] to i64
138-
; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i64 [[AND_I]], 9218868437227405312
137+
; CHECK-NEXT: [[CMP_I:%.*]] = fcmp oeq double [[X]], 0x7FF0000000000000
139138
; CHECK-NEXT: br label [[LAND_END]]
140139
; CHECK: land.end:
141140
; CHECK-NEXT: [[RET:%.*]] = phi i1 [ false, [[ENTRY:%.*]] ], [ [[CMP_I]], [[LAND_RHS]] ]

0 commit comments

Comments
 (0)