[PATCH] D157807: [ValueTracking] Strengthen analysis in `computeKnownBits` of phi
Noah Goldstein via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 14 09:25:05 PDT 2023
goldstein.w.n updated this revision to Diff 549992.
goldstein.w.n added a comment.
Fixup tests
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157807/new/
https://reviews.llvm.org/D157807
Files:
llvm/lib/Analysis/ValueTracking.cpp
llvm/test/Analysis/ValueTracking/phi-known-bits.ll
Index: llvm/test/Analysis/ValueTracking/phi-known-bits.ll
===================================================================
--- llvm/test/Analysis/ValueTracking/phi-known-bits.ll
+++ llvm/test/Analysis/ValueTracking/phi-known-bits.ll
@@ -375,13 +375,10 @@
define i8 @phi_ugt_high_bits_and_known(i8 %xx) {
; CHECK-LABEL: @phi_ugt_high_bits_and_known(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 1
-; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X]], -65
+; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[XX:%.*]], -65
; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]
; CHECK: T:
-; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ -1, [[F]] ]
-; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 65
-; CHECK-NEXT: ret i8 [[R]]
+; CHECK-NEXT: ret i8 65
; CHECK: F:
; CHECK-NEXT: br label [[T]]
;
Index: llvm/lib/Analysis/ValueTracking.cpp
===================================================================
--- llvm/lib/Analysis/ValueTracking.cpp
+++ llvm/lib/Analysis/ValueTracking.cpp
@@ -1459,11 +1459,13 @@
// Recurse, but cap the recursion to one level, because we don't
// want to waste time spinning around in loops.
+ // TODO: See if we can base recursion limiter on number of incoming phi
+ // edges so we don't overly clamp analysis.
computeKnownBits(IncValue, Known2, MaxAnalysisRecursionDepth - 1, RecQ);
- // If this failed, see if we can use a conditional branch into the phi
+ // See if we can further use a conditional branch into the phi
// to help us determine the range of the value.
- if (Known2.isUnknown()) {
+ if (!Known2.isConstant()) {
ICmpInst::Predicate Pred;
const APInt *RHSC;
BasicBlock *TrueSucc, *FalseSucc;
@@ -1478,7 +1480,7 @@
Pred = CmpInst::getInversePredicate(Pred);
// Get the knownbits implied by the incoming phi condition.
auto CR = ConstantRange::makeExactICmpRegion(Pred, *RHSC);
- Known2 = CR.toKnownBits();
+ Known2 = Known2.unionWith(CR.toKnownBits());
}
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D157807.549992.patch
Type: text/x-patch
Size: 2196 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230814/5d9ccf47/attachment.bin>
More information about the llvm-commits
mailing list