@@ -8,6 +8,8 @@ llvm.func @fold_icmp_eq(%arg0 : i32) -> i1 {
8
8
llvm.return %0 : i1
9
9
}
10
10
11
+ // -----
12
+
11
13
// CHECK-LABEL: @fold_icmp_ne
12
14
llvm.func @fold_icmp_ne (%arg0 : vector <2 xi32 >) -> vector <2 xi1 > {
13
15
// CHECK: %[[C0:.*]] = llvm.mlir.constant(dense<false> : vector<2xi1>) : vector<2xi1>
@@ -16,6 +18,8 @@ llvm.func @fold_icmp_ne(%arg0 : vector<2xi32>) -> vector<2xi1> {
16
18
llvm.return %0 : vector <2 xi1 >
17
19
}
18
20
21
+ // -----
22
+
19
23
// CHECK-LABEL: @fold_icmp_alloca
20
24
llvm.func @fold_icmp_alloca () -> i1 {
21
25
// CHECK: %[[C0:.*]] = llvm.mlir.constant(true) : i1
@@ -83,16 +87,18 @@ llvm.func @fold_unrelated_extractvalue(%arr: !llvm.array<4 x f32>) -> f32 {
83
87
// -----
84
88
85
89
// CHECK-LABEL: fold_bitcast
86
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
87
- // CHECK-NEXT: llvm.return %[[a0 ]]
90
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
91
+ // CHECK-NEXT: llvm.return %[[ARG ]]
88
92
llvm.func @fold_bitcast (%x : !llvm.ptr ) -> !llvm.ptr {
89
93
%c = llvm.bitcast %x : !llvm.ptr to !llvm.ptr
90
94
llvm.return %c : !llvm.ptr
91
95
}
92
96
97
+ // -----
98
+
93
99
// CHECK-LABEL: fold_bitcast2
94
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
95
- // CHECK-NEXT: llvm.return %[[a0 ]]
100
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
101
+ // CHECK-NEXT: llvm.return %[[ARG ]]
96
102
llvm.func @fold_bitcast2 (%x : i32 ) -> i32 {
97
103
%c = llvm.bitcast %x : i32 to f32
98
104
%d = llvm.bitcast %c : f32 to i32
@@ -101,17 +107,31 @@ llvm.func @fold_bitcast2(%x : i32) -> i32 {
101
107
102
108
// -----
103
109
110
+ // CHECK-LABEL: fold_bitcast_chain
111
+ // CHECK-SAME: %[[ARG:[[:alnum:]]+]]
112
+ llvm.func @fold_bitcast_chain (%x : i32 ) -> vector <2 xi16 > {
113
+ %c = llvm.bitcast %x : i32 to f32
114
+ %d = llvm.bitcast %c : f32 to vector <2 xi16 >
115
+ // CHECK: %[[BITCAST:.*]] = llvm.bitcast %[[ARG]] : i32 to vector<2xi16>
116
+ // CHECK: llvm.return %[[BITCAST]]
117
+ llvm.return %d : vector <2 xi16 >
118
+ }
119
+
120
+ // -----
121
+
104
122
// CHECK-LABEL: fold_addrcast
105
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
106
- // CHECK-NEXT: llvm.return %[[a0 ]]
123
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
124
+ // CHECK-NEXT: llvm.return %[[ARG ]]
107
125
llvm.func @fold_addrcast (%x : !llvm.ptr ) -> !llvm.ptr {
108
126
%c = llvm.addrspacecast %x : !llvm.ptr to !llvm.ptr
109
127
llvm.return %c : !llvm.ptr
110
128
}
111
129
130
+ // -----
131
+
112
132
// CHECK-LABEL: fold_addrcast2
113
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
114
- // CHECK-NEXT: llvm.return %[[a0 ]]
133
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
134
+ // CHECK-NEXT: llvm.return %[[ARG ]]
115
135
llvm.func @fold_addrcast2 (%x : !llvm.ptr ) -> !llvm.ptr {
116
136
%c = llvm.addrspacecast %x : !llvm.ptr to !llvm.ptr <5 >
117
137
%d = llvm.addrspacecast %c : !llvm.ptr <5 > to !llvm.ptr
@@ -120,28 +140,44 @@ llvm.func @fold_addrcast2(%x : !llvm.ptr) -> !llvm.ptr {
120
140
121
141
// -----
122
142
143
+ // CHECK-LABEL: fold_addrcast_chain
144
+ // CHECK-SAME: %[[ARG:[[:alnum:]]+]]
145
+ llvm.func @fold_addrcast_chain (%x : !llvm.ptr ) -> !llvm.ptr <2 > {
146
+ %c = llvm.addrspacecast %x : !llvm.ptr to !llvm.ptr <1 >
147
+ %d = llvm.addrspacecast %c : !llvm.ptr <1 > to !llvm.ptr <2 >
148
+ // CHECK: %[[ADDRCAST:.*]] = llvm.addrspacecast %[[ARG]] : !llvm.ptr to !llvm.ptr<2>
149
+ // CHECK: llvm.return %[[ADDRCAST]]
150
+ llvm.return %d : !llvm.ptr <2 >
151
+ }
152
+
153
+ // -----
154
+
123
155
// CHECK-LABEL: fold_gep
124
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
125
- // CHECK-NEXT: llvm.return %[[a0 ]]
156
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
157
+ // CHECK-NEXT: llvm.return %[[ARG ]]
126
158
llvm.func @fold_gep (%x : !llvm.ptr ) -> !llvm.ptr {
127
159
%c0 = arith.constant 0 : i32
128
160
%c = llvm.getelementptr %x [%c0 ] : (!llvm.ptr , i32 ) -> !llvm.ptr , i8
129
161
llvm.return %c : !llvm.ptr
130
162
}
131
163
164
+ // -----
165
+
132
166
// CHECK-LABEL: fold_gep_neg
133
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
134
- // CHECK-NEXT: %[[RES:.*]] = llvm.getelementptr inbounds %[[a0 ]][0, 1]
167
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
168
+ // CHECK-NEXT: %[[RES:.*]] = llvm.getelementptr inbounds %[[ARG ]][0, 1]
135
169
// CHECK-NEXT: llvm.return %[[RES]]
136
170
llvm.func @fold_gep_neg (%x : !llvm.ptr ) -> !llvm.ptr {
137
171
%c0 = arith.constant 0 : i32
138
172
%0 = llvm.getelementptr inbounds %x [%c0 , 1 ] : (!llvm.ptr , i32 ) -> !llvm.ptr , !llvm.struct <(i32 , i32 )>
139
173
llvm.return %0 : !llvm.ptr
140
174
}
141
175
176
+ // -----
177
+
142
178
// CHECK-LABEL: fold_gep_canon
143
- // CHECK-SAME: %[[a0:arg[0-9 ]+]]
144
- // CHECK-NEXT: %[[RES:.*]] = llvm.getelementptr %[[a0 ]][2]
179
+ // CHECK-SAME: %[[ARG:[[:alnum:] ]+]]
180
+ // CHECK-NEXT: %[[RES:.*]] = llvm.getelementptr %[[ARG ]][2]
145
181
// CHECK-NEXT: llvm.return %[[RES]]
146
182
llvm.func @fold_gep_canon (%x : !llvm.ptr ) -> !llvm.ptr {
147
183
%c2 = arith.constant 2 : i32
@@ -175,6 +211,8 @@ llvm.func @load_dce(%x : !llvm.ptr) {
175
211
llvm.return
176
212
}
177
213
214
+ // -----
215
+
178
216
llvm.mlir.global external @fp () : !llvm.ptr
179
217
180
218
// CHECK-LABEL: addr_dce
@@ -184,6 +222,8 @@ llvm.func @addr_dce(%x : !llvm.ptr) {
184
222
llvm.return
185
223
}
186
224
225
+ // -----
226
+
187
227
// CHECK-LABEL: alloca_dce
188
228
// CHECK-NEXT: llvm.return
189
229
llvm.func @alloca_dce () {
0 commit comments