286 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -mtriple=aarch64-linux-gnu -global-isel -stop-after=irtranslator %s -o - | FileCheck %s3 4define i32 @gep_nusw_nuw(ptr %ptr, i32 %idx) {5 ; CHECK-LABEL: name: gep_nusw_nuw6 ; CHECK: bb.1 (%ir-block.0):7 ; CHECK-NEXT: liveins: $w1, $x08 ; CHECK-NEXT: {{ $}}9 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x010 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w111 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)12 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1613 ; 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)15 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)16 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)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)19 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 420 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)21 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)22 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]23 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)24 ; CHECK-NEXT: RET_ReallyLR implicit $w025 %sidx = sext i32 %idx to i6426 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 027 %v1 = load i32, ptr %gep128 %gep2 = getelementptr nusw nuw [4 x i32], ptr %ptr, i64 %sidx, i64 129 %v2 = load i32, ptr %gep230 %res = add i32 %v1, %v231 ret i32 %res32 }33 34define i32 @gep_nuw(ptr %ptr, i32 %idx) {35 ; CHECK-LABEL: name: gep_nuw36 ; CHECK: bb.1 (%ir-block.0):37 ; CHECK-NEXT: liveins: $w1, $x038 ; CHECK-NEXT: {{ $}}39 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x040 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w141 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)42 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1643 ; 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)45 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)46 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)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)49 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 450 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)51 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)52 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]53 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)54 ; CHECK-NEXT: RET_ReallyLR implicit $w055 %sidx = sext i32 %idx to i6456 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 057 %v1 = load i32, ptr %gep158 %gep2 = getelementptr nuw [4 x i32], ptr %ptr, i64 %sidx, i64 159 %v2 = load i32, ptr %gep260 %res = add i32 %v1, %v261 ret i32 %res62 }63 64define i32 @gep_nusw(ptr %ptr, i32 %idx) {65 ; CHECK-LABEL: name: gep_nusw66 ; CHECK: bb.1 (%ir-block.0):67 ; CHECK-NEXT: liveins: $w1, $x068 ; CHECK-NEXT: {{ $}}69 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x070 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w171 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)72 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1673 ; 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)75 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)76 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)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)79 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 480 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)81 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)82 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]83 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)84 ; CHECK-NEXT: RET_ReallyLR implicit $w085 %sidx = sext i32 %idx to i6486 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 087 %v1 = load i32, ptr %gep188 %gep2 = getelementptr nusw [4 x i32], ptr %ptr, i64 %sidx, i64 189 %v2 = load i32, ptr %gep290 %res = add i32 %v1, %v291 ret i32 %res92 }93 94define i32 @gep_none(ptr %ptr, i32 %idx) {95 ; CHECK-LABEL: name: gep_none96 ; CHECK: bb.1 (%ir-block.0):97 ; CHECK-NEXT: liveins: $w1, $x098 ; CHECK-NEXT: {{ $}}99 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0100 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1101 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)102 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16103 ; 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)105 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)106 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)107 ; CHECK-NEXT: [[MUL1:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]108 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL1]](s64)109 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4110 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)111 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)112 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]113 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32)114 ; CHECK-NEXT: RET_ReallyLR implicit $w0115 %sidx = sext i32 %idx to i64116 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 0117 %v1 = load i32, ptr %gep1118 %gep2 = getelementptr [4 x i32], ptr %ptr, i64 %sidx, i64 1119 %v2 = load i32, ptr %gep2120 %res = add i32 %v1, %v2121 ret i32 %res122 }123 124define i32 @gep_nusw_negative(ptr %ptr, i32 %idx) {125 ; CHECK-LABEL: name: gep_nusw_negative126 ; CHECK: bb.1 (%ir-block.0):127 ; CHECK-NEXT: liveins: $w1, $x0128 ; CHECK-NEXT: {{ $}}129 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0130 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1131 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)132 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16133 ; 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 -4140 ; 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 $w0145 %sidx = sext i32 %idx to i64146 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 0147 %v1 = load i32, ptr %gep1148 %gep2 = getelementptr nusw [4 x i32], ptr %ptr, i64 %sidx, i64 -1149 %v2 = load i32, ptr %gep2150 %res = add i32 %v1, %v2151 ret i32 %res152 }153 154define ptr @gep_many_indices(ptr %ptr, i32 %idx) {155 ; CHECK-LABEL: name: gep_many_indices156 ; CHECK: bb.1 (%ir-block.0):157 ; CHECK-NEXT: liveins: $w1, $x0158 ; CHECK-NEXT: {{ $}}159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0160 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1161 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)162 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108163 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)164 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12165 ; 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 -4168 ; 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 $x0171 %sidx = sext i32 %idx to i64172 %gep = getelementptr {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1173 ret ptr %gep174 }175 176define ptr @gep_nuw_many_indices(ptr %ptr, i32 %idx) {177 ; CHECK-LABEL: name: gep_nuw_many_indices178 ; CHECK: bb.1 (%ir-block.0):179 ; CHECK-NEXT: liveins: $w1, $x0180 ; CHECK-NEXT: {{ $}}181 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0182 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1183 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)184 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108185 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[C]](s64)186 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 12187 ; 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 -4190 ; 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 $x0193 %sidx = sext i32 %idx to i64194 %gep = getelementptr nuw {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1195 ret ptr %gep196 }197 198define ptr @gep_nusw_many_indices(ptr %ptr, i32 %idx) {199 ; CHECK-LABEL: name: gep_nusw_many_indices200 ; CHECK: bb.1 (%ir-block.0):201 ; CHECK-NEXT: liveins: $w1, $x0202 ; CHECK-NEXT: {{ $}}203 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0204 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1205 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)206 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108207 ; 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 12209 ; 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 -4212 ; 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 $x0215 %sidx = sext i32 %idx to i64216 %gep = getelementptr nusw {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1217 ret ptr %gep218 }219 220define ptr @gep_inbounds_many_indices(ptr %ptr, i32 %idx) {221 ; CHECK-LABEL: name: gep_inbounds_many_indices222 ; CHECK: bb.1 (%ir-block.0):223 ; CHECK-NEXT: liveins: $w1, $x0224 ; CHECK-NEXT: {{ $}}225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0226 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1227 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)228 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108229 ; 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 12231 ; 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 -4234 ; 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 $x0237 %sidx = sext i32 %idx to i64238 %gep = getelementptr inbounds {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1239 ret ptr %gep240 }241 242define ptr @gep_nuw_nusw_many_indices(ptr %ptr, i32 %idx) {243 ; CHECK-LABEL: name: gep_nuw_nusw_many_indices244 ; CHECK: bb.1 (%ir-block.0):245 ; CHECK-NEXT: liveins: $w1, $x0246 ; CHECK-NEXT: {{ $}}247 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0248 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1249 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)250 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108251 ; 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 12253 ; 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 -4256 ; 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 $x0259 %sidx = sext i32 %idx to i64260 %gep = getelementptr nuw nusw {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1261 ret ptr %gep262 }263 264define ptr @gep_nuw_inbounds_many_indices(ptr %ptr, i32 %idx) {265 ; CHECK-LABEL: name: gep_nuw_inbounds_many_indices266 ; CHECK: bb.1 (%ir-block.0):267 ; CHECK-NEXT: liveins: $w1, $x0268 ; CHECK-NEXT: {{ $}}269 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0270 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1271 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)272 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 108273 ; 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 12275 ; 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 -4278 ; 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 $x0281 %sidx = sext i32 %idx to i64282 %gep = getelementptr nuw inbounds {i32, [4 x [3 x i32]]}, ptr %ptr, i64 2, i32 1, i64 %sidx, i64 -1283 ret ptr %gep284 }285 286