@@ -10,12 +10,12 @@ define i32 @gep_nusw_nuw(ptr %ptr, i32 %idx) {
1010 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
1111 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
1212 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
13- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
14- ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)
13+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
14+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)
1515 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
1616 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)
17- ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
18- ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL1]](s64)
17+ ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = nuw nsw G_MUL [[SEXT]], [[C]]
18+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[MUL1]](s64)
1919 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
2020 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)
2121 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)
@@ -40,12 +40,12 @@ define i32 @gep_nuw(ptr %ptr, i32 %idx) {
4040 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
4141 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
4242 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
43- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
44- ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)
43+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
44+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)
4545 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
4646 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)
47- ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
48- ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL1]](s64)
47+ ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = nuw G_MUL [[SEXT]], [[C]]
48+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[MUL1]](s64)
4949 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
5050 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)
5151 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)
@@ -70,14 +70,14 @@ define i32 @gep_nusw(ptr %ptr, i32 %idx) {
7070 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
7171 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
7272 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
73- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
74- ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)
73+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
74+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)
7575 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
7676 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)
77- ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
78- ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL1]](s64)
77+ ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
78+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[COPY]], [[MUL1]](s64)
7979 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
80- ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)
80+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)
8181 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)
8282 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]
8383 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)
@@ -100,8 +100,8 @@ define i32 @gep_none(ptr %ptr, i32 %idx) {
100100 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
101101 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
102102 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
103- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
104- ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)
103+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
104+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)
105105 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
106106 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)
107107 ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]
@@ -120,3 +120,166 @@ define i32 @gep_none(ptr %ptr, i32 %idx) {
120120 %res = add i32 %v1 , %v2
121121 ret i32 %res
122122 }
123+
124+ define i32 @gep_nusw_negative (ptr %ptr , i32 %idx ) {
125+ ; CHECK-LABEL: name: gep_nusw_negative
126+ ; CHECK: bb.1 (%ir-block.0):
127+ ; CHECK-NEXT: liveins: $w1, $x0
128+ ; CHECK-NEXT: {{ $}}
129+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
130+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
131+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
132+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
133+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
134+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)
135+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
136+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)
137+ ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]
138+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[COPY]], [[MUL1]](s64)
139+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
140+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)
141+ ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)
142+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]
143+ ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)
144+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
145+ %sidx = sext i32 %idx to i64
146+ %gep1 = getelementptr inbounds [4 x i32 ], ptr %ptr , i64 %sidx , i64 0
147+ %v1 = load i32 , ptr %gep1
148+ %gep2 = getelementptr nusw [4 x i32 ], ptr %ptr , i64 %sidx , i64 -1
149+ %v2 = load i32 , ptr %gep2
150+ %res = add i32 %v1 , %v2
151+ ret i32 %res
152+ }
153+
154+ define ptr @gep_many_indices (ptr %ptr , i32 %idx ) {
155+ ; CHECK-LABEL: name: gep_many_indices
156+ ; CHECK: bb.1 (%ir-block.0):
157+ ; CHECK-NEXT: liveins: $w1, $x0
158+ ; CHECK-NEXT: {{ $}}
159+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
160+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
161+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
162+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
163+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
164+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
165+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C1]]
166+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
167+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
168+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
169+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
170+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
171+ %sidx = sext i32 %idx to i64
172+ %gep = getelementptr {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
173+ ret ptr %gep
174+ }
175+
176+ define ptr @gep_nuw_many_indices (ptr %ptr , i32 %idx ) {
177+ ; CHECK-LABEL: name: gep_nuw_many_indices
178+ ; CHECK: bb.1 (%ir-block.0):
179+ ; CHECK-NEXT: liveins: $w1, $x0
180+ ; CHECK-NEXT: {{ $}}
181+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
182+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
183+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
184+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
185+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[C]](s64)
186+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
187+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nuw G_MUL [[SEXT]], [[C1]]
188+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
189+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
190+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
191+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
192+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
193+ %sidx = sext i32 %idx to i64
194+ %gep = getelementptr nuw {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
195+ ret ptr %gep
196+ }
197+
198+ define ptr @gep_nusw_many_indices (ptr %ptr , i32 %idx ) {
199+ ; CHECK-LABEL: name: gep_nusw_many_indices
200+ ; CHECK: bb.1 (%ir-block.0):
201+ ; CHECK-NEXT: liveins: $w1, $x0
202+ ; CHECK-NEXT: {{ $}}
203+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
204+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
205+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
206+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
207+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[C]](s64)
208+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
209+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C1]]
210+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
211+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
212+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nusw G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
213+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
214+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
215+ %sidx = sext i32 %idx to i64
216+ %gep = getelementptr nusw {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
217+ ret ptr %gep
218+ }
219+
220+ define ptr @gep_inbounds_many_indices (ptr %ptr , i32 %idx ) {
221+ ; CHECK-LABEL: name: gep_inbounds_many_indices
222+ ; CHECK: bb.1 (%ir-block.0):
223+ ; CHECK-NEXT: liveins: $w1, $x0
224+ ; CHECK-NEXT: {{ $}}
225+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
226+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
227+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
228+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
229+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C]](s64)
230+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
231+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C1]]
232+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
233+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
234+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
235+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
236+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
237+ %sidx = sext i32 %idx to i64
238+ %gep = getelementptr inbounds {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
239+ ret ptr %gep
240+ }
241+
242+ define ptr @gep_nuw_nusw_many_indices (ptr %ptr , i32 %idx ) {
243+ ; CHECK-LABEL: name: gep_nuw_nusw_many_indices
244+ ; CHECK: bb.1 (%ir-block.0):
245+ ; CHECK-NEXT: liveins: $w1, $x0
246+ ; CHECK-NEXT: {{ $}}
247+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
248+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
249+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
250+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
251+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[C]](s64)
252+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
253+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nuw nsw G_MUL [[SEXT]], [[C1]]
254+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
255+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
256+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
257+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
258+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
259+ %sidx = sext i32 %idx to i64
260+ %gep = getelementptr nuw nusw {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
261+ ret ptr %gep
262+ }
263+
264+ define ptr @gep_nuw_inbounds_many_indices (ptr %ptr , i32 %idx ) {
265+ ; CHECK-LABEL: name: gep_nuw_inbounds_many_indices
266+ ; CHECK: bb.1 (%ir-block.0):
267+ ; CHECK-NEXT: liveins: $w1, $x0
268+ ; CHECK-NEXT: {{ $}}
269+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
270+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
271+ ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)
272+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108
273+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C]](s64)
274+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
275+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = nuw nsw G_MUL [[SEXT]], [[C1]]
276+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)
277+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -4
278+ ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD1]], [[C2]](s64)
279+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD2]](p0)
280+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
281+ %sidx = sext i32 %idx to i64
282+ %gep = getelementptr nuw inbounds {i32 , [4 x [3 x i32 ]]}, ptr %ptr , i64 2 , i32 1 , i64 %sidx , i64 -1
283+ ret ptr %gep
284+ }
285+
0 commit comments