[llvm] r249581 - Revert "Revert "This patch builds on top of D13378 to handle constant condition.""

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 7 11:14:25 PDT 2015


Author: mehdi_amini
Date: Wed Oct  7 13:14:25 2015
New Revision: 249581

URL: http://llvm.org/viewvc/llvm-project?rev=249581&view=rev
Log:
Revert "Revert "This patch builds on top of D13378 to handle constant condition.""

This reverts commit r249528 and reapply r249431. The fix for the
fallout has been commited in r249575.

From: Mehdi Amini <mehdi.amini at apple.com>

Added:
    llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll
Modified:
    llvm/trunk/lib/Analysis/ScalarEvolution.cpp

Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=249581&r1=249580&r2=249581&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
+++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Wed Oct  7 13:14:25 2015
@@ -3904,6 +3904,11 @@ const SCEV *ScalarEvolution::createNodeF
                                                       Value *Cond,
                                                       Value *TrueVal,
                                                       Value *FalseVal) {
+  // Handle "constant" branch or select. This can occur for instance when a
+  // loop pass transforms an inner loop and moves on to process the outer loop.
+  if (auto *CI = dyn_cast<ConstantInt>(Cond))
+    return getSCEV(CI->isOne() ? TrueVal : FalseVal);
+
   // Try to match some simple smax or umax patterns.
   auto *ICI = dyn_cast<ICmpInst>(Cond);
   if (!ICI)

Added: llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll?rev=249581&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll (added)
+++ llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll Wed Oct  7 13:14:25 2015
@@ -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
+}




More information about the llvm-commits mailing list