annotate llvm/test/Transforms/IndVarSimplify/eliminate-sat.ll @ 252:1f2b6ac9f198 llvm-original

LLVM16-1
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 18 Aug 2023 09:04:13 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
2 ; RUN: opt < %s -S -passes=indvars | FileCheck %s
150
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 declare i32 @llvm.uadd.sat.i32(i32, i32)
anatofuz
parents:
diff changeset
5 declare i32 @llvm.sadd.sat.i32(i32, i32)
anatofuz
parents:
diff changeset
6 declare i32 @llvm.usub.sat.i32(i32, i32)
anatofuz
parents:
diff changeset
7 declare i32 @llvm.ssub.sat.i32(i32, i32)
anatofuz
parents:
diff changeset
8
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
9 define void @uadd_sat(ptr %p) {
150
anatofuz
parents:
diff changeset
10 ; CHECK-LABEL: @uadd_sat(
anatofuz
parents:
diff changeset
11 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
12 ; CHECK-NEXT: br label [[LOOP:%.*]]
anatofuz
parents:
diff changeset
13 ; CHECK: loop:
anatofuz
parents:
diff changeset
14 ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LOOP]] ]
anatofuz
parents:
diff changeset
15 ; CHECK-NEXT: [[SAT1:%.*]] = add nuw nsw i32 [[I]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
16 ; CHECK-NEXT: store volatile i32 [[SAT1]], ptr [[P:%.*]]
150
anatofuz
parents:
diff changeset
17 ; CHECK-NEXT: [[I_INC]] = add nuw nsw i32 [[I]], 1
anatofuz
parents:
diff changeset
18 ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[I_INC]], 100
anatofuz
parents:
diff changeset
19 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[END:%.*]]
anatofuz
parents:
diff changeset
20 ; CHECK: end:
anatofuz
parents:
diff changeset
21 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
22 ;
anatofuz
parents:
diff changeset
23 entry:
anatofuz
parents:
diff changeset
24 br label %loop
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 loop:
anatofuz
parents:
diff changeset
27 %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ]
anatofuz
parents:
diff changeset
28 %sat = call i32 @llvm.uadd.sat.i32(i32 %i, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 store volatile i32 %sat, ptr %p
150
anatofuz
parents:
diff changeset
30 %i.inc = add nuw nsw i32 %i, 1
anatofuz
parents:
diff changeset
31 %cmp = icmp ne i32 %i.inc, 100
anatofuz
parents:
diff changeset
32 br i1 %cmp, label %loop, label %end
anatofuz
parents:
diff changeset
33
anatofuz
parents:
diff changeset
34 end:
anatofuz
parents:
diff changeset
35 ret void
anatofuz
parents:
diff changeset
36 }
anatofuz
parents:
diff changeset
37
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
38 define void @sadd_sat(ptr %p) {
150
anatofuz
parents:
diff changeset
39 ; CHECK-LABEL: @sadd_sat(
anatofuz
parents:
diff changeset
40 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
41 ; CHECK-NEXT: br label [[LOOP:%.*]]
anatofuz
parents:
diff changeset
42 ; CHECK: loop:
anatofuz
parents:
diff changeset
43 ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LOOP]] ]
anatofuz
parents:
diff changeset
44 ; CHECK-NEXT: [[SAT1:%.*]] = add nuw nsw i32 [[I]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
45 ; CHECK-NEXT: store volatile i32 [[SAT1]], ptr [[P:%.*]]
150
anatofuz
parents:
diff changeset
46 ; CHECK-NEXT: [[I_INC]] = add nuw nsw i32 [[I]], 1
anatofuz
parents:
diff changeset
47 ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[I_INC]], 100
anatofuz
parents:
diff changeset
48 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[END:%.*]]
anatofuz
parents:
diff changeset
49 ; CHECK: end:
anatofuz
parents:
diff changeset
50 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
51 ;
anatofuz
parents:
diff changeset
52 entry:
anatofuz
parents:
diff changeset
53 br label %loop
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 loop:
anatofuz
parents:
diff changeset
56 %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ]
anatofuz
parents:
diff changeset
57 %sat = call i32 @llvm.sadd.sat.i32(i32 %i, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
58 store volatile i32 %sat, ptr %p
150
anatofuz
parents:
diff changeset
59 %i.inc = add nuw nsw i32 %i, 1
anatofuz
parents:
diff changeset
60 %cmp = icmp ne i32 %i.inc, 100
anatofuz
parents:
diff changeset
61 br i1 %cmp, label %loop, label %end
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 end:
anatofuz
parents:
diff changeset
64 ret void
anatofuz
parents:
diff changeset
65 }
anatofuz
parents:
diff changeset
66
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
67 define void @usub_sat(ptr %p) {
150
anatofuz
parents:
diff changeset
68 ; CHECK-LABEL: @usub_sat(
anatofuz
parents:
diff changeset
69 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
70 ; CHECK-NEXT: br label [[LOOP:%.*]]
anatofuz
parents:
diff changeset
71 ; CHECK: loop:
anatofuz
parents:
diff changeset
72 ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 1, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LOOP]] ]
anatofuz
parents:
diff changeset
73 ; CHECK-NEXT: [[SAT1:%.*]] = sub nuw nsw i32 [[I]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 ; CHECK-NEXT: store volatile i32 [[SAT1]], ptr [[P:%.*]]
150
anatofuz
parents:
diff changeset
75 ; CHECK-NEXT: [[I_INC]] = add nuw nsw i32 [[I]], 1
anatofuz
parents:
diff changeset
76 ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[I_INC]], 100
anatofuz
parents:
diff changeset
77 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[END:%.*]]
anatofuz
parents:
diff changeset
78 ; CHECK: end:
anatofuz
parents:
diff changeset
79 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
80 ;
anatofuz
parents:
diff changeset
81 entry:
anatofuz
parents:
diff changeset
82 br label %loop
anatofuz
parents:
diff changeset
83
anatofuz
parents:
diff changeset
84 loop:
anatofuz
parents:
diff changeset
85 %i = phi i32 [ 1, %entry ], [ %i.inc, %loop ]
anatofuz
parents:
diff changeset
86 %sat = call i32 @llvm.usub.sat.i32(i32 %i, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
87 store volatile i32 %sat, ptr %p
150
anatofuz
parents:
diff changeset
88 %i.inc = add nuw nsw i32 %i, 1
anatofuz
parents:
diff changeset
89 %cmp = icmp ne i32 %i.inc, 100
anatofuz
parents:
diff changeset
90 br i1 %cmp, label %loop, label %end
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 end:
anatofuz
parents:
diff changeset
93 ret void
anatofuz
parents:
diff changeset
94 }
anatofuz
parents:
diff changeset
95
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
96 define void @ssub_sat(ptr %p) {
150
anatofuz
parents:
diff changeset
97 ; CHECK-LABEL: @ssub_sat(
anatofuz
parents:
diff changeset
98 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
99 ; CHECK-NEXT: br label [[LOOP:%.*]]
anatofuz
parents:
diff changeset
100 ; CHECK: loop:
anatofuz
parents:
diff changeset
101 ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LOOP]] ]
anatofuz
parents:
diff changeset
102 ; CHECK-NEXT: [[SAT1:%.*]] = sub nsw i32 [[I]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
103 ; CHECK-NEXT: store volatile i32 [[SAT1]], ptr [[P:%.*]]
150
anatofuz
parents:
diff changeset
104 ; CHECK-NEXT: [[I_INC]] = add nuw nsw i32 [[I]], 1
anatofuz
parents:
diff changeset
105 ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[I_INC]], 100
anatofuz
parents:
diff changeset
106 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[END:%.*]]
anatofuz
parents:
diff changeset
107 ; CHECK: end:
anatofuz
parents:
diff changeset
108 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
109 ;
anatofuz
parents:
diff changeset
110 entry:
anatofuz
parents:
diff changeset
111 br label %loop
anatofuz
parents:
diff changeset
112
anatofuz
parents:
diff changeset
113 loop:
anatofuz
parents:
diff changeset
114 %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ]
anatofuz
parents:
diff changeset
115 %sat = call i32 @llvm.ssub.sat.i32(i32 %i, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
116 store volatile i32 %sat, ptr %p
150
anatofuz
parents:
diff changeset
117 %i.inc = add nuw nsw i32 %i, 1
anatofuz
parents:
diff changeset
118 %cmp = icmp ne i32 %i.inc, 100
anatofuz
parents:
diff changeset
119 br i1 %cmp, label %loop, label %end
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 end:
anatofuz
parents:
diff changeset
122 ret void
anatofuz
parents:
diff changeset
123 }