switch a couple of SCEV tests to autogen for ease of update
This commit is contained in:
parent
b759381b75
commit
a92f11b682
File diff suppressed because it is too large
Load Diff
|
|
@ -1,3 +1,4 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
|
||||
|
||||
; ScalarEvolution should be able to fold away the sign-extensions
|
||||
|
|
@ -7,7 +8,48 @@
|
|||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
|
||||
|
||||
; Note: Without the preheader assume, there is an 'smax' in the
|
||||
; backedge-taken count expression:
|
||||
define void @foo(i32 %no, double* nocapture %d, double* nocapture %q) nounwind {
|
||||
; CHECK-LABEL: 'foo'
|
||||
; CHECK-NEXT: Classifying expressions for: @foo
|
||||
; CHECK-NEXT: %n = and i32 %no, -2
|
||||
; CHECK-NEXT: --> (2 * (%no /u 2))<nuw> U: [0,-1) S: [-2147483648,2147483647)
|
||||
; CHECK-NEXT: %i.01 = phi i32 [ %16, %bb1 ], [ 0, %bb.nph ]
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %1 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %2 = getelementptr inbounds double, double* %d, i64 %1
|
||||
; CHECK-NEXT: --> {%d,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %d) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %4 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %5 = getelementptr inbounds double, double* %q, i64 %4
|
||||
; CHECK-NEXT: --> {%q,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %7 = or i32 %i.01, 1
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %8 = sext i32 %7 to i64
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %9 = getelementptr inbounds double, double* %q, i64 %8
|
||||
; CHECK-NEXT: --> {(8 + %q)<nuw>,+,16}<nuw><%bb> U: [8,0) S: [8,0) Exits: (8 + (16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t7 = add nsw i32 %i.01, 1
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t8 = sext i32 %t7 to i64
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t9 = getelementptr inbounds double, double* %q, i64 %t8
|
||||
; CHECK-NEXT: --> {(8 + %q)<nuw>,+,16}<nuw><%bb> U: [8,0) S: [8,0) Exits: (8 + (16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %14 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %15 = getelementptr inbounds double, double* %d, i64 %14
|
||||
; CHECK-NEXT: --> {%d,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %d) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %16 = add nsw i32 %i.01, 2
|
||||
; CHECK-NEXT: --> {2,+,2}<nuw><nsw><%bb> U: [2,2147483647) S: [2,2147483647) Exits: (2 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @foo
|
||||
; CHECK-NEXT: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK-NEXT: Loop %bb: max backedge-taken count is 1073741822
|
||||
; CHECK-NEXT: Loop %bb: Predicated backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %bb: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%n = and i32 %no, 4294967294
|
||||
%0 = icmp sgt i32 %n, 0 ; <i1> [#uses=1]
|
||||
|
|
@ -20,12 +62,8 @@ bb.nph: ; preds = %entry
|
|||
bb: ; preds = %bb.nph, %bb1
|
||||
%i.01 = phi i32 [ %16, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=5]
|
||||
|
||||
; CHECK: %1 = sext i32 %i.01 to i64
|
||||
; CHECK: --> {0,+,2}<nuw><nsw><%bb>
|
||||
%1 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %2 = getelementptr inbounds double, double* %d, i64 %1
|
||||
; CHECK: --> {%d,+,16}<nuw><%bb>
|
||||
%2 = getelementptr inbounds double, double* %d, i64 %1 ; <double*> [#uses=1]
|
||||
|
||||
%3 = load double, double* %2, align 8 ; <double> [#uses=1]
|
||||
|
|
@ -34,24 +72,16 @@ bb: ; preds = %bb.nph, %bb1
|
|||
%6 = load double, double* %5, align 8 ; <double> [#uses=1]
|
||||
%7 = or i32 %i.01, 1 ; <i32> [#uses=1]
|
||||
|
||||
; CHECK: %8 = sext i32 %7 to i64
|
||||
; CHECK: --> {1,+,2}<nuw><nsw><%bb>
|
||||
%8 = sext i32 %7 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %9 = getelementptr inbounds double, double* %q, i64 %8
|
||||
; CHECK: {(8 + %q)<nuw>,+,16}<nuw><%bb>
|
||||
%9 = getelementptr inbounds double, double* %q, i64 %8 ; <double*> [#uses=1]
|
||||
|
||||
; Artificially repeat the above three instructions, this time using
|
||||
; add nsw instead of or.
|
||||
%t7 = add nsw i32 %i.01, 1 ; <i32> [#uses=1]
|
||||
|
||||
; CHECK: %t8 = sext i32 %t7 to i64
|
||||
; CHECK: --> {1,+,2}<nuw><nsw><%bb>
|
||||
%t8 = sext i32 %t7 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %t9 = getelementptr inbounds double, double* %q, i64 %t8
|
||||
; CHECK: {(8 + %q)<nuw>,+,16}<nuw><%bb>
|
||||
%t9 = getelementptr inbounds double, double* %q, i64 %t8 ; <double*> [#uses=1]
|
||||
|
||||
%10 = load double, double* %9, align 8 ; <double> [#uses=1]
|
||||
|
|
@ -76,8 +106,3 @@ return: ; preds = %bb1.return_crit_edg
|
|||
}
|
||||
|
||||
declare void @llvm.assume(i1) nounwind
|
||||
|
||||
; Note: Without the preheader assume, there is an 'smax' in the
|
||||
; backedge-taken count expression:
|
||||
; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK: Loop %bb: max backedge-taken count is 1073741822
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
|
||||
|
||||
; ScalarEvolution should be able to fold away the sign-extensions
|
||||
|
|
@ -7,6 +8,45 @@
|
|||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
|
||||
|
||||
define void @foo(i32 %no, double* nocapture %d, double* nocapture %q) nounwind {
|
||||
; CHECK-LABEL: 'foo'
|
||||
; CHECK-NEXT: Classifying expressions for: @foo
|
||||
; CHECK-NEXT: %n = and i32 %no, -2
|
||||
; CHECK-NEXT: --> (2 * (%no /u 2))<nuw> U: [0,-1) S: [-2147483648,2147483647)
|
||||
; CHECK-NEXT: %i.01 = phi i32 [ %16, %bb1 ], [ 0, %bb.nph ]
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %1 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %2 = getelementptr inbounds double, double* %d, i64 %1
|
||||
; CHECK-NEXT: --> {%d,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %d) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %4 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %5 = getelementptr inbounds double, double* %q, i64 %4
|
||||
; CHECK-NEXT: --> {%q,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %7 = or i32 %i.01, 1
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %8 = sext i32 %7 to i64
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %9 = getelementptr inbounds double, double* %q, i64 %8
|
||||
; CHECK-NEXT: --> {(8 + %q)<nuw>,+,16}<nuw><%bb> U: [8,0) S: [8,0) Exits: (8 + (16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t7 = add nsw i32 %i.01, 1
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t8 = sext i32 %t7 to i64
|
||||
; CHECK-NEXT: --> {1,+,2}<nuw><nsw><%bb> U: [1,2147483646) S: [1,2147483646) Exits: (1 + (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw>)<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %t9 = getelementptr inbounds double, double* %q, i64 %t8
|
||||
; CHECK-NEXT: --> {(8 + %q)<nuw>,+,16}<nuw><%bb> U: [8,0) S: [8,0) Exits: (8 + (16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %q) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %14 = sext i32 %i.01 to i64
|
||||
; CHECK-NEXT: --> {0,+,2}<nuw><nsw><%bb> U: [0,2147483645) S: [0,2147483645) Exits: (2 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %15 = getelementptr inbounds double, double* %d, i64 %14
|
||||
; CHECK-NEXT: --> {%d,+,16}<nuw><%bb> U: full-set S: full-set Exits: ((16 * ((1 + (zext i32 (-2 + (2 * (%no /u 2))<nuw>) to i64))<nuw><nsw> /u 2))<nuw><nsw> + %d) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: %16 = add nsw i32 %i.01, 2
|
||||
; CHECK-NEXT: --> {2,+,2}<nuw><nsw><%bb> U: [2,2147483647) S: [2,2147483647) Exits: (2 + (2 * ((-1 + (2 * (%no /u 2))<nuw>) /u 2))<nuw>) LoopDispositions: { %bb: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @foo
|
||||
; CHECK-NEXT: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK-NEXT: Loop %bb: max backedge-taken count is 1073741822
|
||||
; CHECK-NEXT: Loop %bb: Predicated backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %bb: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%n = and i32 %no, 4294967294
|
||||
%0 = icmp sgt i32 %n, 0 ; <i1> [#uses=1]
|
||||
|
|
@ -18,12 +58,8 @@ bb.nph: ; preds = %entry
|
|||
bb: ; preds = %bb.nph, %bb1
|
||||
%i.01 = phi i32 [ %16, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=5]
|
||||
|
||||
; CHECK: %1 = sext i32 %i.01 to i64
|
||||
; CHECK: --> {0,+,2}<nuw><nsw><%bb>
|
||||
%1 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %2 = getelementptr inbounds double, double* %d, i64 %1
|
||||
; CHECK: --> {%d,+,16}<nuw><%bb>
|
||||
%2 = getelementptr inbounds double, double* %d, i64 %1 ; <double*> [#uses=1]
|
||||
|
||||
%3 = load double, double* %2, align 8 ; <double> [#uses=1]
|
||||
|
|
@ -32,24 +68,16 @@ bb: ; preds = %bb.nph, %bb1
|
|||
%6 = load double, double* %5, align 8 ; <double> [#uses=1]
|
||||
%7 = or i32 %i.01, 1 ; <i32> [#uses=1]
|
||||
|
||||
; CHECK: %8 = sext i32 %7 to i64
|
||||
; CHECK: --> {1,+,2}<nuw><nsw><%bb>
|
||||
%8 = sext i32 %7 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %9 = getelementptr inbounds double, double* %q, i64 %8
|
||||
; CHECK: {(8 + %q)<nuw>,+,16}<nuw><%bb>
|
||||
%9 = getelementptr inbounds double, double* %q, i64 %8 ; <double*> [#uses=1]
|
||||
|
||||
; Artificially repeat the above three instructions, this time using
|
||||
; add nsw instead of or.
|
||||
%t7 = add nsw i32 %i.01, 1 ; <i32> [#uses=1]
|
||||
|
||||
; CHECK: %t8 = sext i32 %t7 to i64
|
||||
; CHECK: --> {1,+,2}<nuw><nsw><%bb>
|
||||
%t8 = sext i32 %t7 to i64 ; <i64> [#uses=1]
|
||||
|
||||
; CHECK: %t9 = getelementptr inbounds double, double* %q, i64 %t8
|
||||
; CHECK: {(8 + %q)<nuw>,+,16}<nuw><%bb>
|
||||
%t9 = getelementptr inbounds double, double* %q, i64 %t8 ; <double*> [#uses=1]
|
||||
|
||||
%10 = load double, double* %9, align 8 ; <double> [#uses=1]
|
||||
|
|
@ -72,6 +100,3 @@ bb1.return_crit_edge: ; preds = %bb1
|
|||
return: ; preds = %bb1.return_crit_edge, %entry
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)
|
||||
; CHECK: Loop %bb: max backedge-taken count is 1073741822
|
||||
|
|
|
|||
|
|
@ -1,9 +1,25 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
|
||||
|
||||
; copied from flags-from-poison.ll
|
||||
; CHECK-LABEL: @test-add-nuw
|
||||
; CHECK: --> {(1 + %offset)<nuw>,+,1}<nuw><%loop> U: [1,0) S: [1,0)
|
||||
define void @test-add-nuw(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-add-nuw'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-add-nuw
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,1}<nuw><%loop> U: full-set S: full-set Exits: (-1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nuw i32 %i, 1
|
||||
; CHECK-NEXT: --> {1,+,1}<nuw><%loop> U: [1,0) S: [1,0) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nuw i32 %nexti, %offset
|
||||
; CHECK-NEXT: --> {(1 + %offset)<nuw>,+,1}<nuw><%loop> U: [1,0) S: [1,0) Exits: (%offset + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> ((4 * (sext i32 {(1 + %offset)<nuw>,+,1}<nuw><%loop> to i64))<nsw> + %input) U: full-set S: full-set Exits: ((4 * (sext i32 (%offset + %numIterations) to i64))<nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-add-nuw
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
br label %loop
|
||||
loop:
|
||||
|
|
@ -19,9 +35,26 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test-addrec-nuw
|
||||
; CHECK: --> {(1 + (10 smax %offset))<nuw>,+,1}<nuw><%loop> U: [11,0) S: [11,0)
|
||||
define void @test-addrec-nuw(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-addrec-nuw'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-addrec-nuw
|
||||
; CHECK-NEXT: %min.10 = select i1 %cmp, i32 %offset, i32 10
|
||||
; CHECK-NEXT: --> (10 smax %offset) U: [10,-2147483648) S: [10,-2147483648)
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,1}<nuw><%loop> U: full-set S: full-set Exits: (-1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nuw i32 %i, 1
|
||||
; CHECK-NEXT: --> {1,+,1}<nuw><%loop> U: [1,0) S: [1,0) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nuw i32 %nexti, %min.10
|
||||
; CHECK-NEXT: --> {(1 + (10 smax %offset))<nuw>,+,1}<nuw><%loop> U: [11,0) S: [11,0) Exits: ((10 smax %offset) + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> ((4 * (sext i32 {(1 + (10 smax %offset))<nuw>,+,1}<nuw><%loop> to i64))<nsw> + %input) U: full-set S: full-set Exits: ((4 * (sext i32 ((10 smax %offset) + %numIterations) to i64))<nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-addrec-nuw
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%cmp = icmp sgt i32 %offset, 10
|
||||
%min.10 = select i1 %cmp, i32 %offset, i32 10
|
||||
|
|
@ -39,9 +72,26 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test-addrec-nsw-start-neg-strip-neg
|
||||
; CHECK: --> {(-1 + (-10 smin %offset))<nsw>,+,-1}<nsw><%loop> U: [-2147483648,-10) S: [-2147483648,-10)
|
||||
define void @test-addrec-nsw-start-neg-strip-neg(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-addrec-nsw-start-neg-strip-neg'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-addrec-nsw-start-neg-strip-neg
|
||||
; CHECK-NEXT: %max = select i1 %cmp, i32 %offset, i32 -10
|
||||
; CHECK-NEXT: --> (-10 smin %offset) U: [-2147483648,-9) S: [-2147483648,-9)
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,-1}<nsw><%loop> U: [-2147483648,1) S: [-2147483648,1) Exits: (1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nsw i32 %i, -1
|
||||
; CHECK-NEXT: --> {-1,+,-1}<nsw><%loop> U: [-2147483648,0) S: [-2147483648,0) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nsw i32 %nexti, %max
|
||||
; CHECK-NEXT: --> {(-1 + (-10 smin %offset))<nsw>,+,-1}<nsw><%loop> U: [-2147483648,-10) S: [-2147483648,-10) Exits: ((-10 smin %offset) + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> {(-4 + (4 * (sext i32 (-10 smin %offset) to i64))<nsw> + %input),+,-4}<nw><%loop> U: full-set S: full-set Exits: (-4 + (4 * (sext i32 (-10 smin %offset) to i64))<nsw> + (-4 * (zext i32 (-1 + (-1 * %numIterations)) to i64))<nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-addrec-nsw-start-neg-strip-neg
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %numIterations))
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %numIterations))
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%cmp = icmp slt i32 %offset, -10
|
||||
%max = select i1 %cmp, i32 %offset, i32 -10
|
||||
|
|
@ -59,9 +109,26 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test-addrec-nsw-start-pos-strip-neg
|
||||
; CHECK: --> {(-1 + (10 smin %offset))<nsw>,+,-1}<nsw><%loop> U: [-2147483648,10) S: [-2147483648,10)
|
||||
define void @test-addrec-nsw-start-pos-strip-neg(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-addrec-nsw-start-pos-strip-neg'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-addrec-nsw-start-pos-strip-neg
|
||||
; CHECK-NEXT: %max = select i1 %cmp, i32 %offset, i32 10
|
||||
; CHECK-NEXT: --> (10 smin %offset) U: [-2147483648,11) S: [-2147483648,11)
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,-1}<nsw><%loop> U: [-2147483648,1) S: [-2147483648,1) Exits: (1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nsw i32 %i, -1
|
||||
; CHECK-NEXT: --> {-1,+,-1}<nsw><%loop> U: [-2147483648,0) S: [-2147483648,0) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nsw i32 %nexti, %max
|
||||
; CHECK-NEXT: --> {(-1 + (10 smin %offset))<nsw>,+,-1}<nsw><%loop> U: [-2147483648,10) S: [-2147483648,10) Exits: ((10 smin %offset) + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> {(-4 + (4 * (sext i32 (10 smin %offset) to i64))<nsw> + %input),+,-4}<nw><%loop> U: full-set S: full-set Exits: (-4 + (4 * (sext i32 (10 smin %offset) to i64))<nsw> + (-4 * (zext i32 (-1 + (-1 * %numIterations)) to i64))<nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-addrec-nsw-start-pos-strip-neg
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %numIterations))
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %numIterations))
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%cmp = icmp slt i32 %offset, 10
|
||||
%max = select i1 %cmp, i32 %offset, i32 10
|
||||
|
|
@ -79,9 +146,26 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test-addrec-nsw-start-pos-strip-pos
|
||||
; CHECK: --> {(1 + (10 smax %offset))<nuw><nsw>,+,1}<nuw><nsw><%loop> U: [11,-2147483648) S: [11,-2147483648)
|
||||
define void @test-addrec-nsw-start-pos-strip-pos(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-addrec-nsw-start-pos-strip-pos'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-addrec-nsw-start-pos-strip-pos
|
||||
; CHECK-NEXT: %min = select i1 %cmp, i32 %offset, i32 10
|
||||
; CHECK-NEXT: --> (10 smax %offset) U: [10,-2147483648) S: [10,-2147483648)
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,-2147483648) S: [0,-2147483648) Exits: (-1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nsw i32 %i, 1
|
||||
; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2147483648) S: [1,-2147483648) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nsw i32 %nexti, %min
|
||||
; CHECK-NEXT: --> {(1 + (10 smax %offset))<nuw><nsw>,+,1}<nuw><nsw><%loop> U: [11,-2147483648) S: [11,-2147483648) Exits: ((10 smax %offset) + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> {(4 + (4 * (zext i32 (10 smax %offset) to i64))<nuw><nsw> + %input)<nuw>,+,4}<nuw><%loop> U: [44,0) S: [44,0) Exits: (4 + (4 * (zext i32 (-1 + %numIterations) to i64))<nuw><nsw> + (4 * (zext i32 (10 smax %offset) to i64))<nuw><nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-addrec-nsw-start-pos-strip-pos
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%cmp = icmp sgt i32 %offset, 10
|
||||
%min = select i1 %cmp, i32 %offset, i32 10
|
||||
|
|
@ -99,9 +183,26 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test-addrec-nsw-start-neg-strip-pos
|
||||
; CHECK: --> {(1 + (-10 smax %offset))<nsw>,+,1}<nsw><%loop> U: [-9,-2147483648) S: [-9,-2147483648)
|
||||
define void @test-addrec-nsw-start-neg-strip-pos(float* %input, i32 %offset, i32 %numIterations) {
|
||||
; CHECK-LABEL: 'test-addrec-nsw-start-neg-strip-pos'
|
||||
; CHECK-NEXT: Classifying expressions for: @test-addrec-nsw-start-neg-strip-pos
|
||||
; CHECK-NEXT: %min = select i1 %cmp, i32 %offset, i32 -10
|
||||
; CHECK-NEXT: --> (-10 smax %offset) U: [-10,-2147483648) S: [-10,-2147483648)
|
||||
; CHECK-NEXT: %i = phi i32 [ %nexti, %loop ], [ 0, %entry ]
|
||||
; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,-2147483648) S: [0,-2147483648) Exits: (-1 + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %nexti = add nsw i32 %i, 1
|
||||
; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2147483648) S: [1,-2147483648) Exits: %numIterations LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %index32 = add nsw i32 %nexti, %min
|
||||
; CHECK-NEXT: --> {(1 + (-10 smax %offset))<nsw>,+,1}<nsw><%loop> U: [-9,-2147483648) S: [-9,-2147483648) Exits: ((-10 smax %offset) + %numIterations) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: %ptr = getelementptr inbounds float, float* %input, i32 %index32
|
||||
; CHECK-NEXT: --> {(4 + (4 * (sext i32 (-10 smax %offset) to i64))<nsw> + %input),+,4}<nw><%loop> U: full-set S: full-set Exits: (4 + (4 * (zext i32 (-1 + %numIterations) to i64))<nuw><nsw> + (4 * (sext i32 (-10 smax %offset) to i64))<nsw> + %input) LoopDispositions: { %loop: Computable }
|
||||
; CHECK-NEXT: Determining loop execution counts for: @test-addrec-nsw-start-neg-strip-pos
|
||||
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
|
||||
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %numIterations)
|
||||
; CHECK-NEXT: Predicates:
|
||||
; CHECK: Loop %loop: Trip multiple is 1
|
||||
;
|
||||
entry:
|
||||
%cmp = icmp sgt i32 %offset, -10
|
||||
%min = select i1 %cmp, i32 %offset, i32 -10
|
||||
|
|
|
|||
Loading…
Reference in New Issue