Skip to content

Commit afc42aa

Browse files
committed
[SCEV] Add a test. NFC.
1 parent 975bc07 commit afc42aa

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

llvm/test/Analysis/ScalarEvolution/pr117133.ll

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,47 @@ b7: ; preds = %b3
5151
b8: ; preds = %b1
5252
ret i32 7
5353
}
54+
55+
; Don't fold %indvar2 into (zext {0,+,1}) * %a
56+
define i64 @test_poisonous(i64 %a, i32 %n) {
57+
; CHECK-LABEL: 'test_poisonous'
58+
; CHECK-NEXT: Classifying expressions for: @test_poisonous
59+
; CHECK-NEXT: %indvar1 = phi i32 [ 0, %entry ], [ %indvar1.next, %loop.body ]
60+
; CHECK-NEXT: --> {0,+,1}<%loop.body> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.body: Computable }
61+
; CHECK-NEXT: %indvar2 = phi i64 [ 0, %entry ], [ %mul, %loop.body ]
62+
; CHECK-NEXT: --> %indvar2 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.body: Variant }
63+
; CHECK-NEXT: %indvar1.next = add i32 %indvar1, 1
64+
; CHECK-NEXT: --> {1,+,1}<%loop.body> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.body: Computable }
65+
; CHECK-NEXT: %ext = zext i32 %indvar1.next to i64
66+
; CHECK-NEXT: --> (zext i32 {1,+,1}<%loop.body> to i64) U: [0,4294967296) S: [0,4294967296) Exits: <<Unknown>> LoopDispositions: { %loop.body: Computable }
67+
; CHECK-NEXT: %mul = mul i64 %ext, %a
68+
; CHECK-NEXT: --> ((zext i32 {1,+,1}<%loop.body> to i64) * %a) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.body: Computable }
69+
; CHECK-NEXT: Determining loop execution counts for: @test_poisonous
70+
; CHECK-NEXT: Loop %loop.body: Unpredictable backedge-taken count.
71+
; CHECK-NEXT: Loop %loop.body: Unpredictable constant max backedge-taken count.
72+
; CHECK-NEXT: Loop %loop.body: Unpredictable symbolic max backedge-taken count.
73+
; CHECK-NEXT: Loop %loop.body: Predicated backedge-taken count is (-1 + (1 smax (1 + (sext i32 %n to i64))<nsw>))<nsw>
74+
; CHECK-NEXT: Predicates:
75+
; CHECK-NEXT: {1,+,1}<%loop.body> Added Flags: <nssw>
76+
; CHECK-NEXT: Loop %loop.body: Predicated constant max backedge-taken count is i64 2147483647
77+
; CHECK-NEXT: Predicates:
78+
; CHECK-NEXT: {1,+,1}<%loop.body> Added Flags: <nssw>
79+
; CHECK-NEXT: Loop %loop.body: Predicated symbolic max backedge-taken count is (-1 + (1 smax (1 + (sext i32 %n to i64))<nsw>))<nsw>
80+
; CHECK-NEXT: Predicates:
81+
; CHECK-NEXT: {1,+,1}<%loop.body> Added Flags: <nssw>
82+
;
83+
entry:
84+
br label %loop.body
85+
86+
loop.body:
87+
%indvar1 = phi i32 [ 0, %entry ], [ %indvar1.next, %loop.body ]
88+
%indvar2 = phi i64 [ 0, %entry ], [ %mul, %loop.body ]
89+
%indvar1.next = add i32 %indvar1, 1
90+
%ext = zext i32 %indvar1.next to i64
91+
%mul = mul i64 %ext, %a
92+
%exitcond = icmp sgt i32 %indvar1.next, %n
93+
br i1 %exitcond, label %loop.exit, label %loop.body
94+
95+
loop.exit:
96+
ret i64 %mul
97+
}

0 commit comments

Comments
 (0)