1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
2
2
; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -S -passes=separate-const-offset-from-gep < %s | FileCheck %s
3
3
4
- define void @inboundsPossiblyNegative (ptr %in.ptr , i64 %in.idx1 ) {
4
+ define void @inboundsPossiblyNegative (ptr %in.ptr , i32 %in.idx1 ) {
5
5
; CHECK-LABEL: define void @inboundsPossiblyNegative(
6
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
6
+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
7
7
; CHECK-NEXT: entry:
8
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]
9
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 1
8
+ ; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1]] to i64
9
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
10
+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
10
11
; CHECK-NEXT: ret void
11
12
;
12
13
entry:
13
- %const1 = getelementptr inbounds <2 x i8 >, ptr %in.ptr , i64 1
14
- %idx1 = getelementptr inbounds <2 x i8 >, ptr %const1 , i64 %in.idx1
14
+ %const1 = getelementptr inbounds <2 x i8 >, ptr %in.ptr , i32 1
15
+ %idx1 = getelementptr inbounds <2 x i8 >, ptr %const1 , i32 %in.idx1
15
16
ret void
16
17
}
17
18
18
- define void @inboundsNonNegative_nonCanonical (ptr %in.ptr , i32 %in.idx1 ) {
19
- ; CHECK-LABEL: define void @inboundsNonNegative_nonCanonical (
19
+ define void @inboundsNonNegative (ptr %in.ptr , i32 %in.idx1 ) {
20
+ ; CHECK-LABEL: define void @inboundsNonNegative (
20
21
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
21
22
; CHECK-NEXT: entry:
22
- ; CHECK-NEXT: [[IN_IDX1_NNEG1 :%.*]] = and i32 [[IN_IDX1]], 2147483647
23
- ; CHECK-NEXT: [[IN_IDX1_NNEG :%.*]] = sext i32 [[IN_IDX1_NNEG1 ]] to i64
24
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG ]]
23
+ ; CHECK-NEXT: [[IN_IDX1_NNEG :%.*]] = and i32 [[IN_IDX1]], 2147483647
24
+ ; CHECK-NEXT: [[IDXPROM :%.*]] = sext i32 [[IN_IDX1_NNEG ]] to i64
25
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM ]]
25
26
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i32 1
26
27
; CHECK-NEXT: ret void
27
28
;
@@ -32,277 +33,19 @@ entry:
32
33
ret void
33
34
}
34
35
35
- define void @inboundsNonNegative (ptr %in.ptr , i64 %in.idx1 ) {
36
- ; CHECK-LABEL: define void @inboundsNonNegative(
37
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
38
- ; CHECK-NEXT: entry:
39
- ; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
40
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
41
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i64 1
42
- ; CHECK-NEXT: ret void
43
- ;
44
- entry:
45
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
46
- %const1 = getelementptr inbounds <2 x i8 >, ptr %in.ptr , i64 1
47
- %idx1 = getelementptr inbounds <2 x i8 >, ptr %const1 , i64 %in.idx1.nneg
48
- ret void
49
- }
50
-
51
- define void @inboundsNonchained (ptr %in.ptr , i64 %in.idx1 ) {
36
+ define void @inboundsNonchained (ptr %in.ptr , i32 %in.idx1 ) {
52
37
; CHECK-LABEL: define void @inboundsNonchained(
53
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
38
+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
54
39
; CHECK-NEXT: entry:
55
- ; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
40
+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i32 [[IN_IDX1]], 2147483647
41
+ ; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1_NNEG]] to i64
56
42
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
57
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 1
58
- ; CHECK-NEXT: ret void
59
- ;
60
- entry:
61
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
62
- %const1 = getelementptr inbounds <2 x i8 >, ptr %in.ptr , i64 1
63
- %idx1 = getelementptr <2 x i8 >, ptr %const1 , i64 %in.idx1.nneg
64
- ret void
65
- }
66
-
67
- define void @inboundsNonNegativeType_i16i8 (ptr %in.ptr , i64 %in.idx1 ) {
68
- ; CHECK-LABEL: define void @inboundsNonNegativeType_i16i8(
69
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
70
- ; CHECK-NEXT: entry:
71
- ; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
72
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[IN_PTR]], i64 [[IDXPROM]]
73
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i64 1024
74
- ; CHECK-NEXT: ret void
75
- ;
76
- entry:
77
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
78
- %const1 = getelementptr inbounds i16 , ptr %in.ptr , i64 1024
79
- %idx1 = getelementptr inbounds i8 , ptr %const1 , i64 %in.idx1.nneg
80
- ret void
81
- }
82
-
83
- define void @inboundsNonNegative_i8i16 (ptr %in.ptr , i64 %in.idx1 ) {
84
- ; CHECK-LABEL: define void @inboundsNonNegative_i8i16(
85
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
86
- ; CHECK-NEXT: entry:
87
- ; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
88
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IDXPROM]]
89
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 1024
90
- ; CHECK-NEXT: ret void
91
- ;
92
- entry:
93
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
94
- %const1 = getelementptr inbounds i8 , ptr %in.ptr , i64 1024
95
- %idx1 = getelementptr inbounds i16 , ptr %const1 , i64 %in.idx1.nneg
96
- ret void
97
- }
98
-
99
- define void @inboundsNonchained_first (ptr %in.ptr , i64 %in.idx1 ) {
100
- ; CHECK-LABEL: define void @inboundsNonchained_first(
101
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
102
- ; CHECK-NEXT: entry:
103
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
104
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
105
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
106
- ; CHECK-NEXT: ret void
107
- ;
108
- entry:
109
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
110
- %const1 = getelementptr inbounds i8 , ptr %in.ptr , i64 1024
111
- %idx1 = getelementptr i32 , ptr %const1 , i64 %in.idx1.nneg
112
- ret void
113
- }
114
-
115
- define void @inboundsNonchained_second (ptr %in.ptr , i64 %in.idx1 ) {
116
- ; CHECK-LABEL: define void @inboundsNonchained_second(
117
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
118
- ; CHECK-NEXT: entry:
119
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
120
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
121
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
122
- ; CHECK-NEXT: ret void
123
- ;
124
- entry:
125
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
126
- %const1 = getelementptr i8 , ptr %in.ptr , i64 1024
127
- %idx1 = getelementptr inbounds i64 , ptr %const1 , i64 %in.idx1.nneg
128
- ret void
129
- }
130
-
131
- define void @notInbounds (ptr %in.ptr , i64 %in.idx1 ) {
132
- ; CHECK-LABEL: define void @notInbounds(
133
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
134
- ; CHECK-NEXT: entry:
135
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
136
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
137
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
138
- ; CHECK-NEXT: ret void
139
- ;
140
- entry:
141
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
142
- %const1 = getelementptr i8 , ptr %in.ptr , i64 1024
143
- %idx1 = getelementptr i128 , ptr %const1 , i64 %in.idx1.nneg
144
- ret void
145
- }
146
-
147
- define void @vectorType1 (ptr %in.ptr , i64 %in.idx1 ) {
148
- ; CHECK-LABEL: define void @vectorType1(
149
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
150
- ; CHECK-NEXT: entry:
151
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
152
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
153
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 3
154
- ; CHECK-NEXT: ret void
155
- ;
156
- entry:
157
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
158
- %const1 = getelementptr inbounds <4 x i8 >, ptr %in.ptr , i32 3
159
- %idx1 = getelementptr inbounds <2 x i8 >, ptr %const1 , i64 %in.idx1.nneg
160
- ret void
161
- }
162
-
163
- define void @vectorType2 (ptr %in.ptr , i64 %in.idx1 ) {
164
- ; CHECK-LABEL: define void @vectorType2(
165
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
166
- ; CHECK-NEXT: entry:
167
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
168
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <4 x half>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
169
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 1
170
- ; CHECK-NEXT: ret void
171
- ;
172
- entry:
173
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
174
- %const1 = getelementptr inbounds <4 x i8 >, ptr %in.ptr , i32 1
175
- %idx1 = getelementptr inbounds <4 x half >, ptr %const1 , i64 %in.idx1.nneg
176
- ret void
177
- }
178
-
179
- define void @vectorType3 (ptr %in.ptr , i64 %in.idx1 ) {
180
- ; CHECK-LABEL: define void @vectorType3(
181
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
182
- ; CHECK-NEXT: entry:
183
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
184
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
185
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1
186
- ; CHECK-NEXT: ret void
187
- ;
188
- entry:
189
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
190
- %const1 = getelementptr inbounds <4 x ptr >, ptr %in.ptr , i32 1
191
- %idx1 = getelementptr inbounds ptr , ptr %const1 , i64 %in.idx1.nneg
192
- ret void
193
- }
194
-
195
- define void @vectorType4 (ptr %in.ptr , i64 %in.idx1 ) {
196
- ; CHECK-LABEL: define void @vectorType4(
197
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
198
- ; CHECK-NEXT: entry:
199
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
200
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <8 x ptr addrspace(1)>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
201
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 3
202
- ; CHECK-NEXT: ret void
203
- ;
204
- entry:
205
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
206
- %const1 = getelementptr inbounds <4 x ptr >, ptr %in.ptr , i32 3
207
- %idx1 = getelementptr inbounds <8 x ptr addrspace (1 )>, ptr %const1 , i64 %in.idx1.nneg
208
- ret void
209
- }
210
-
211
-
212
- define void @ptrType (ptr %in.ptr , i64 %in.idx1 ) {
213
- ; CHECK-LABEL: define void @ptrType(
214
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
215
- ; CHECK-NEXT: entry:
216
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
217
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
218
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(2), ptr [[TMP0]], i32 1
219
- ; CHECK-NEXT: ret void
220
- ;
221
- entry:
222
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
223
- %const1 = getelementptr inbounds ptr addrspace (2 ), ptr %in.ptr , i32 1
224
- %idx1 = getelementptr inbounds ptr , ptr %const1 , i64 %in.idx1.nneg
225
- ret void
226
- }
227
-
228
- define void @ptrType2 (ptr %in.ptr , i64 %in.idx1 ) {
229
- ; CHECK-LABEL: define void @ptrType2(
230
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
231
- ; CHECK-NEXT: entry:
232
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
233
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
234
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(3), ptr [[TMP0]], i32 3
43
+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
235
44
; CHECK-NEXT: ret void
236
45
;
237
46
entry:
238
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
239
- %const1 = getelementptr inbounds ptr addrspace (3 ), ptr %in.ptr , i32 3
240
- %idx1 = getelementptr inbounds i64 , ptr %const1 , i64 %in.idx1.nneg
241
- ret void
242
- }
243
-
244
- define void @ptrType3 (ptr %in.ptr , i64 %in.idx1 ) {
245
- ; CHECK-LABEL: define void @ptrType3(
246
- ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
247
- ; CHECK-NEXT: entry:
248
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
249
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
250
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(7), ptr [[TMP0]], i32 3
251
- ; CHECK-NEXT: ret void
252
- ;
253
- entry:
254
- %in.idx1.nneg = and i64 %in.idx1 , 2147483647
255
- %const1 = getelementptr inbounds ptr addrspace (7 ), ptr %in.ptr , i32 3
256
- %idx1 = getelementptr inbounds i16 , ptr %const1 , i64 %in.idx1.nneg
257
- ret void
258
- }
259
-
260
- define void @addrspace1 (ptr addrspace (1 ) %in.ptr , i64 %in.idx1 ) {
261
- ; CHECK-LABEL: define void @addrspace1(
262
- ; CHECK-SAME: ptr addrspace(1) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
263
- ; CHECK-NEXT: entry:
264
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
265
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i128, ptr addrspace(1) [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
266
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP0]], i64 1024
267
- ; CHECK-NEXT: ret void
268
- ;
269
- entry:
270
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
271
- %const1 = getelementptr inbounds i8 , ptr addrspace (1 ) %in.ptr , i64 1024
272
- %idx1 = getelementptr inbounds i128 , ptr addrspace (1 ) %const1 , i64 %in.idx1.nneg
273
- ret void
274
- }
275
-
276
- define void @addrspace3 (ptr addrspace (3 ) %in.ptr , i64 %in.idx1 ) {
277
- ; CHECK-LABEL: define void @addrspace3(
278
- ; CHECK-SAME: ptr addrspace(3) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
279
- ; CHECK-NEXT: entry:
280
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
281
- ; CHECK-NEXT: [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32
282
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr addrspace(3) [[IN_PTR]], i32 [[IDXPROM]]
283
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr addrspace(3) [[TMP0]], i64 1024
284
- ; CHECK-NEXT: ret void
285
- ;
286
- entry:
287
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
288
- %const1 = getelementptr inbounds i8 , ptr addrspace (3 ) %in.ptr , i64 1024
289
- %idx1 = getelementptr inbounds i128 , ptr addrspace (3 ) %const1 , i64 %in.idx1.nneg
290
- ret void
291
- }
292
-
293
- define void @addrspace7 (ptr addrspace (7 ) %in.ptr , i64 %in.idx1 ) {
294
- ; CHECK-LABEL: define void @addrspace7(
295
- ; CHECK-SAME: ptr addrspace(7) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
296
- ; CHECK-NEXT: entry:
297
- ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
298
- ; CHECK-NEXT: [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32
299
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr addrspace(7) [[IN_PTR]], i32 [[IDXPROM]]
300
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr addrspace(7) [[TMP0]], i64 1024
301
- ; CHECK-NEXT: ret void
302
- ;
303
- entry:
304
- %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
305
- %const1 = getelementptr inbounds i8 , ptr addrspace (7 ) %in.ptr , i64 1024
306
- %idx1 = getelementptr inbounds i128 , ptr addrspace (7 ) %const1 , i64 %in.idx1.nneg
47
+ %in.idx1.nneg = and i32 %in.idx1 , 2147483647
48
+ %const1 = getelementptr inbounds <2 x i8 >, ptr %in.ptr , i32 1
49
+ %idx1 = getelementptr <2 x i8 >, ptr %const1 , i32 %in.idx1.nneg
307
50
ret void
308
51
}
0 commit comments