638 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s4# RUN: llc -mtriple=riscv64 -mattr=+unaligned-scalar-mem -run-pass=legalizer %s -o - \5# RUN: | FileCheck %s --check-prefix=UNALIGNED6 7---8name: load_i89alignment: 410tracksRegLiveness: true11registers:12 - { id: 0, class: _ }13 - { id: 1, class: _ }14 - { id: 2, class: _ }15frameInfo:16 maxAlignment: 117machineFunctionInfo:18 varArgsFrameIndex: 019 varArgsSaveSize: 020body: |21 bb.1:22 liveins: $x1023 24 ; CHECK-LABEL: name: load_i825 ; CHECK: liveins: $x1026 ; CHECK-NEXT: {{ $}}27 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1028 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s8))29 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)30 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)31 ; CHECK-NEXT: PseudoRET implicit $x1032 ;33 ; UNALIGNED-LABEL: name: load_i834 ; UNALIGNED: liveins: $x1035 ; UNALIGNED-NEXT: {{ $}}36 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1037 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s8))38 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)39 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)40 ; UNALIGNED-NEXT: PseudoRET implicit $x1041 %0:_(p0) = COPY $x1042 %1:_(s8) = G_LOAD %0(p0) :: (load (s8))43 %2:_(s64) = G_ANYEXT %1(s8)44 $x10 = COPY %2(s64)45 PseudoRET implicit $x1046 47...48---49name: load_i1650alignment: 451tracksRegLiveness: true52registers:53 - { id: 0, class: _ }54 - { id: 1, class: _ }55 - { id: 2, class: _ }56frameInfo:57 maxAlignment: 158machineFunctionInfo:59 varArgsFrameIndex: 060 varArgsSaveSize: 061body: |62 bb.1:63 liveins: $x1064 65 ; CHECK-LABEL: name: load_i1666 ; CHECK: liveins: $x1067 ; CHECK-NEXT: {{ $}}68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1069 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16))70 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)71 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)72 ; CHECK-NEXT: PseudoRET implicit $x1073 ;74 ; UNALIGNED-LABEL: name: load_i1675 ; UNALIGNED: liveins: $x1076 ; UNALIGNED-NEXT: {{ $}}77 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1078 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16))79 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)80 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)81 ; UNALIGNED-NEXT: PseudoRET implicit $x1082 %0:_(p0) = COPY $x1083 %1:_(s16) = G_LOAD %0(p0) :: (load (s16))84 %2:_(s64) = G_ANYEXT %1(s16)85 $x10 = COPY %2(s64)86 PseudoRET implicit $x1087 88...89---90name: load_i3291alignment: 492tracksRegLiveness: true93registers:94 - { id: 0, class: _ }95 - { id: 1, class: _ }96 - { id: 2, class: _ }97frameInfo:98 maxAlignment: 199machineFunctionInfo:100 varArgsFrameIndex: 0101 varArgsSaveSize: 0102body: |103 bb.1:104 liveins: $x10105 106 ; CHECK-LABEL: name: load_i32107 ; CHECK: liveins: $x10108 ; CHECK-NEXT: {{ $}}109 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10110 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))111 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)112 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)113 ; CHECK-NEXT: PseudoRET implicit $x10114 ;115 ; UNALIGNED-LABEL: name: load_i32116 ; UNALIGNED: liveins: $x10117 ; UNALIGNED-NEXT: {{ $}}118 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10119 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))120 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)121 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)122 ; UNALIGNED-NEXT: PseudoRET implicit $x10123 %0:_(p0) = COPY $x10124 %1:_(s32) = G_LOAD %0(p0) :: (load (s32))125 %2:_(s64) = G_ANYEXT %1(s32)126 $x10 = COPY %2(s64)127 PseudoRET implicit $x10128 129...130---131name: load_i64132alignment: 4133tracksRegLiveness: true134registers:135 - { id: 0, class: _ }136 - { id: 1, class: _ }137frameInfo:138 maxAlignment: 1139machineFunctionInfo:140 varArgsFrameIndex: 0141 varArgsSaveSize: 0142body: |143 bb.1:144 liveins: $x10145 146 ; CHECK-LABEL: name: load_i64147 ; CHECK: liveins: $x10148 ; CHECK-NEXT: {{ $}}149 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10150 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64))151 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s64)152 ; CHECK-NEXT: PseudoRET implicit $x10153 ;154 ; UNALIGNED-LABEL: name: load_i64155 ; UNALIGNED: liveins: $x10156 ; UNALIGNED-NEXT: {{ $}}157 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10158 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64))159 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s64)160 ; UNALIGNED-NEXT: PseudoRET implicit $x10161 %0:_(p0) = COPY $x10162 %1:_(s64) = G_LOAD %0(p0) :: (load (s64))163 $x10 = COPY %1(s64)164 PseudoRET implicit $x10165 166...167---168name: load_i128169alignment: 4170tracksRegLiveness: true171registers:172 - { id: 0, class: _ }173 - { id: 1, class: _ }174 - { id: 2, class: _ }175 - { id: 3, class: _ }176frameInfo:177 maxAlignment: 1178machineFunctionInfo:179 varArgsFrameIndex: 0180 varArgsSaveSize: 0181body: |182 bb.1:183 liveins: $x10184 185 ; CHECK-LABEL: name: load_i128186 ; CHECK: liveins: $x10187 ; CHECK-NEXT: {{ $}}188 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10189 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64))190 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8191 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)192 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (load (s64) from unknown-address + 8)193 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s64)194 ; CHECK-NEXT: $x11 = COPY [[LOAD1]](s64)195 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11196 ;197 ; UNALIGNED-LABEL: name: load_i128198 ; UNALIGNED: liveins: $x10199 ; UNALIGNED-NEXT: {{ $}}200 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10201 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64))202 ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8203 ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)204 ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (load (s64) from unknown-address + 8)205 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s64)206 ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s64)207 ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11208 %0:_(p0) = COPY $x10209 %1:_(s128) = G_LOAD %0(p0) :: (load (s128), align 8)210 %2:_(s64), %3:_(s64) = G_UNMERGE_VALUES %1(s128)211 $x10 = COPY %2(s64)212 $x11 = COPY %3(s64)213 PseudoRET implicit $x10, implicit $x11214 215...216---217name: load_ptr218alignment: 4219tracksRegLiveness: true220registers:221 - { id: 0, class: _ }222 - { id: 1, class: _ }223frameInfo:224 maxAlignment: 1225machineFunctionInfo:226 varArgsFrameIndex: 0227 varArgsSaveSize: 0228body: |229 bb.1:230 liveins: $x10231 232 ; CHECK-LABEL: name: load_ptr233 ; CHECK: liveins: $x10234 ; CHECK-NEXT: {{ $}}235 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10236 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0))237 ; CHECK-NEXT: $x10 = COPY [[LOAD]](p0)238 ; CHECK-NEXT: PseudoRET implicit $x10239 ;240 ; UNALIGNED-LABEL: name: load_ptr241 ; UNALIGNED: liveins: $x10242 ; UNALIGNED-NEXT: {{ $}}243 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10244 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0))245 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](p0)246 ; UNALIGNED-NEXT: PseudoRET implicit $x10247 %0:_(p0) = COPY $x10248 %1:_(p0) = G_LOAD %0(p0) :: (load (p0))249 $x10 = COPY %1(p0)250 PseudoRET implicit $x10251 252...253---254name: load_i16_unaligned255alignment: 4256tracksRegLiveness: true257registers:258 - { id: 0, class: _ }259 - { id: 1, class: _ }260 - { id: 2, class: _ }261frameInfo:262 maxAlignment: 1263machineFunctionInfo:264 varArgsFrameIndex: 0265 varArgsSaveSize: 0266body: |267 bb.1:268 liveins: $x10269 270 ; CHECK-LABEL: name: load_i16_unaligned271 ; CHECK: liveins: $x10272 ; CHECK-NEXT: {{ $}}273 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10274 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))275 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1276 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)277 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)278 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8279 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)280 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C1]](s64)281 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]282 ; CHECK-NEXT: $x10 = COPY [[OR]](s64)283 ; CHECK-NEXT: PseudoRET implicit $x10284 ;285 ; UNALIGNED-LABEL: name: load_i16_unaligned286 ; UNALIGNED: liveins: $x10287 ; UNALIGNED-NEXT: {{ $}}288 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10289 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16), align 1)290 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)291 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)292 ; UNALIGNED-NEXT: PseudoRET implicit $x10293 %0:_(p0) = COPY $x10294 %1:_(s16) = G_LOAD %0(p0) :: (load (s16), align 1)295 %2:_(s64) = G_ANYEXT %1(s16)296 $x10 = COPY %2(s64)297 PseudoRET implicit $x10298 299...300---301name: load_i32_unaligned302alignment: 4303tracksRegLiveness: true304registers:305 - { id: 0, class: _ }306 - { id: 1, class: _ }307 - { id: 2, class: _ }308frameInfo:309 maxAlignment: 1310machineFunctionInfo:311 varArgsFrameIndex: 0312 varArgsSaveSize: 0313body: |314 bb.1:315 liveins: $x10316 317 ; CHECK-LABEL: name: load_i32_unaligned318 ; CHECK: liveins: $x10319 ; CHECK-NEXT: {{ $}}320 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10321 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))322 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1323 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)324 ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)325 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8326 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD1]], [[C1]](s64)327 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]328 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2329 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C2]](s64)330 ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 2)331 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD1]], [[C]](s64)332 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 3)333 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)334 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C1]](s64)335 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD2]]336 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16337 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[C3]](s64)338 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[SHL2]], [[OR]]339 ; CHECK-NEXT: $x10 = COPY [[OR2]](s64)340 ; CHECK-NEXT: PseudoRET implicit $x10341 ;342 ; UNALIGNED-LABEL: name: load_i32_unaligned343 ; UNALIGNED: liveins: $x10344 ; UNALIGNED-NEXT: {{ $}}345 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10346 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 1)347 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)348 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)349 ; UNALIGNED-NEXT: PseudoRET implicit $x10350 %0:_(p0) = COPY $x10351 %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 1)352 %2:_(s64) = G_ANYEXT %1(s32)353 $x10 = COPY %2(s64)354 PseudoRET implicit $x10355 356...357---358name: load_i32_align2359alignment: 4360tracksRegLiveness: true361registers:362 - { id: 0, class: _ }363 - { id: 1, class: _ }364 - { id: 2, class: _ }365frameInfo:366 maxAlignment: 1367machineFunctionInfo:368 varArgsFrameIndex: 0369 varArgsSaveSize: 0370body: |371 bb.1:372 liveins: $x10373 374 ; CHECK-LABEL: name: load_i32_align2375 ; CHECK: liveins: $x10376 ; CHECK-NEXT: {{ $}}377 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10378 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16))379 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2380 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)381 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s16) from unknown-address + 2)382 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16383 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)384 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C1]](s64)385 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]386 ; CHECK-NEXT: $x10 = COPY [[OR]](s64)387 ; CHECK-NEXT: PseudoRET implicit $x10388 ;389 ; UNALIGNED-LABEL: name: load_i32_align2390 ; UNALIGNED: liveins: $x10391 ; UNALIGNED-NEXT: {{ $}}392 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10393 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 2)394 ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)395 ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s64)396 ; UNALIGNED-NEXT: PseudoRET implicit $x10397 %0:_(p0) = COPY $x10398 %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 2)399 %2:_(s64) = G_ANYEXT %1(s32)400 $x10 = COPY %2(s64)401 PseudoRET implicit $x10402 403...404---405name: load_i64_unaligned406alignment: 4407tracksRegLiveness: true408registers:409 - { id: 0, class: _ }410 - { id: 1, class: _ }411frameInfo:412 maxAlignment: 1413machineFunctionInfo:414 varArgsFrameIndex: 0415 varArgsSaveSize: 0416body: |417 bb.1:418 liveins: $x10419 420 ; CHECK-LABEL: name: load_i64_unaligned421 ; CHECK: liveins: $x10422 ; CHECK-NEXT: {{ $}}423 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10424 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))425 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1426 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)427 ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)428 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8429 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD1]], [[C1]](s64)430 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]431 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2432 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C2]](s64)433 ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 2)434 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD1]], [[C]](s64)435 ; CHECK-NEXT: [[ZEXTLOAD3:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 3)436 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD3]], [[C1]](s64)437 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD2]]438 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16439 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[C3]](s64)440 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[SHL2]], [[OR]]441 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 4442 ; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C4]](s64)443 ; CHECK-NEXT: [[ZEXTLOAD4:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD3]](p0) :: (load (s8) from unknown-address + 4)444 ; CHECK-NEXT: [[PTR_ADD4:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD3]], [[C]](s64)445 ; CHECK-NEXT: [[ZEXTLOAD5:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD4]](p0) :: (load (s8) from unknown-address + 5)446 ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD5]], [[C1]](s64)447 ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s64) = G_OR [[SHL3]], [[ZEXTLOAD4]]448 ; CHECK-NEXT: [[PTR_ADD5:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD3]], [[C2]](s64)449 ; CHECK-NEXT: [[ZEXTLOAD6:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD5]](p0) :: (load (s8) from unknown-address + 6)450 ; CHECK-NEXT: [[PTR_ADD6:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD5]], [[C]](s64)451 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD6]](p0) :: (load (s8) from unknown-address + 7)452 ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s64) = G_SHL [[LOAD]], [[C1]](s64)453 ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s64) = G_OR [[SHL4]], [[ZEXTLOAD6]]454 ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s64) = G_SHL [[OR4]], [[C3]](s64)455 ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s64) = G_OR [[SHL5]], [[OR3]]456 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32457 ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s64) = G_SHL [[OR5]], [[C5]](s64)458 ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s64) = G_OR [[SHL6]], [[OR2]]459 ; CHECK-NEXT: $x10 = COPY [[OR6]](s64)460 ; CHECK-NEXT: PseudoRET implicit $x10461 ;462 ; UNALIGNED-LABEL: name: load_i64_unaligned463 ; UNALIGNED: liveins: $x10464 ; UNALIGNED-NEXT: {{ $}}465 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10466 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64), align 1)467 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s64)468 ; UNALIGNED-NEXT: PseudoRET implicit $x10469 %0:_(p0) = COPY $x10470 %1:_(s64) = G_LOAD %0(p0) :: (load (s64), align 1)471 $x10 = COPY %1(s64)472 PseudoRET implicit $x10473 474...475---476name: load_i64_align2477alignment: 4478tracksRegLiveness: true479registers:480 - { id: 0, class: _ }481 - { id: 1, class: _ }482frameInfo:483 maxAlignment: 1484machineFunctionInfo:485 varArgsFrameIndex: 0486 varArgsSaveSize: 0487body: |488 bb.1:489 liveins: $x10490 491 ; CHECK-LABEL: name: load_i64_align2492 ; CHECK: liveins: $x10493 ; CHECK-NEXT: {{ $}}494 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10495 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16))496 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2497 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)498 ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s16) from unknown-address + 2)499 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16500 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD1]], [[C1]](s64)501 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]502 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4503 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C2]](s64)504 ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s16) from unknown-address + 4)505 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD1]], [[C]](s64)506 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD2]](p0) :: (load (s16) from unknown-address + 6)507 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[LOAD]], [[C1]](s64)508 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD2]]509 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 32510 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[C3]](s64)511 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[SHL2]], [[OR]]512 ; CHECK-NEXT: $x10 = COPY [[OR2]](s64)513 ; CHECK-NEXT: PseudoRET implicit $x10514 ;515 ; UNALIGNED-LABEL: name: load_i64_align2516 ; UNALIGNED: liveins: $x10517 ; UNALIGNED-NEXT: {{ $}}518 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10519 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64), align 2)520 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s64)521 ; UNALIGNED-NEXT: PseudoRET implicit $x10522 %0:_(p0) = COPY $x10523 %1:_(s64) = G_LOAD %0(p0) :: (load (s64), align 2)524 $x10 = COPY %1(s64)525 PseudoRET implicit $x10526 527...528---529name: load_i128_unaligned530alignment: 4531tracksRegLiveness: true532registers:533 - { id: 0, class: _ }534 - { id: 1, class: _ }535 - { id: 2, class: _ }536 - { id: 3, class: _ }537frameInfo:538 maxAlignment: 1539machineFunctionInfo:540 varArgsFrameIndex: 0541 varArgsSaveSize: 0542body: |543 bb.1:544 liveins: $x10545 546 ; CHECK-LABEL: name: load_i128_unaligned547 ; CHECK: liveins: $x10548 ; CHECK-NEXT: {{ $}}549 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10550 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))551 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1552 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)553 ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)554 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8555 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD1]], [[C1]](s64)556 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]557 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2558 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C2]](s64)559 ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 2)560 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD1]], [[C]](s64)561 ; CHECK-NEXT: [[ZEXTLOAD3:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 3)562 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD3]], [[C1]](s64)563 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD2]]564 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16565 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[C3]](s64)566 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[SHL2]], [[OR]]567 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 4568 ; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C4]](s64)569 ; CHECK-NEXT: [[ZEXTLOAD4:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD3]](p0) :: (load (s8) from unknown-address + 4)570 ; CHECK-NEXT: [[PTR_ADD4:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD3]], [[C]](s64)571 ; CHECK-NEXT: [[ZEXTLOAD5:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD4]](p0) :: (load (s8) from unknown-address + 5)572 ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD5]], [[C1]](s64)573 ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s64) = G_OR [[SHL3]], [[ZEXTLOAD4]]574 ; CHECK-NEXT: [[PTR_ADD5:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD3]], [[C2]](s64)575 ; CHECK-NEXT: [[ZEXTLOAD6:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD5]](p0) :: (load (s8) from unknown-address + 6)576 ; CHECK-NEXT: [[PTR_ADD6:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD5]], [[C]](s64)577 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD6]](p0) :: (load (s8) from unknown-address + 7)578 ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s64) = G_SHL [[LOAD]], [[C1]](s64)579 ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s64) = G_OR [[SHL4]], [[ZEXTLOAD6]]580 ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s64) = G_SHL [[OR4]], [[C3]](s64)581 ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s64) = G_OR [[SHL5]], [[OR3]]582 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32583 ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s64) = G_SHL [[OR5]], [[C5]](s64)584 ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s64) = G_OR [[SHL6]], [[OR2]]585 ; CHECK-NEXT: [[PTR_ADD7:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C1]](s64)586 ; CHECK-NEXT: [[ZEXTLOAD7:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD7]](p0) :: (load (s8) from unknown-address + 8)587 ; CHECK-NEXT: [[PTR_ADD8:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD7]], [[C]](s64)588 ; CHECK-NEXT: [[ZEXTLOAD8:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD8]](p0) :: (load (s8) from unknown-address + 9)589 ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD8]], [[C1]](s64)590 ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s64) = G_OR [[SHL7]], [[ZEXTLOAD7]]591 ; CHECK-NEXT: [[PTR_ADD9:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD7]], [[C2]](s64)592 ; CHECK-NEXT: [[ZEXTLOAD9:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD9]](p0) :: (load (s8) from unknown-address + 10)593 ; CHECK-NEXT: [[PTR_ADD10:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD9]], [[C]](s64)594 ; CHECK-NEXT: [[ZEXTLOAD10:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD10]](p0) :: (load (s8) from unknown-address + 11)595 ; CHECK-NEXT: [[SHL8:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD10]], [[C1]](s64)596 ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(s64) = G_OR [[SHL8]], [[ZEXTLOAD9]]597 ; CHECK-NEXT: [[SHL9:%[0-9]+]]:_(s64) = G_SHL [[OR8]], [[C3]](s64)598 ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(s64) = G_OR [[SHL9]], [[OR7]]599 ; CHECK-NEXT: [[PTR_ADD11:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD7]], [[C4]](s64)600 ; CHECK-NEXT: [[ZEXTLOAD11:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD11]](p0) :: (load (s8) from unknown-address + 12)601 ; CHECK-NEXT: [[PTR_ADD12:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD11]], [[C]](s64)602 ; CHECK-NEXT: [[ZEXTLOAD12:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD12]](p0) :: (load (s8) from unknown-address + 13)603 ; CHECK-NEXT: [[SHL10:%[0-9]+]]:_(s64) = G_SHL [[ZEXTLOAD12]], [[C1]](s64)604 ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(s64) = G_OR [[SHL10]], [[ZEXTLOAD11]]605 ; CHECK-NEXT: [[PTR_ADD13:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD11]], [[C2]](s64)606 ; CHECK-NEXT: [[ZEXTLOAD13:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD13]](p0) :: (load (s8) from unknown-address + 14)607 ; CHECK-NEXT: [[PTR_ADD14:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD13]], [[C]](s64)608 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD14]](p0) :: (load (s8) from unknown-address + 15)609 ; CHECK-NEXT: [[SHL11:%[0-9]+]]:_(s64) = G_SHL [[LOAD1]], [[C1]](s64)610 ; CHECK-NEXT: [[OR11:%[0-9]+]]:_(s64) = G_OR [[SHL11]], [[ZEXTLOAD13]]611 ; CHECK-NEXT: [[SHL12:%[0-9]+]]:_(s64) = G_SHL [[OR11]], [[C3]](s64)612 ; CHECK-NEXT: [[OR12:%[0-9]+]]:_(s64) = G_OR [[SHL12]], [[OR10]]613 ; CHECK-NEXT: [[SHL13:%[0-9]+]]:_(s64) = G_SHL [[OR12]], [[C5]](s64)614 ; CHECK-NEXT: [[OR13:%[0-9]+]]:_(s64) = G_OR [[SHL13]], [[OR9]]615 ; CHECK-NEXT: $x10 = COPY [[OR6]](s64)616 ; CHECK-NEXT: $x11 = COPY [[OR13]](s64)617 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11618 ;619 ; UNALIGNED-LABEL: name: load_i128_unaligned620 ; UNALIGNED: liveins: $x10621 ; UNALIGNED-NEXT: {{ $}}622 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10623 ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64), align 1)624 ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8625 ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)626 ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (load (s64) from unknown-address + 8, align 1)627 ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s64)628 ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s64)629 ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11630 %0:_(p0) = COPY $x10631 %1:_(s128) = G_LOAD %0(p0) :: (load (s128), align 1)632 %2:_(s64), %3:_(s64) = G_UNMERGE_VALUES %1(s128)633 $x10 = COPY %2(s64)634 $x11 = COPY %3(s64)635 PseudoRET implicit $x10, implicit $x11636 637...638