[SCEV] Add a `scalar-evolution-print-constant-ranges' option
authorSanjoy Das <sanjoy@playingwithpointers.com>
Mon, 9 Mar 2015 21:43:39 +0000 (21:43 +0000)
committerSanjoy Das <sanjoy@playingwithpointers.com>
Mon, 9 Mar 2015 21:43:39 +0000 (21:43 +0000)
Summary:
Unused in this commit, but will be used in a subsequent change (D8142)
by a FileCheck test.

Reviewers: atrick

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D8143

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231708 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp
test/Analysis/ScalarEvolution/fold.ll
test/Analysis/ScalarEvolution/load.ll
test/Analysis/ScalarEvolution/max-trip-count-address-space.ll
test/Analysis/ScalarEvolution/nsw.ll
test/Analysis/ScalarEvolution/sext-iv-0.ll
test/Analysis/ScalarEvolution/sext-iv-2.ll
test/Analysis/ScalarEvolution/trip-count11.ll
test/Analysis/ScalarEvolution/zext-wrap.ll

index 49adbc376765795af7af5666d4eb86025921eb72..ce92e8c34692b1399c545f45631e412fae1cc39f 100644 (file)
@@ -8150,6 +8150,12 @@ void ScalarEvolution::print(raw_ostream &OS, const Module *) const {
       OS << "  -->  ";
       const SCEV *SV = SE.getSCEV(&*I);
       SV->print(OS);
+      if (!isa<SCEVCouldNotCompute>(SV)) {
+        OS << " U: ";
+        SE.getUnsignedRange(SV).print(OS);
+        OS << " S: ";
+        SE.getSignedRange(SV).print(OS);
+      }
 
       const Loop *L = LI->getLoopFor((*I).getParent());
 
@@ -8157,6 +8163,12 @@ void ScalarEvolution::print(raw_ostream &OS, const Module *) const {
       if (AtUse != SV) {
         OS << "  -->  ";
         AtUse->print(OS);
+        if (!isa<SCEVCouldNotCompute>(AtUse)) {
+          OS << " U: ";
+          SE.getUnsignedRange(AtUse).print(OS);
+          OS << " S: ";
+          SE.getSignedRange(AtUse).print(OS);
+        }
       }
 
       if (L) {
index ab5742557b33aef4e11964dc1b711934cc0bcc72..9b11b709951e8e63409e9c21a959e8830d38db60 100644 (file)
@@ -34,7 +34,7 @@ loop:
   %rand2 = icmp ugt i32 %A, %Z1
   %Z2 = select i1 %rand2, i32 %A, i32 %Z1
 ; CHECK: %Z2 =
-; CHECK-NEXT: -->  ([[EXPR:.*]]){{ +}}Exits: 20
+; CHECK-NEXT: -->  ([[EXPR:.*]]){{ U: [^ ]+ S: [^ ]+}}{{ +}}Exits: 20
   %B = trunc i32 %Z2 to i16
   %C = sext i16 %B to i30
 ; CHECK: %C =
index f73e7f1c2016a585aef6bd5f91bd0a22f93454dc..ea79476de6b315da3232012327e5156a21e960e2 100644 (file)
@@ -14,14 +14,14 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %sum.04 = phi i32 [ 0, %entry ], [ %add2, %for.body ]
-; CHECK: -->  %sum.04{{ *}}Exits: 2450
+; CHECK: -->  %sum.04{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 2450
   %i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
   %arrayidx = getelementptr inbounds [50 x i32], [50 x i32]* @arr1, i32 0, i32 %i.03
   %0 = load i32, i32* %arrayidx, align 4
-; CHECK: -->  %0{{ *}}Exits: 50
+; CHECK: -->  %0{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 50
   %arrayidx1 = getelementptr inbounds [50 x i32], [50 x i32]* @arr2, i32 0, i32 %i.03
   %1 = load i32, i32* %arrayidx1, align 4
-; CHECK: -->  %1{{ *}}Exits: 0
+; CHECK: -->  %1{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 0
   %add = add i32 %0, %sum.04
   %add2 = add i32 %add, %1
   %inc = add nsw i32 %i.03, 1
@@ -48,15 +48,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ]
-; CHECK: -->  %sum.02{{ *}}Exits: 10
+; CHECK: -->  %sum.02{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 10
   %n.01 = phi %struct.ListNode* [ bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node5 to %struct.ListNode*), %entry ], [ %1, %for.body ]
-; CHECK: -->  %n.01{{ *}}Exits: @node1
+; CHECK: -->  %n.01{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: @node1
   %i = getelementptr inbounds %struct.ListNode, %struct.ListNode* %n.01, i64 0, i32 1
   %0 = load i32, i32* %i, align 4
   %add = add nsw i32 %0, %sum.02
   %next = getelementptr inbounds %struct.ListNode, %struct.ListNode* %n.01, i64 0, i32 0
   %1 = load %struct.ListNode*, %struct.ListNode** %next, align 8
-; CHECK: -->  %1{{ *}}Exits: 0
+; CHECK: -->  %1{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 0
   %cmp = icmp eq %struct.ListNode* %1, null
   br i1 %cmp, label %for.end, label %for.body
 
index 1bdb6f2ec4524bca68ff9db0fbde3e7c2f2d3eff..8d6cb2fbf63f07cbc39a3974a643c3b8caf74966 100644 (file)
@@ -4,7 +4,7 @@
 
 target datalayout = "e-p:32:32:32-p1:16:16:16-p2:8:8:8-p4:64:64:64-n16:32:64"
 
-; CHECK:  {%d,+,4}<%bb>                Exits: ((4 * (trunc i32 (-1 + %n) to i16)) + %d)
+; CHECK:  {%d,+,4}<%bb>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: ((4 * (trunc i32 (-1 + %n) to i16)) + %d)
 
 
 define void @foo(i32 addrspace(1)* nocapture %d, i32 %n) nounwind {
index 0a3c535b04991fd7927de11fd808d4dc7a89c6d0..15444e38b83cb4f21267d80dfa8b2a8fce95c126 100644 (file)
@@ -124,7 +124,7 @@ exit:
 }
 
 ; CHECK-LABEL: PR12375
-; CHECK: -->  {(4 + %arg),+,4}<nuw><%bb1>              Exits: (8 + %arg)<nsw>
+; CHECK: -->  {(4 + %arg),+,4}<nuw><%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (8 + %arg)<nsw>
 define i32 @PR12375(i32* readnone %arg) {
 bb:
   %tmp = getelementptr inbounds i32, i32* %arg, i64 2
@@ -143,7 +143,7 @@ bb7:                                              ; preds = %bb1
 }
 
 ; CHECK-LABEL: PR12376
-; CHECK: -->  {(4 + %arg),+,4}<nuw><%bb2>              Exits: (4 + (4 * ((3 + (-1 * %arg) + (%arg umax %arg1)) /u 4)) + %arg)
+; CHECK: -->  {(4 + %arg),+,4}<nuw><%bb2>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (4 + (4 * ((3 + (-1 * %arg) + (%arg umax %arg1)) /u 4)) + %arg)
 define void @PR12376(i32* nocapture %arg, i32* nocapture %arg1)  {
 bb:
   br label %bb2
@@ -161,7 +161,7 @@ bb5:                                              ; preds = %bb2
 declare void @f(i32)
 
 ; CHECK-LABEL: nswnowrap
-; CHECK: --> {(1 + %v),+,1}<nsw><%for.body>   Exits: (2 + %v)
+; CHECK: --> {(1 + %v),+,1}<nsw><%for.body>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (2 + %v)
 define void @nswnowrap(i32 %v) {
 entry:
   %add = add nsw i32 %v, 1
index 47f02715c0da4362e62cf5cfba271afe6e0b8748..5634078d2b0e497c8610b17c5bbc512dc95e4510 100644 (file)
@@ -13,16 +13,16 @@ bb1.thread:
 bb1:           ; preds = %bb1, %bb1.thread
        %i.0.reg2mem.0 = phi i64 [ -128, %bb1.thread ], [ %8, %bb1 ]            ; <i64> [#uses=3]
 ; CHECK: %i.0.reg2mem.0
-; CHECK-NEXT: -->  {-128,+,1}<%bb1>            Exits: 127
+; CHECK-NEXT: -->  {-128,+,1}<%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 127
        %0 = trunc i64 %i.0.reg2mem.0 to i8             ; <i8> [#uses=1]
 ; CHECK: %0
-; CHECK-NEXT: -->  {-128,+,1}<%bb1>            Exits: 127
+; CHECK-NEXT: -->  {-128,+,1}<%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 127
        %1 = trunc i64 %i.0.reg2mem.0 to i9             ; <i8> [#uses=1]
 ; CHECK: %1
-; CHECK-NEXT: -->  {-128,+,1}<%bb1>            Exits: 127
+; CHECK-NEXT: -->  {-128,+,1}<%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 127
        %2 = sext i9 %1 to i64          ; <i64> [#uses=1]
 ; CHECK: %2
-; CHECK-NEXT: -->  {-128,+,1}<nsw><%bb1>       Exits: 127
+; CHECK-NEXT: -->  {-128,+,1}<nsw><%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 127
        %3 = getelementptr double, double* %x, i64 %2           ; <double*> [#uses=1]
        %4 = load double, double* %3, align 8           ; <double> [#uses=1]
        %5 = fmul double %4, 3.900000e+00               ; <double> [#uses=1]
index 6e075739b439f0a0739a3d6d2faddc4de99559e8..c9d6e4775ecd6b62f42a2fe4136df04526fed011 100644 (file)
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
 
 ; CHECK: %tmp3 = sext i8 %tmp2 to i32
-; CHECK: -->  (sext i8 {0,+,1}<%bb1> to i32)   Exits: -1
+; CHECK: -->  (sext i8 {0,+,1}<%bb1> to i32){{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: -1
 ; CHECK: %tmp4 = mul i32 %tmp3, %i.02
-; CHECK: -->  ((sext i8 {0,+,1}<%bb1> to i32) * {0,+,1}<%bb>)   Exits: {0,+,-1}<%bb>
+; CHECK: -->  ((sext i8 {0,+,1}<%bb1> to i32) * {0,+,1}<%bb>){{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: {0,+,-1}<%bb>
 
 ; These sexts are not foldable.
 
index b0a2c4094a5c8df65becf98cf90990bbbb3301d4..819a89efd5079bc0d499c6c47079d80ad8d4cfe1 100644 (file)
@@ -13,7 +13,7 @@ entry:
 
 for.cond:                                         ; preds = %for.inc, %entry
   %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
-; CHECK: --> %sum.0 Exits: 28
+; CHECK: --> %sum.0{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 28
   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
   %cmp = icmp ult i32 %i.0, 8
   br i1 %cmp, label %for.inc, label %for.end
@@ -36,7 +36,7 @@ entry:
 
 for.cond:                                         ; preds = %for.inc, %entry
   %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
-; CHECK: --> %sum.0 Exits: 28
+; CHECK: --> %sum.0{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 28
   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
   %cmp = icmp ult i32 %i.0, 8
   br i1 %cmp, label %for.inc, label %for.end
index 104ed41010af0f70a40ee51476b6dd8e392532aa..f56e4556c697a843e8464b2c908075a2231ab48d 100644 (file)
@@ -10,7 +10,7 @@ bb.i:           ; preds = %bb1.i, %bb.nph
 
 ; This cast shouldn't be folded into the addrec.
 ; CHECK: %tmp = zext i8 %l_95.0.i1 to i16
-; CHECK: -->  (zext i8 {0,+,-1}<%bb.i> to i16)    Exits: 2
+; CHECK: -->  (zext i8 {0,+,-1}<%bb.i> to i16){{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 2
 
         %tmp = zext i8 %l_95.0.i1 to i16