source: icGREP/icgrep-devel/llvm-3.8.0.src/test/Analysis/ScalarEvolution/infer-prestart-no-wrap.ll @ 5027

Last change on this file since 5027 was 5027, checked in by cameron, 3 years ago

Upgrade to llvm 3.8

File size: 2.9 KB
Line 
1; ; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s
2
3define void @infer.sext.0(i1* %c, i32 %start) {
4; CHECK-LABEL: Classifying expressions for: @infer.sext.0
5 entry:
6  br label %loop
7
8 loop:
9  %counter = phi i32 [ 0, %entry ], [ %counter.inc, %loop ]
10  %idx = phi i32 [ %start, %entry ], [ %idx.inc, %loop ]
11  %idx.inc = add nsw i32 %idx, 1
12  %idx.inc.sext = sext i32 %idx.inc to i64
13; CHECK: %idx.inc.sext = sext i32 %idx.inc to i64
14; CHECK-NEXT: -->  {(1 + (sext i32 %start to i64))<nsw>,+,1}<nsw><%loop>
15  %condition = icmp eq i32 %counter, 1
16  %counter.inc = add i32 %counter, 1
17  br i1 %condition, label %exit, label %loop
18
19 exit:
20  ret void
21}
22
23define void @infer.zext.0(i1* %c, i32 %start) {
24; CHECK-LABEL: Classifying expressions for: @infer.zext.0
25 entry:
26  br label %loop
27
28 loop:
29  %counter = phi i32 [ 0, %entry ], [ %counter.inc, %loop ]
30  %idx = phi i32 [ %start, %entry ], [ %idx.inc, %loop ]
31  %idx.inc = add nuw i32 %idx, 1
32  %idx.inc.sext = zext i32 %idx.inc to i64
33; CHECK: %idx.inc.sext = zext i32 %idx.inc to i64
34; CHECK-NEXT: -->  {(1 + (zext i32 %start to i64))<nuw><nsw>,+,1}<nuw><%loop>
35  %condition = icmp eq i32 %counter, 1
36  %counter.inc = add i32 %counter, 1
37  br i1 %condition, label %exit, label %loop
38
39 exit:
40  ret void
41}
42
43define void @infer.sext.1(i32 %start, i1* %c) {
44; CHECK-LABEL: Classifying expressions for: @infer.sext.1
45 entry:
46  %start.mul = mul i32 %start, 4
47  %start.real = add i32 %start.mul, 2
48  br label %loop
49
50 loop:
51  %idx = phi i32 [ %start.real, %entry ], [ %idx.inc, %loop ]
52  %idx.sext = sext i32 %idx to i64
53; CHECK: %idx.sext = sext i32 %idx to i64
54; CHECK-NEXT:  -->  {(2 + (sext i32 (4 * %start) to i64))<nsw>,+,2}<nsw><%loop>
55  %idx.inc = add nsw i32 %idx, 2
56  %condition = load i1, i1* %c
57  br i1 %condition, label %exit, label %loop
58
59 exit:
60  ret void
61}
62
63define void @infer.sext.2(i1* %c, i8 %start) {
64; CHECK-LABEL: Classifying expressions for: @infer.sext.2
65 entry:
66  %start.inc = add i8 %start, 1
67  %entry.condition = icmp slt i8 %start, 127
68  br i1 %entry.condition, label %loop, label %exit
69
70 loop:
71  %idx = phi i8 [ %start.inc, %entry ], [ %idx.inc, %loop ]
72  %idx.sext = sext i8 %idx to i16
73; CHECK: %idx.sext = sext i8 %idx to i16
74; CHECK-NEXT: -->  {(1 + (sext i8 %start to i16))<nsw>,+,1}<nsw><%loop>
75  %idx.inc = add nsw i8 %idx, 1
76  %condition = load volatile i1, i1* %c
77  br i1 %condition, label %exit, label %loop
78
79 exit:
80  ret void
81}
82
83define void @infer.zext.1(i1* %c, i8 %start) {
84; CHECK-LABEL: Classifying expressions for: @infer.zext.1
85 entry:
86  %start.inc = add i8 %start, 1
87  %entry.condition = icmp ult i8 %start, 255
88  br i1 %entry.condition, label %loop, label %exit
89
90 loop:
91  %idx = phi i8 [ %start.inc, %entry ], [ %idx.inc, %loop ]
92  %idx.zext = zext i8 %idx to i16
93; CHECK: %idx.zext = zext i8 %idx to i16
94; CHECK-NEXT: -->  {(1 + (zext i8 %start to i16))<nuw><nsw>,+,1}<nuw><%loop>
95  %idx.inc = add nuw i8 %idx, 1
96  %condition = load volatile i1, i1* %c
97  br i1 %condition, label %exit, label %loop
98
99 exit:
100  ret void
101}
Note: See TracBrowser for help on using the repository browser.