[PATCH] D13390: SCEV: handle constant condition for select/branch
Mehdi AMINI via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 2 11:14:44 PDT 2015
joker.eph updated this revision to Diff 36386.
joker.eph added a comment.
Add a test
http://reviews.llvm.org/D13390
Files:
lib/Analysis/ScalarEvolution.cpp
test/Analysis/ScalarEvolution/constant_condition.ll
Index: test/Analysis/ScalarEvolution/constant_condition.ll
===================================================================
--- /dev/null
+++ test/Analysis/ScalarEvolution/constant_condition.ll
@@ -0,0 +1,51 @@
+; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s
+
+define i32 @branch_true(i32 %x, i32 %y) {
+; CHECK-LABEL: Classifying expressions for: @branch_true
+ entry:
+ br i1 true, label %add, label %merge
+
+ add:
+ %sum = add i32 %x, %y
+ br label %merge
+
+ merge:
+ %v = phi i32 [ %sum, %add ], [ %x, %entry ]
+; CHECK: %v = phi i32 [ %sum, %add ], [ %x, %entry ]
+; CHECK-NEXT: --> (%x + %y) U: full-set S: full-set
+ ret i32 %v
+}
+
+define i32 @branch_false(i32 %x, i32 %y) {
+; CHECK-LABEL: Classifying expressions for: @branch_false
+ entry:
+ br i1 false, label %add, label %merge
+
+ add:
+ %sum = add i32 %x, %y
+ br label %merge
+
+ merge:
+ %v = phi i32 [ %sum, %add ], [ %x, %entry ]
+; CHECK: %v = phi i32 [ %sum, %add ], [ %x, %entry ]
+; CHECK-NEXT: --> %x U: full-set S: full-set
+ ret i32 %v
+}
+
+define i32 @select_true(i32 %x, i32 %y) {
+; CHECK-LABEL: Classifying expressions for: @select_true
+ entry:
+ %v = select i1 true, i32 %x, i32 %y
+; CHECK: %v = select i1 true, i32 %x, i32 %y
+; CHECK-NEXT: --> %x U: full-set S: full-set
+ ret i32 %v
+}
+
+define i32 @select_false(i32 %x, i32 %y) {
+; CHECK-LABEL: Classifying expressions for: @select_false
+ entry:
+ %v = select i1 false, i32 %x, i32 %y
+; CHECK: %v = select i1 false, i32 %x, i32 %y
+; CHECK-NEXT: --> %y U: full-set S: full-set
+ ret i32 %v
+}
Index: lib/Analysis/ScalarEvolution.cpp
===================================================================
--- lib/Analysis/ScalarEvolution.cpp
+++ lib/Analysis/ScalarEvolution.cpp
@@ -3890,9 +3890,16 @@
Value *FalseVal) {
// Try to match some simple smax or umax patterns.
auto *ICI = dyn_cast<ICmpInst>(Cond);
- if (!ICI)
+ if (!ICI) {
+ // If this is not an integer condition, it might still be a constant
+ if (auto *CI = dyn_cast<ConstantInt>(Cond)) {
+ if (CI->isOne())
+ return getSCEV(TrueVal);
+ else
+ return getSCEV(FalseVal);
+ }
return getUnknown(I);
-
+ }
Value *LHS = ICI->getOperand(0);
Value *RHS = ICI->getOperand(1);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13390.36386.patch
Type: text/x-patch
Size: 2319 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151002/4dccd21c/attachment.bin>
More information about the llvm-commits
mailing list