565 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown --aarch64prelegalizercombiner-only-enable-rule="reassoc_ptradd" %s -o - | FileCheck %s3# REQUIRES: asserts4 5---6name: test1_noreassoc_legal_already_new_is_illegal7alignment: 48tracksRegLiveness: true9liveins:10 - { reg: '$x0' }11body: |12 bb.1:13 liveins: $x014 15 ; CHECK-LABEL: name: test1_noreassoc_legal_already_new_is_illegal16 ; CHECK: liveins: $x017 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x019 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 160020 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 621 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 022 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)23 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C1]](s64)24 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))25 ; CHECK-NEXT: G_STORE [[C2]](s32), [[PTR_ADD]](p0) :: (store (s32))26 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)27 ; CHECK-NEXT: RET_ReallyLR implicit $w028 %0:_(p0) = COPY $x029 %2:_(s64) = G_CONSTANT i64 160030 %4:_(s64) = G_CONSTANT i64 631 %9:_(s32) = G_CONSTANT i32 032 %10:_(p0) = G_PTR_ADD %0, %2(s64)33 %11:_(p0) = G_PTR_ADD %10, %4(s64)34 %7:_(s32) = G_LOAD %11(p0) :: (load 4)35 G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %1036 $w0 = COPY %7(s32)37 RET_ReallyLR implicit $w038 39...40---41name: test2_reassoc_already_legal_new_also_legal42alignment: 443liveins:44 - { reg: '$x0' }45body: |46 bb.1:47 liveins: $x048 49 ; CHECK-LABEL: name: test2_reassoc_already_legal_new_also_legal50 ; CHECK: liveins: $x051 ; CHECK-NEXT: {{ $}}52 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x053 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1054 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 055 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)56 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1657 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)58 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))59 ; CHECK-NEXT: G_STORE [[C1]](s32), [[PTR_ADD]](p0) :: (store (s32))60 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)61 ; CHECK-NEXT: RET_ReallyLR implicit $w062 %0:_(p0) = COPY $x063 %2:_(s64) = G_CONSTANT i64 1064 %4:_(s64) = G_CONSTANT i64 665 %9:_(s32) = G_CONSTANT i32 066 %10:_(p0) = G_PTR_ADD %0, %2(s64)67 %11:_(p0) = G_PTR_ADD %10, %4(s64)68 %7:_(s32) = G_LOAD %11(p0) :: (load 4)69 G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %1070 $w0 = COPY %7(s32)71 RET_ReallyLR implicit $w072 73...74---75name: test3_noreassoc_only_oneuse76alignment: 477liveins:78 - { reg: '$x0' }79body: |80 bb.1:81 liveins: $x082 83 ; CHECK-LABEL: name: test3_noreassoc_only_oneuse84 ; CHECK: liveins: $x085 ; CHECK-NEXT: {{ $}}86 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x087 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 478388 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)89 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32))90 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)91 ; CHECK-NEXT: RET_ReallyLR implicit $w092 %0:_(p0) = COPY $x093 %10:_(s64) = G_CONSTANT i64 478394 %9:_(p0) = G_PTR_ADD %0, %10(s64)95 %7:_(s32) = G_LOAD %9(p0) :: (load 4)96 $w0 = COPY %7(s32)97 RET_ReallyLR implicit $w098 99...100---101name: test4_reassoc_existing_is_already_illegal102alignment: 4103liveins:104 - { reg: '$x0' }105body: |106 bb.1:107 liveins: $x0108 109 ; CHECK-LABEL: name: test4_reassoc_existing_is_already_illegal110 ; CHECK: liveins: $x0111 ; CHECK-NEXT: {{ $}}112 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0113 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 17114 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0115 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)116 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4096117 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)118 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))119 ; CHECK-NEXT: G_STORE [[C1]](s32), [[PTR_ADD]](p0) :: (store (s32))120 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)121 ; CHECK-NEXT: RET_ReallyLR implicit $w0122 %0:_(p0) = COPY $x0123 %2:_(s64) = G_CONSTANT i64 17124 %4:_(s64) = G_CONSTANT i64 4079125 %9:_(s32) = G_CONSTANT i32 0126 %10:_(p0) = G_PTR_ADD %0, %2(s64)127 %11:_(p0) = G_PTR_ADD %10, %4(s64)128 %7:_(s32) = G_LOAD %11(p0) :: (load 4)129 G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10130 $w0 = COPY %7(s32)131 RET_ReallyLR implicit $w0132 133...134---135name: test5_add_on_rhs136alignment: 4137liveins:138 - { reg: '$x0' }139 - { reg: '$x1' }140body: |141 bb.1:142 liveins: $x0, $x1143 144 ; CHECK-LABEL: name: test5_add_on_rhs145 ; CHECK: liveins: $x0, $x1146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0148 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1149 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1150 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[COPY1]](s64)151 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)152 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))153 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)154 ; CHECK-NEXT: RET_ReallyLR implicit $w0155 %0:_(p0) = COPY $x0156 %1:_(s64) = COPY $x1157 %2:_(s64) = G_CONSTANT i64 1158 %3:_(s64) = G_ADD %1, %2159 %4:_(p0) = G_PTR_ADD %0, %3(s64)160 %7:_(s32) = G_LOAD %4(p0) :: (load 1)161 $w0 = COPY %7(s32)162 RET_ReallyLR implicit $w0163 164...165---166name: walk_through_inttoptr167alignment: 4168tracksRegLiveness: true169body: |170 bb.1:171 liveins: $x0172 ; CHECK-LABEL: name: walk_through_inttoptr173 ; CHECK: liveins: $x0174 ; CHECK-NEXT: {{ $}}175 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0176 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1600177 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0178 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)179 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1606180 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)181 ; CHECK-NEXT: %ptr_to_int:_(s64) = G_PTRTOINT [[PTR_ADD1]](p0)182 ; CHECK-NEXT: %int_to_ptr:_(p0) = G_INTTOPTR %ptr_to_int(s64)183 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD %int_to_ptr(p0) :: (load (s32))184 ; CHECK-NEXT: G_STORE [[C1]](s32), [[PTR_ADD]](p0) :: (store (s32))185 ; CHECK-NEXT: G_STORE %ptr_to_int(s64), [[PTR_ADD]](p0) :: (store (s64))186 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)187 ; CHECK-NEXT: RET_ReallyLR implicit $w0188 %0:_(p0) = COPY $x0189 %2:_(s64) = G_CONSTANT i64 1600190 %4:_(s64) = G_CONSTANT i64 6191 %9:_(s32) = G_CONSTANT i32 0192 %10:_(p0) = G_PTR_ADD %0, %2(s64)193 %11:_(p0) = G_PTR_ADD %10, %4(s64)194 %ptr_to_int:_(s64) = G_PTRTOINT %11195 %int_to_ptr:_(p0) = G_INTTOPTR %ptr_to_int196 %7:_(s32) = G_LOAD %int_to_ptr(p0) :: (load 4)197 G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10198 G_STORE %ptr_to_int(s64), %10(p0) :: (store 8)199 $w0 = COPY %7(s32)200 RET_ReallyLR implicit $w0201...202---203name: reassoc_cst_inner_lhs204alignment: 4205tracksRegLiveness: true206liveins:207 - { reg: '$w0' }208 - { reg: '$x1' }209 - { reg: '$x2' }210 - { reg: '$x3' }211body: |212 bb.1:213 liveins: $w0, $x1, $x2, $x3214 215 ; CHECK-LABEL: name: reassoc_cst_inner_lhs216 ; CHECK: liveins: $w0, $x1, $x2, $x3217 ; CHECK-NEXT: {{ $}}218 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x2219 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x3220 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 40221 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2222 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C1]](s64)223 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[SHL]](s64)224 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)225 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))226 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)227 ; CHECK-NEXT: RET_ReallyLR228 %1:_(p0) = COPY $x1229 %2:_(p0) = COPY $x2230 %3:_(s64) = COPY $x3231 %8:_(s64) = G_CONSTANT i64 40232 %9:_(p0) = G_PTR_ADD %2, %8(s64)233 %10:_(s64) = G_CONSTANT i64 2234 %11:_(s64) = G_SHL %3, %10235 %12:_(p0) = G_PTR_ADD %9, %11(s64)236 %14:_(s32) = G_LOAD %12(p0) :: (load (s32))237 $w0 = COPY %14238 RET_ReallyLR239 240...241---242name: reassoc_cst_inner_lhs_multiuse243alignment: 4244tracksRegLiveness: true245liveins:246 - { reg: '$w0' }247 - { reg: '$x1' }248 - { reg: '$x2' }249 - { reg: '$x3' }250body: |251 bb.1:252 liveins: $w0, $x1, $x2, $x3253 254 ; CHECK-LABEL: name: reassoc_cst_inner_lhs_multiuse255 ; CHECK: liveins: $w0, $x1, $x2, $x3256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x2258 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x3259 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 40260 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)261 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2262 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C1]](s64)263 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[SHL]](s64)264 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))265 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)266 ; CHECK-NEXT: $x0 = COPY [[PTR_ADD]](p0)267 ; CHECK-NEXT: RET_ReallyLR268 %1:_(p0) = COPY $x1269 %2:_(p0) = COPY $x2270 %3:_(s64) = COPY $x3271 %8:_(s64) = G_CONSTANT i64 40272 %9:_(p0) = G_PTR_ADD %2, %8(s64)273 %10:_(s64) = G_CONSTANT i64 2274 %11:_(s64) = G_SHL %3, %10275 %12:_(p0) = G_PTR_ADD %9, %11(s64)276 %14:_(s32) = G_LOAD %12(p0) :: (load (s32))277 $w0 = COPY %14278 $x0 = COPY %9279 RET_ReallyLR280 281...282---283name: reassoc_cst_inner_lhs_const_lhs284alignment: 4285tracksRegLiveness: true286liveins:287 - { reg: '$w0' }288 - { reg: '$x1' }289 - { reg: '$x2' }290 - { reg: '$x3' }291body: |292 bb.1:293 liveins: $w0, $x1, $x2, $x3294 295 ; CHECK-LABEL: name: reassoc_cst_inner_lhs_const_lhs296 ; CHECK: liveins: $w0, $x1, $x2, $x3297 ; CHECK-NEXT: {{ $}}298 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x2299 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x3300 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 40301 ; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:_(p0) = G_INTTOPTR [[C]](s64)302 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[INTTOPTR]], [[COPY]](s64)303 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2304 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C1]](s64)305 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[SHL]](s64)306 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))307 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)308 ; CHECK-NEXT: RET_ReallyLR309 %1:_(p0) = COPY $x1310 %2:_(s64) = COPY $x2311 %3:_(s64) = COPY $x3312 %8:_(s64) = G_CONSTANT i64 40313 %9:_(p0) = G_INTTOPTR %8(s64)314 %10:_(p0) = G_PTR_ADD %9, %2(s64)315 %11:_(s64) = G_CONSTANT i64 2316 %12:_(s64) = G_SHL %3, %11317 %13:_(p0) = G_PTR_ADD %10, %12(s64)318 %15:_(s32) = G_LOAD %13(p0) :: (load (s32))319 $w0 = COPY %15320 RET_ReallyLR321 322...323---324name: rhs_add_nuw325alignment: 4326liveins:327 - { reg: '$x0' }328 - { reg: '$x1' }329body: |330 bb.1:331 liveins: $x0, $x1332 333 ; CHECK-LABEL: name: rhs_add_nuw334 ; CHECK: liveins: $x0, $x1335 ; CHECK-NEXT: {{ $}}336 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0337 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1338 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1339 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[COPY1]](s64)340 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD]], [[C]](s64)341 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))342 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)343 ; CHECK-NEXT: RET_ReallyLR implicit $w0344 %0:_(p0) = COPY $x0345 %1:_(s64) = COPY $x1346 %2:_(s64) = G_CONSTANT i64 1347 %3:_(s64) = nuw G_ADD %1, %2348 %4:_(p0) = nuw G_PTR_ADD %0, %3(s64)349 %7:_(s32) = G_LOAD %4(p0) :: (load 1)350 $w0 = COPY %7(s32)351 RET_ReallyLR implicit $w0352 353...354---355name: rhs_add_nuw_nusw356alignment: 4357liveins:358 - { reg: '$x0' }359 - { reg: '$x1' }360body: |361 bb.1:362 liveins: $x0, $x1363 364 ; CHECK-LABEL: name: rhs_add_nuw_nusw365 ; CHECK: liveins: $x0, $x1366 ; CHECK-NEXT: {{ $}}367 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0368 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1369 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1370 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[COPY1]](s64)371 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD]], [[C]](s64)372 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))373 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)374 ; CHECK-NEXT: RET_ReallyLR implicit $w0375 %0:_(p0) = COPY $x0376 %1:_(s64) = COPY $x1377 %2:_(s64) = G_CONSTANT i64 1378 %3:_(s64) = nuw G_ADD %1, %2379 %4:_(p0) = nuw nusw G_PTR_ADD %0, %3(s64)380 %7:_(s32) = G_LOAD %4(p0) :: (load 1)381 $w0 = COPY %7(s32)382 RET_ReallyLR implicit $w0383 384...385---386name: rhs_add_nuw_inbounds387alignment: 4388liveins:389 - { reg: '$x0' }390 - { reg: '$x1' }391body: |392 bb.1:393 liveins: $x0, $x1394 395 ; CHECK-LABEL: name: rhs_add_nuw_inbounds396 ; CHECK: liveins: $x0, $x1397 ; CHECK-NEXT: {{ $}}398 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0399 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1400 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1401 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[COPY1]](s64)402 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[C]](s64)403 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))404 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)405 ; CHECK-NEXT: RET_ReallyLR implicit $w0406 %0:_(p0) = COPY $x0407 %1:_(s64) = COPY $x1408 %2:_(s64) = G_CONSTANT i64 1409 %3:_(s64) = nuw G_ADD %1, %2410 %4:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %3(s64)411 %7:_(s32) = G_LOAD %4(p0) :: (load 1)412 $w0 = COPY %7(s32)413 RET_ReallyLR implicit $w0414 415...416---417name: reassoc_nuw418alignment: 4419liveins:420 - { reg: '$x0' }421 - { reg: '$x1' }422body: |423 bb.1:424 liveins: $x0, $x1425 426 ; CHECK-LABEL: name: reassoc_nuw427 ; CHECK: liveins: $x0, $x1428 ; CHECK-NEXT: {{ $}}429 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0430 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1431 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1432 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[COPY1]](s64)433 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD]], [[C]](s64)434 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))435 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)436 ; CHECK-NEXT: RET_ReallyLR implicit $w0437 %0:_(p0) = COPY $x0438 %1:_(s64) = COPY $x1439 %2:_(s64) = G_CONSTANT i64 1440 %3:_(p0) = nuw G_PTR_ADD %0, %2(s64)441 %4:_(p0) = nuw G_PTR_ADD %3(p0), %1442 %7:_(s32) = G_LOAD %4(p0) :: (load 1)443 $w0 = COPY %7(s32)444 RET_ReallyLR implicit $w0445 446...447---448name: reassoc_nuw_nusw449alignment: 4450liveins:451 - { reg: '$x0' }452 - { reg: '$x1' }453body: |454 bb.1:455 liveins: $x0, $x1456 457 ; CHECK-LABEL: name: reassoc_nuw_nusw458 ; CHECK: liveins: $x0, $x1459 ; CHECK-NEXT: {{ $}}460 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0461 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1462 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1463 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[COPY1]](s64)464 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD]], [[C]](s64)465 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))466 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)467 ; CHECK-NEXT: RET_ReallyLR implicit $w0468 %0:_(p0) = COPY $x0469 %1:_(s64) = COPY $x1470 %2:_(s64) = G_CONSTANT i64 1471 %3:_(p0) = nuw nusw G_PTR_ADD %0, %2(s64)472 %4:_(p0) = nuw nusw G_PTR_ADD %3(p0), %1473 %7:_(s32) = G_LOAD %4(p0) :: (load 1)474 $w0 = COPY %7(s32)475 RET_ReallyLR implicit $w0476 477...478---479name: reassoc_nuw_inbounds480alignment: 4481liveins:482 - { reg: '$x0' }483 - { reg: '$x1' }484body: |485 bb.1:486 liveins: $x0, $x1487 488 ; CHECK-LABEL: name: reassoc_nuw_inbounds489 ; CHECK: liveins: $x0, $x1490 ; CHECK-NEXT: {{ $}}491 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0492 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1493 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1494 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[COPY1]](s64)495 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[C]](s64)496 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))497 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)498 ; CHECK-NEXT: RET_ReallyLR implicit $w0499 %0:_(p0) = COPY $x0500 %1:_(s64) = COPY $x1501 %2:_(s64) = G_CONSTANT i64 1502 %3:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %2(s64)503 %4:_(p0) = nuw nusw inbounds G_PTR_ADD %3(p0), %1504 %7:_(s32) = G_LOAD %4(p0) :: (load 1)505 $w0 = COPY %7(s32)506 RET_ReallyLR implicit $w0507 508...509---510name: combine_offsets_nuw511alignment: 4512liveins:513 - { reg: '$x0' }514body: |515 bb.1:516 liveins: $x0517 518 ; CHECK-LABEL: name: combine_offsets_nuw519 ; CHECK: liveins: $x0520 ; CHECK-NEXT: {{ $}}521 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0522 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11523 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[C]](s64)524 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8))525 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)526 ; CHECK-NEXT: RET_ReallyLR implicit $w0527 %0:_(p0) = COPY $x0528 %1:_(s64) = G_CONSTANT i64 10529 %2:_(s64) = G_CONSTANT i64 1530 %3:_(p0) = nuw G_PTR_ADD %0, %1531 %4:_(p0) = nuw G_PTR_ADD %3(p0), %2532 %7:_(s32) = G_LOAD %4(p0) :: (load 1)533 $w0 = COPY %7(s32)534 RET_ReallyLR implicit $w0535 536...537---538name: combine_offsets_nuw_inbounds539alignment: 4540liveins:541 - { reg: '$x0' }542body: |543 bb.1:544 liveins: $x0545 546 ; CHECK-LABEL: name: combine_offsets_nuw_inbounds547 ; CHECK: liveins: $x0548 ; CHECK-NEXT: {{ $}}549 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0550 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11551 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C]](s64)552 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8))553 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)554 ; CHECK-NEXT: RET_ReallyLR implicit $w0555 %0:_(p0) = COPY $x0556 %1:_(s64) = G_CONSTANT i64 10557 %2:_(s64) = G_CONSTANT i64 1558 %3:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %1559 %4:_(p0) = nuw nusw inbounds G_PTR_ADD %3(p0), %2560 %7:_(s32) = G_LOAD %4(p0) :: (load 1)561 $w0 = COPY %7(s32)562 RET_ReallyLR implicit $w0563 564...565