[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