[PATCH] D23267: [LVI] Take range metadata into account while calculating icmp condition constraints
Artur Pilipenko via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 12 03:22:09 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL278496: [LVI] Take range metadata into account while calculating icmp condition… (authored by apilipenko).
Changed prior to commit:
https://reviews.llvm.org/D23267?vs=67174&id=67814#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23267
Files:
llvm/trunk/lib/Analysis/LazyValueInfo.cpp
llvm/trunk/test/Transforms/CorrelatedValuePropagation/add.ll
llvm/trunk/test/Transforms/CorrelatedValuePropagation/range.ll
Index: llvm/trunk/lib/Analysis/LazyValueInfo.cpp
===================================================================
--- llvm/trunk/lib/Analysis/LazyValueInfo.cpp
+++ llvm/trunk/lib/Analysis/LazyValueInfo.cpp
@@ -1211,6 +1211,9 @@
/*isFullSet=*/true);
if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS))
RHSRange = ConstantRange(CI->getValue());
+ else if (Instruction *I = dyn_cast<Instruction>(RHS))
+ if (auto *Ranges = I->getMetadata(LLVMContext::MD_range))
+ RHSRange = getConstantRangeFromMetadata(*Ranges);
// If we're interested in the false dest, invert the condition
CmpInst::Predicate Pred =
Index: llvm/trunk/test/Transforms/CorrelatedValuePropagation/add.ll
===================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/add.ll
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/add.ll
@@ -193,3 +193,22 @@
exit:
ret void
}
+
+ at limit = external global i32
+; CHECK-LABEL: @test11(
+define i32 @test11(i32* %p, i32 %i) {
+ %limit = load i32, i32* %p, !range !{i32 0, i32 2147483647}
+ %within.1 = icmp ugt i32 %limit, %i
+ %i.plus.7 = add i32 %i, 7
+ %within.2 = icmp ugt i32 %limit, %i.plus.7
+ %within = and i1 %within.1, %within.2
+ br i1 %within, label %then, label %else
+
+then:
+; CHECK: %i.plus.6 = add nuw nsw i32 %i, 6
+ %i.plus.6 = add i32 %i, 6
+ ret i32 %i.plus.6
+
+else:
+ ret i32 0
+}
Index: llvm/trunk/test/Transforms/CorrelatedValuePropagation/range.ll
===================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/range.ll
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/range.ll
@@ -445,3 +445,20 @@
else:
ret i1 false
}
+
+ at limit = external global i32
+define i1 @test15(i32 %a) {
+; CHECK-LABEL: @test15(
+; CHECK: then:
+; CHECK-NEXT: ret i1 false
+ %limit = load i32, i32* @limit, !range !{i32 0, i32 256}
+ %cmp = icmp ult i32 %a, %limit
+ br i1 %cmp, label %then, label %else
+
+then:
+ %result = icmp eq i32 %a, 255
+ ret i1 %result
+
+else:
+ ret i1 false
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23267.67814.patch
Type: text/x-patch
Size: 2133 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160812/995cb6cd/attachment.bin>
More information about the llvm-commits
mailing list