Skip to content

Commit 03c0ee0

Browse files
committed
[ValueTracking] Add missing op checks in computeKnownFPClassFromCond
1 parent 64fcb7f commit 03c0ee0

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4906,10 +4906,10 @@ static void computeKnownFPClassFromCond(const Value *V, Value *Cond,
49064906
if (CmpVal == V)
49074907
KnownFromContext.knownNot(~(CondIsTrue ? MaskIfTrue : MaskIfFalse));
49084908
} else if (match(Cond, m_Intrinsic<Intrinsic::is_fpclass>(
4909-
m_Value(LHS), m_ConstantInt(ClassVal)))) {
4909+
m_Specific(V), m_ConstantInt(ClassVal)))) {
49104910
FPClassTest Mask = static_cast<FPClassTest>(ClassVal);
49114911
KnownFromContext.knownNot(CondIsTrue ? ~Mask : Mask);
4912-
} else if (match(Cond, m_ICmp(Pred, m_ElementWiseBitCast(m_Value(LHS)),
4912+
} else if (match(Cond, m_ICmp(Pred, m_ElementWiseBitCast(m_Specific(V)),
49134913
m_APInt(RHS)))) {
49144914
bool TrueIfSigned;
49154915
if (!isSignBitCheck(Pred, *RHS, TrueIfSigned))

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,9 @@ define i1 @pr118257(half %v0, half %v1) {
467467
; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP1]], [[CMP2]]
468468
; CHECK-NEXT: br i1 [[OR_COND]], label [[IF_END:%.*]], label [[IF_ELSE:%.*]]
469469
; CHECK: if.else:
470-
; CHECK-NEXT: ret i1 false
470+
; CHECK-NEXT: [[CAST1:%.*]] = bitcast half [[V1]] to i16
471+
; CHECK-NEXT: [[CMP3:%.*]] = icmp slt i16 [[CAST1]], 0
472+
; CHECK-NEXT: ret i1 [[CMP3]]
471473
; CHECK: if.end:
472474
; CHECK-NEXT: ret i1 false
473475
;
@@ -496,7 +498,9 @@ define i1 @pr118257_is_fpclass(half %v0, half %v1) {
496498
; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP1]], [[CMP2]]
497499
; CHECK-NEXT: br i1 [[OR_COND]], label [[IF_END:%.*]], label [[IF_ELSE:%.*]]
498500
; CHECK: if.else:
499-
; CHECK-NEXT: ret i1 false
501+
; CHECK-NEXT: [[CAST1:%.*]] = bitcast half [[V1]] to i16
502+
; CHECK-NEXT: [[CMP3:%.*]] = icmp slt i16 [[CAST1]], 0
503+
; CHECK-NEXT: ret i1 [[CMP3]]
500504
; CHECK: if.end:
501505
; CHECK-NEXT: ret i1 false
502506
;

0 commit comments

Comments
 (0)