363 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s4# RUN: llc -mtriple=riscv32 -mattr=+unaligned-scalar-mem -run-pass=legalizer %s -o - \5# RUN: | FileCheck %s --check-prefix=UNALIGNED6 7---8name: store_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: $x10, $x1123 24 ; CHECK-LABEL: name: store_i825 ; CHECK: liveins: $x10, $x1126 ; CHECK-NEXT: {{ $}}27 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x1028 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1129 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)30 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s8))31 ; CHECK-NEXT: PseudoRET32 ;33 ; UNALIGNED-LABEL: name: store_i834 ; UNALIGNED: liveins: $x10, $x1135 ; UNALIGNED-NEXT: {{ $}}36 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x1037 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1138 ; UNALIGNED-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)39 ; UNALIGNED-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s8))40 ; UNALIGNED-NEXT: PseudoRET41 %2:_(s32) = COPY $x1042 %0:_(s8) = G_TRUNC %2(s32)43 %1:_(p0) = COPY $x1144 G_STORE %0(s8), %1(p0) :: (store (s8))45 PseudoRET46 47...48---49name: store_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: $x10, $x1164 65 ; CHECK-LABEL: name: store_i1666 ; CHECK: liveins: $x10, $x1167 ; CHECK-NEXT: {{ $}}68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x1069 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)70 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1171 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s16))72 ; CHECK-NEXT: PseudoRET73 ;74 ; UNALIGNED-LABEL: name: store_i1675 ; UNALIGNED: liveins: $x10, $x1176 ; UNALIGNED-NEXT: {{ $}}77 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x1078 ; UNALIGNED-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)79 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1180 ; UNALIGNED-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s16))81 ; UNALIGNED-NEXT: PseudoRET82 %2:_(s32) = COPY $x1083 %0:_(s16) = G_TRUNC %2(s32)84 %1:_(p0) = COPY $x1185 G_STORE %0(s16), %1(p0) :: (store (s16))86 PseudoRET87 88...89---90name: store_i3291alignment: 492tracksRegLiveness: true93registers:94 - { id: 0, class: _ }95 - { id: 1, class: _ }96frameInfo:97 maxAlignment: 198machineFunctionInfo:99 varArgsFrameIndex: 0100 varArgsSaveSize: 0101body: |102 bb.1:103 liveins: $x10, $x11104 105 ; CHECK-LABEL: name: store_i32106 ; CHECK: liveins: $x10, $x11107 ; CHECK-NEXT: {{ $}}108 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10109 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11110 ; CHECK-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32))111 ; CHECK-NEXT: PseudoRET112 ;113 ; UNALIGNED-LABEL: name: store_i32114 ; UNALIGNED: liveins: $x10, $x11115 ; UNALIGNED-NEXT: {{ $}}116 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10117 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11118 ; UNALIGNED-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32))119 ; UNALIGNED-NEXT: PseudoRET120 %0:_(s32) = COPY $x10121 %1:_(p0) = COPY $x11122 G_STORE %0(s32), %1(p0) :: (store (s32))123 PseudoRET124 125...126---127name: store_i64128alignment: 4129tracksRegLiveness: true130registers:131 - { id: 0, class: _ }132 - { id: 1, class: _ }133 - { id: 2, class: _ }134 - { id: 3, class: _ }135frameInfo:136 maxAlignment: 1137machineFunctionInfo:138 varArgsFrameIndex: 0139 varArgsSaveSize: 0140body: |141 bb.1:142 liveins: $x10, $x11, $x12143 144 ; CHECK-LABEL: name: store_i64145 ; CHECK: liveins: $x10, $x11, $x12146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10148 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11149 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x12150 ; CHECK-NEXT: G_STORE [[COPY]](s32), [[COPY2]](p0) :: (store (s32), align 8)151 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4152 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY2]], [[C]](s32)153 ; CHECK-NEXT: G_STORE [[COPY1]](s32), [[PTR_ADD]](p0) :: (store (s32) into unknown-address + 4)154 ; CHECK-NEXT: PseudoRET155 ;156 ; UNALIGNED-LABEL: name: store_i64157 ; UNALIGNED: liveins: $x10, $x11, $x12158 ; UNALIGNED-NEXT: {{ $}}159 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10160 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11161 ; UNALIGNED-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x12162 ; UNALIGNED-NEXT: G_STORE [[COPY]](s32), [[COPY2]](p0) :: (store (s32), align 8)163 ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4164 ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY2]], [[C]](s32)165 ; UNALIGNED-NEXT: G_STORE [[COPY1]](s32), [[PTR_ADD]](p0) :: (store (s32) into unknown-address + 4)166 ; UNALIGNED-NEXT: PseudoRET167 %2:_(s32) = COPY $x10168 %3:_(s32) = COPY $x11169 %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)170 %1:_(p0) = COPY $x12171 G_STORE %0(s64), %1(p0) :: (store (s64))172 PseudoRET173 174...175---176name: store_ptr177alignment: 4178tracksRegLiveness: true179registers:180 - { id: 0, class: _ }181 - { id: 1, class: _ }182frameInfo:183 maxAlignment: 1184machineFunctionInfo:185 varArgsFrameIndex: 0186 varArgsSaveSize: 0187body: |188 bb.1:189 liveins: $x10, $x11190 191 ; CHECK-LABEL: name: store_ptr192 ; CHECK: liveins: $x10, $x11193 ; CHECK-NEXT: {{ $}}194 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10195 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11196 ; CHECK-NEXT: G_STORE [[COPY]](p0), [[COPY1]](p0) :: (store (p0), align 8)197 ; CHECK-NEXT: PseudoRET198 ;199 ; UNALIGNED-LABEL: name: store_ptr200 ; UNALIGNED: liveins: $x10, $x11201 ; UNALIGNED-NEXT: {{ $}}202 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10203 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11204 ; UNALIGNED-NEXT: G_STORE [[COPY]](p0), [[COPY1]](p0) :: (store (p0), align 8)205 ; UNALIGNED-NEXT: PseudoRET206 %0:_(p0) = COPY $x10207 %1:_(p0) = COPY $x11208 G_STORE %0(p0), %1(p0) :: (store (p0), align 8)209 PseudoRET210 211...212---213name: store_i16_unaligned214alignment: 4215tracksRegLiveness: true216registers:217 - { id: 0, class: _ }218 - { id: 1, class: _ }219 - { id: 2, class: _ }220frameInfo:221 maxAlignment: 1222machineFunctionInfo:223 varArgsFrameIndex: 0224 varArgsSaveSize: 0225body: |226 bb.1:227 liveins: $x10, $x11228 229 ; CHECK-LABEL: name: store_i16_unaligned230 ; CHECK: liveins: $x10, $x11231 ; CHECK-NEXT: {{ $}}232 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10233 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)234 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11235 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY [[TRUNC]](s16)236 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8237 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535238 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]239 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C]](s32)240 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)241 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1242 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY1]], [[C2]](s32)243 ; CHECK-NEXT: G_STORE [[COPY2]](s16), [[COPY1]](p0) :: (store (s8))244 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[PTR_ADD]](p0) :: (store (s8) into unknown-address + 1)245 ; CHECK-NEXT: PseudoRET246 ;247 ; UNALIGNED-LABEL: name: store_i16_unaligned248 ; UNALIGNED: liveins: $x10, $x11249 ; UNALIGNED-NEXT: {{ $}}250 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10251 ; UNALIGNED-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)252 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11253 ; UNALIGNED-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s16), align 1)254 ; UNALIGNED-NEXT: PseudoRET255 %2:_(s32) = COPY $x10256 %0:_(s16) = G_TRUNC %2(s32)257 %1:_(p0) = COPY $x11258 G_STORE %0(s16), %1(p0) :: (store (s16), align 1)259 PseudoRET260 261...262---263name: store_i32_unaligned264alignment: 4265tracksRegLiveness: true266registers:267 - { id: 0, class: _ }268 - { id: 1, class: _ }269frameInfo:270 maxAlignment: 1271machineFunctionInfo:272 varArgsFrameIndex: 0273 varArgsSaveSize: 0274body: |275 bb.1:276 liveins: $x10, $x11277 278 ; CHECK-LABEL: name: store_i32_unaligned279 ; CHECK: liveins: $x10, $x11280 ; CHECK-NEXT: {{ $}}281 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10282 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11283 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)284 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16285 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32)286 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2287 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY1]], [[C1]](s32)288 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)289 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 8290 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535291 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]292 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C2]](s32)293 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)294 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 1295 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY1]], [[C4]](s32)296 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s8))297 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[PTR_ADD1]](p0) :: (store (s8) into unknown-address + 1)298 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)299 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 8300 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[C5]](s32)301 ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)302 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD]], [[C4]](s32)303 ; CHECK-NEXT: G_STORE [[TRUNC2]](s16), [[PTR_ADD]](p0) :: (store (s8) into unknown-address + 2)304 ; CHECK-NEXT: G_STORE [[TRUNC3]](s16), [[PTR_ADD2]](p0) :: (store (s8) into unknown-address + 3)305 ; CHECK-NEXT: PseudoRET306 ;307 ; UNALIGNED-LABEL: name: store_i32_unaligned308 ; UNALIGNED: liveins: $x10, $x11309 ; UNALIGNED-NEXT: {{ $}}310 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10311 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11312 ; UNALIGNED-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32), align 1)313 ; UNALIGNED-NEXT: PseudoRET314 %0:_(s32) = COPY $x10315 %1:_(p0) = COPY $x11316 G_STORE %0(s32), %1(p0) :: (store (s32), align 1)317 PseudoRET318 319...320---321name: store_i32_align2322alignment: 4323tracksRegLiveness: true324registers:325 - { id: 0, class: _ }326 - { id: 1, class: _ }327frameInfo:328 maxAlignment: 1329machineFunctionInfo:330 varArgsFrameIndex: 0331 varArgsSaveSize: 0332body: |333 bb.1:334 liveins: $x10, $x11335 336 ; CHECK-LABEL: name: store_i32_align2337 ; CHECK: liveins: $x10, $x11338 ; CHECK-NEXT: {{ $}}339 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10340 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11341 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)342 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16343 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32)344 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2345 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY1]], [[C1]](s32)346 ; CHECK-NEXT: G_STORE [[COPY2]](s32), [[COPY1]](p0) :: (store (s16))347 ; CHECK-NEXT: G_STORE [[LSHR]](s32), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 2)348 ; CHECK-NEXT: PseudoRET349 ;350 ; UNALIGNED-LABEL: name: store_i32_align2351 ; UNALIGNED: liveins: $x10, $x11352 ; UNALIGNED-NEXT: {{ $}}353 ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10354 ; UNALIGNED-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11355 ; UNALIGNED-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32), align 2)356 ; UNALIGNED-NEXT: PseudoRET357 %0:_(s32) = COPY $x10358 %1:_(p0) = COPY $x11359 G_STORE %0(s32), %1(p0) :: (store (s32), align 2)360 PseudoRET361 362...363