[PATCH] D81549: [LVI] Make use of 'assume'-provided data-part1
JunMa via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 04:52:55 PDT 2020
junparser created this revision.
junparser added reviewers: lebedev.ri, fhahn, nikic, reames, efriedma.
junparser added a project: LLVM.
Herald added subscribers: llvm-commits, hiraditya.
junparser added a parent revision: D81544: [LVI] Make use of 'assume'-provided data.
This part 1 of D81544 <https://reviews.llvm.org/D81544>.
It combines assumptions with value range when solve selectInst in solveBlockValueSelect.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D81549
Files:
llvm/lib/Analysis/LazyValueInfo.cpp
llvm/test/Transforms/JumpThreading/assume.ll
Index: llvm/test/Transforms/JumpThreading/assume.ll
===================================================================
--- llvm/test/Transforms/JumpThreading/assume.ll
+++ llvm/test/Transforms/JumpThreading/assume.ll
@@ -229,6 +229,32 @@
store atomic i32 0, i32* @g unordered, align 4
ret void
}
+
+define void @can_fold_assume5(i32, i32, i1 zeroext, i1 %cond) {
+; CHECK-LABEL: can_fold_assume5
+; CHECK: @llvm.assume
+; CHECK: @llvm.assume
+; CHECK-NOT: @dummy(i1 true)
+ %4 = icmp slt i32 %0, 234
+ tail call void @llvm.assume(i1 %4)
+ %5 = icmp sgt i32 %1, 789
+ tail call void @llvm.assume(i1 %5)
+ %6 = select i1 %2, i32 %0, i32 %1
+ %7 = add i32 %6, -234
+ br i1 %cond, label %label0, label %label2
+
+label0:
+ %8 = icmp ult i32 %7, 556
+ br i1 %8, label %label1, label %label2
+
+label1:
+ tail call void @dummy(i1 true)
+ br label %label2
+
+label2:
+ ret void
+}
+
; Function Attrs: nounwind
declare void @llvm.assume(i1) #1
Index: llvm/lib/Analysis/LazyValueInfo.cpp
===================================================================
--- llvm/lib/Analysis/LazyValueInfo.cpp
+++ llvm/lib/Analysis/LazyValueInfo.cpp
@@ -819,6 +819,8 @@
if (!OptTrueVal)
return None;
ValueLatticeElement &TrueVal = *OptTrueVal;
+ intersectAssumeOrGuardBlockValueConstantRange(SI->getTrueValue(), TrueVal,
+ SI);
// If we hit overdefined, don't ask more queries. We want to avoid poisoning
// extra slots in the table if we can.
@@ -830,6 +832,8 @@
if (!OptFalseVal)
return None;
ValueLatticeElement &FalseVal = *OptFalseVal;
+ intersectAssumeOrGuardBlockValueConstantRange(SI->getFalseValue(), FalseVal,
+ SI);
// If we hit overdefined, don't ask more queries. We want to avoid poisoning
// extra slots in the table if we can.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81549.269794.patch
Type: text/x-patch
Size: 1880 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200610/3df3dc98/attachment.bin>
More information about the llvm-commits
mailing list