brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.3 KiB · b7cf9b3 Raw
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