Skip to content

Commit 0575198

Browse files
goldsteinnyuxuanchen1997
authored andcommitted
[ValueTracking] Consistently propagate DemandedElts is computeKnownFPClass
Summary: Closes #99080 Test Plan: Reviewers: Subscribers: Tasks: Tags: Differential Revision: https://phabricator.intern.facebook.com/D60250820
1 parent deb6463 commit 0575198

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

llvm/include/llvm/Analysis/ValueTracking.h

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -526,16 +526,17 @@ inline KnownFPClass computeKnownFPClass(
526526
}
527527

528528
/// Wrapper to account for known fast math flags at the use instruction.
529-
inline KnownFPClass computeKnownFPClass(const Value *V, FastMathFlags FMF,
530-
FPClassTest InterestedClasses,
531-
unsigned Depth,
532-
const SimplifyQuery &SQ) {
529+
inline KnownFPClass
530+
computeKnownFPClass(const Value *V, const APInt &DemandedElts,
531+
FastMathFlags FMF, FPClassTest InterestedClasses,
532+
unsigned Depth, const SimplifyQuery &SQ) {
533533
if (FMF.noNaNs())
534534
InterestedClasses &= ~fcNan;
535535
if (FMF.noInfs())
536536
InterestedClasses &= ~fcInf;
537537

538-
KnownFPClass Result = computeKnownFPClass(V, InterestedClasses, Depth, SQ);
538+
KnownFPClass Result =
539+
computeKnownFPClass(V, DemandedElts, InterestedClasses, Depth, SQ);
539540

540541
if (FMF.noNaNs())
541542
Result.KnownFPClasses &= ~fcNan;
@@ -544,6 +545,17 @@ inline KnownFPClass computeKnownFPClass(const Value *V, FastMathFlags FMF,
544545
return Result;
545546
}
546547

548+
inline KnownFPClass computeKnownFPClass(const Value *V, FastMathFlags FMF,
549+
FPClassTest InterestedClasses,
550+
unsigned Depth,
551+
const SimplifyQuery &SQ) {
552+
auto *FVTy = dyn_cast<FixedVectorType>(V->getType());
553+
APInt DemandedElts =
554+
FVTy ? APInt::getAllOnes(FVTy->getNumElements()) : APInt(1, 1);
555+
return computeKnownFPClass(V, DemandedElts, FMF, InterestedClasses, Depth,
556+
SQ);
557+
}
558+
547559
/// Return true if we can prove that the specified FP value is never equal to
548560
/// -0.0. Users should use caution when considering PreserveSign
549561
/// denormal-fp-math.

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5274,8 +5274,9 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
52745274
}
52755275
// reverse preserves all characteristics of the input vec's element.
52765276
case Intrinsic::vector_reverse:
5277-
Known = computeKnownFPClass(II->getArgOperand(0), II->getFastMathFlags(),
5278-
InterestedClasses, Depth + 1, Q);
5277+
Known = computeKnownFPClass(
5278+
II->getArgOperand(0), DemandedElts.reverseBits(),
5279+
II->getFastMathFlags(), InterestedClasses, Depth + 1, Q);
52795280
break;
52805281
case Intrinsic::trunc:
52815282
case Intrinsic::floor:

llvm/test/Analysis/ValueTracking/known-fpclass.ll

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,7 @@ define <4 x i1> @vector_reverse_fpclass2(<4 x double> nofpclass(nzero) %x) {
2626

2727
define i1 @vector_reverse_fpclass_demanded(<4 x double> %vec, double nofpclass(nzero nan) %x) {
2828
; CHECK-LABEL: @vector_reverse_fpclass_demanded(
29-
; CHECK-NEXT: [[X_ABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
30-
; CHECK-NEXT: [[VEC_X:%.*]] = insertelement <4 x double> [[VEC:%.*]], double [[X_ABS]], i64 1
31-
; CHECK-NEXT: [[REV:%.*]] = call <4 x double> @llvm.vector.reverse.v4f64(<4 x double> [[VEC_X]])
32-
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x double> [[REV]], i64 2
33-
; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[ELE]], 0.000000e+00
34-
; CHECK-NEXT: ret i1 [[CMP]]
29+
; CHECK-NEXT: ret i1 true
3530
;
3631

3732
%x.abs = call double @llvm.fabs.f64(double %x)

0 commit comments

Comments
 (0)