201 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s3 4...5---6name: v2s64_split7legalized: true8tracksRegLiveness: true9body: |10 bb.1.entry:11 liveins: $x012 13 ; Split a store of <2 x i64> into two scalar stores.14 15 ; CHECK-LABEL: name: v2s64_split16 ; CHECK: liveins: $x017 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x019 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 020 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 821 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)22 ; CHECK-NEXT: G_STORE %zero(s64), [[COPY]](p0) :: (store (s64), align 16)23 ; CHECK-NEXT: G_STORE %zero(s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)24 ; CHECK-NEXT: RET_ReallyLR25 %0:_(p0) = COPY $x026 %zero:_(s64) = G_CONSTANT i64 027 %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero28 G_STORE %zerovec(<2 x s64>), %0(p0) :: (store (<2 x s64>))29 RET_ReallyLR30 31...32---33name: v4i32_split34legalized: true35tracksRegLiveness: true36body: |37 bb.1.entry:38 liveins: $x039 40 ; CHECK-LABEL: name: v4i32_split41 ; CHECK: liveins: $x042 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x044 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 045 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 846 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)47 ; CHECK-NEXT: G_STORE [[C]](s64), [[COPY]](p0) :: (store (s64), align 16)48 ; CHECK-NEXT: G_STORE [[C]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)49 ; CHECK-NEXT: RET_ReallyLR50 %0:_(p0) = COPY $x051 %zero:_(s32) = G_CONSTANT i32 052 %zerovec:_(<4 x s32>) = G_BUILD_VECTOR %zero, %zero, %zero, %zero53 G_STORE %zerovec(<4 x s32>), %0(p0) :: (store (<4 x s32>))54 RET_ReallyLR55 56...57---58name: v8i16_split59legalized: true60tracksRegLiveness: true61body: |62 bb.1.entry:63 liveins: $x064 65 ; CHECK-LABEL: name: v8i16_split66 ; CHECK: liveins: $x067 ; CHECK-NEXT: {{ $}}68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x069 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 070 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 871 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)72 ; CHECK-NEXT: G_STORE [[C]](s64), [[COPY]](p0) :: (store (s64), align 16)73 ; CHECK-NEXT: G_STORE [[C]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)74 ; CHECK-NEXT: RET_ReallyLR75 %0:_(p0) = COPY $x076 %zero:_(s16) = G_CONSTANT i16 077 %zerovec:_(<8 x s16>) = G_BUILD_VECTOR %zero, %zero, %zero, %zero, %zero, %zero, %zero, %zero78 G_STORE %zerovec(<8 x s16>), %0(p0) :: (store (<8 x s16>))79 RET_ReallyLR80 81...82 83# Negative tests84---85name: v2i32_nosplit86legalized: true87tracksRegLiveness: true88body: |89 bb.1.entry:90 liveins: $x091 92 ; CHECK-LABEL: name: v2i32_nosplit93 ; CHECK: liveins: $x094 ; CHECK-NEXT: {{ $}}95 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x096 ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 097 ; CHECK-NEXT: %zerovec:_(<2 x s32>) = G_BUILD_VECTOR %zero(s32), %zero(s32)98 ; CHECK-NEXT: G_STORE %zerovec(<2 x s32>), [[COPY]](p0) :: (store (<2 x s32>))99 ; CHECK-NEXT: RET_ReallyLR100 %0:_(p0) = COPY $x0101 %zero:_(s32) = G_CONSTANT i32 0102 %zerovec:_(<2 x s32>) = G_BUILD_VECTOR %zero, %zero103 G_STORE %zerovec(<2 x s32>), %0(p0) :: (store (<2 x s32>))104 RET_ReallyLR105 106...107---108name: multiple_uses109legalized: true110tracksRegLiveness: true111body: |112 bb.1.entry:113 liveins: $x0114 115 ; CHECK-LABEL: name: multiple_uses116 ; CHECK: liveins: $x0117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0119 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 0120 ; CHECK-NEXT: %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero(s64), %zero(s64)121 ; CHECK-NEXT: G_STORE %zerovec(<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>))122 ; CHECK-NEXT: $q0 = COPY %zerovec(<2 x s64>)123 ; CHECK-NEXT: RET_ReallyLR124 %0:_(p0) = COPY $x0125 %zero:_(s64) = G_CONSTANT i64 0126 %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero127 G_STORE %zerovec(<2 x s64>), %0(p0) :: (store (<2 x s64>))128 $q0 = COPY %zerovec129 RET_ReallyLR130 131...132---133name: truncating134legalized: true135tracksRegLiveness: true136body: |137 bb.1.entry:138 liveins: $x0139 140 ; CHECK-LABEL: name: truncating141 ; CHECK: liveins: $x0142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0144 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 0145 ; CHECK-NEXT: %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero(s64), %zero(s64)146 ; CHECK-NEXT: G_STORE %zerovec(<2 x s64>), [[COPY]](p0) :: (store (<2 x s32>))147 ; CHECK-NEXT: RET_ReallyLR148 %0:_(p0) = COPY $x0149 %zero:_(s64) = G_CONSTANT i64 0150 %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero151 G_STORE %zerovec(<2 x s64>), %0(p0) :: (store (<2 x s32>))152 RET_ReallyLR153 154...155---156name: volatile157legalized: true158tracksRegLiveness: true159body: |160 bb.1.entry:161 liveins: $x0162 163 ; CHECK-LABEL: name: volatile164 ; CHECK: liveins: $x0165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0167 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 0168 ; CHECK-NEXT: %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero(s64), %zero(s64)169 ; CHECK-NEXT: G_STORE %zerovec(<2 x s64>), [[COPY]](p0) :: (volatile store (<2 x s64>))170 ; CHECK-NEXT: RET_ReallyLR171 %0:_(p0) = COPY $x0172 %zero:_(s64) = G_CONSTANT i64 0173 %zerovec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero174 G_STORE %zerovec(<2 x s64>), %0(p0) :: (volatile store (<2 x s64>))175 RET_ReallyLR176 177...178---179name: s128_scalar180legalized: true181tracksRegLiveness: true182body: |183 bb.1.entry:184 liveins: $x0185 186 ; Split a store of <2 x i64> into two scalar stores.187 188 ; CHECK-LABEL: name: s128_scalar189 ; CHECK: liveins: $x0190 ; CHECK-NEXT: {{ $}}191 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0192 ; CHECK-NEXT: %zero:_(s128) = G_CONSTANT i128 0193 ; CHECK-NEXT: G_STORE %zero(s128), [[COPY]](p0) :: (store (s128))194 ; CHECK-NEXT: RET_ReallyLR195 %0:_(p0) = COPY $x0196 %zero:_(s128) = G_CONSTANT i128 0197 G_STORE %zero(s128), %0(p0) :: (store (s128))198 RET_ReallyLR199 200...201