334 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -verify-machineinstrs %s -o - | FileCheck %s3#4# Check that we can combine a G_SHUFFLE_VECTOR into a G_EXT.5 6...7---8name: v8s8_cst39alignment: 410legalized: true11tracksRegLiveness: true12body: |13 bb.0:14 liveins: $d0, $d115 ; CHECK-LABEL: name: v8s8_cst316 ; CHECK: liveins: $d0, $d117 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: %v1:_(<8 x s8>) = COPY $d019 ; CHECK-NEXT: %v2:_(<8 x s8>) = COPY $d120 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 321 ; CHECK-NEXT: %shuf:_(<8 x s8>) = G_EXT %v1, %v2, [[C]](s32)22 ; CHECK-NEXT: $d0 = COPY %shuf(<8 x s8>)23 ; CHECK-NEXT: RET_ReallyLR implicit $d024 %v1:_(<8 x s8>) = COPY $d025 %v2:_(<8 x s8>) = COPY $d126 %shuf:_(<8 x s8>) = G_SHUFFLE_VECTOR %v1(<8 x s8>), %v2, shufflemask(3, 4, 5, 6, 7, 8, 9, 10)27 $d0 = COPY %shuf(<8 x s8>)28 RET_ReallyLR implicit $d029...30---31name: v8s8_cst532alignment: 433legalized: true34tracksRegLiveness: true35body: |36 bb.0:37 liveins: $d0, $d138 ; CHECK-LABEL: name: v8s8_cst539 ; CHECK: liveins: $d0, $d140 ; CHECK-NEXT: {{ $}}41 ; CHECK-NEXT: %v1:_(<8 x s8>) = COPY $d042 ; CHECK-NEXT: %v2:_(<8 x s8>) = COPY $d143 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 544 ; CHECK-NEXT: %shuf:_(<8 x s8>) = G_EXT %v2, %v1, [[C]](s32)45 ; CHECK-NEXT: $d0 = COPY %shuf(<8 x s8>)46 ; CHECK-NEXT: RET_ReallyLR implicit $d047 %v1:_(<8 x s8>) = COPY $d048 %v2:_(<8 x s8>) = COPY $d149 %shuf:_(<8 x s8>) = G_SHUFFLE_VECTOR %v1(<8 x s8>), %v2, shufflemask(13, 14, 15, 0, 1, 2, 3, 4)50 $d0 = COPY %shuf(<8 x s8>)51 RET_ReallyLR implicit $d052...53---54name: v16s8_cst355alignment: 456legalized: true57tracksRegLiveness: true58body: |59 bb.0:60 liveins: $q0, $q161 ; CHECK-LABEL: name: v16s8_cst362 ; CHECK: liveins: $q0, $q163 ; CHECK-NEXT: {{ $}}64 ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q065 ; CHECK-NEXT: %v2:_(<16 x s8>) = COPY $q166 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 367 ; CHECK-NEXT: %shuf:_(<16 x s8>) = G_EXT %v1, %v2, [[C]](s32)68 ; CHECK-NEXT: $q0 = COPY %shuf(<16 x s8>)69 ; CHECK-NEXT: RET_ReallyLR implicit $q070 %v1:_(<16 x s8>) = COPY $q071 %v2:_(<16 x s8>) = COPY $q172 %shuf:_(<16 x s8>) = G_SHUFFLE_VECTOR %v1(<16 x s8>), %v2, shufflemask(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)73 $q0 = COPY %shuf(<16 x s8>)74 RET_ReallyLR implicit $q075...76---77name: v16s8_cst778alignment: 479legalized: true80tracksRegLiveness: true81body: |82 bb.0:83 liveins: $q0, $q184 ; CHECK-LABEL: name: v16s8_cst785 ; CHECK: liveins: $q0, $q186 ; CHECK-NEXT: {{ $}}87 ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q088 ; CHECK-NEXT: %v2:_(<16 x s8>) = COPY $q189 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 790 ; CHECK-NEXT: %shuf:_(<16 x s8>) = G_EXT %v2, %v1, [[C]](s32)91 ; CHECK-NEXT: $q0 = COPY %shuf(<16 x s8>)92 ; CHECK-NEXT: RET_ReallyLR implicit $q093 %v1:_(<16 x s8>) = COPY $q094 %v2:_(<16 x s8>) = COPY $q195 %shuf:_(<16 x s8>) = G_SHUFFLE_VECTOR %v1(<16 x s8>), %v2, shufflemask(23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6)96 $q0 = COPY %shuf(<16 x s8>)97 RET_ReallyLR implicit $q098...99---100name: v4s16_cst6101alignment: 4102legalized: true103tracksRegLiveness: true104body: |105 bb.0:106 liveins: $d0, $d1107 ; CHECK-LABEL: name: v4s16_cst6108 ; CHECK: liveins: $d0, $d1109 ; CHECK-NEXT: {{ $}}110 ; CHECK-NEXT: %v1:_(<4 x s16>) = COPY $d0111 ; CHECK-NEXT: %v2:_(<4 x s16>) = COPY $d1112 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 6113 ; CHECK-NEXT: %shuf:_(<4 x s16>) = G_EXT %v1, %v2, [[C]](s32)114 ; CHECK-NEXT: $d0 = COPY %shuf(<4 x s16>)115 ; CHECK-NEXT: RET_ReallyLR implicit $d0116 %v1:_(<4 x s16>) = COPY $d0117 %v2:_(<4 x s16>) = COPY $d1118 %shuf:_(<4 x s16>) = G_SHUFFLE_VECTOR %v1(<4 x s16>), %v2, shufflemask(3, 4, 5, 6)119 $d0 = COPY %shuf(<4 x s16>)120 RET_ReallyLR implicit $d0121...122---123name: v4s32_cst12124alignment: 4125legalized: true126tracksRegLiveness: true127body: |128 bb.0:129 liveins: $q0, $q1130 ; CHECK-LABEL: name: v4s32_cst12131 ; CHECK: liveins: $q0, $q1132 ; CHECK-NEXT: {{ $}}133 ; CHECK-NEXT: %v1:_(<4 x s32>) = COPY $q0134 ; CHECK-NEXT: %v2:_(<4 x s32>) = COPY $q1135 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12136 ; CHECK-NEXT: %shuf:_(<4 x s32>) = G_EXT %v1, %v2, [[C]](s32)137 ; CHECK-NEXT: $q0 = COPY %shuf(<4 x s32>)138 ; CHECK-NEXT: RET_ReallyLR implicit $q0139 %v1:_(<4 x s32>) = COPY $q0140 %v2:_(<4 x s32>) = COPY $q1141 %shuf:_(<4 x s32>) = G_SHUFFLE_VECTOR %v1(<4 x s32>), %v2, shufflemask(3, 4, 5, 6)142 $q0 = COPY %shuf(<4 x s32>)143 RET_ReallyLR implicit $q0144...145---146name: undef_elts_should_match_1147alignment: 4148legalized: true149tracksRegLiveness: true150body: |151 bb.0:152 liveins: $d0, $d1153 ; Undef shuffle indices should not prevent matching G_EXT.154 ; We should get a constant 3 here.155 ; CHECK-LABEL: name: undef_elts_should_match_1156 ; CHECK: liveins: $d0, $d1157 ; CHECK-NEXT: {{ $}}158 ; CHECK-NEXT: %v1:_(<8 x s8>) = COPY $d0159 ; CHECK-NEXT: %v2:_(<8 x s8>) = COPY $d1160 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3161 ; CHECK-NEXT: %shuf:_(<8 x s8>) = G_EXT %v1, %v2, [[C]](s32)162 ; CHECK-NEXT: $d0 = COPY %shuf(<8 x s8>)163 ; CHECK-NEXT: RET_ReallyLR implicit $d0164 %v1:_(<8 x s8>) = COPY $d0165 %v2:_(<8 x s8>) = COPY $d1166 %shuf:_(<8 x s8>) = G_SHUFFLE_VECTOR %v1(<8 x s8>), %v2, shufflemask(3, -1, -1, 6, 7, 8, 9, 10)167 $d0 = COPY %shuf(<8 x s8>)168 RET_ReallyLR implicit $d0169...170---171name: undef_elts_should_match_2172alignment: 4173legalized: true174tracksRegLiveness: true175body: |176 bb.0:177 liveins: $d0, $d1178 ; Undef shuffle indices should not prevent matching G_EXT.179 ; We should get a constant 6 here.180 ; CHECK-LABEL: name: undef_elts_should_match_2181 ; CHECK: liveins: $d0, $d1182 ; CHECK-NEXT: {{ $}}183 ; CHECK-NEXT: %v1:_(<8 x s8>) = COPY $d0184 ; CHECK-NEXT: %v2:_(<8 x s8>) = COPY $d1185 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 6186 ; CHECK-NEXT: %shuf:_(<8 x s8>) = G_EXT %v2, %v1, [[C]](s32)187 ; CHECK-NEXT: $d0 = COPY %shuf(<8 x s8>)188 ; CHECK-NEXT: RET_ReallyLR implicit $d0189 %v1:_(<8 x s8>) = COPY $d0190 %v2:_(<8 x s8>) = COPY $d1191 %shuf:_(<8 x s8>) = G_SHUFFLE_VECTOR %v1(<8 x s8>), %v2, shufflemask(-1, -1, -1, -1, 2, 3, 4, 5)192 $d0 = COPY %shuf(<8 x s8>)193 RET_ReallyLR implicit $d0194...195---196name: undef_elts_should_match_3197alignment: 4198legalized: true199tracksRegLiveness: true200body: |201 bb.0:202 liveins: $q0, $q1203 ; Undef shuffle indices should not prevent matching G_EXT.204 ; We should get a constant 7 here.205 ; CHECK-LABEL: name: undef_elts_should_match_3206 ; CHECK: liveins: $q0, $q1207 ; CHECK-NEXT: {{ $}}208 ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q0209 ; CHECK-NEXT: %v2:_(<16 x s8>) = COPY $q1210 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7211 ; CHECK-NEXT: %shuf:_(<16 x s8>) = G_EXT %v2, %v1, [[C]](s32)212 ; CHECK-NEXT: $q0 = COPY %shuf(<16 x s8>)213 ; CHECK-NEXT: RET_ReallyLR implicit $q0214 %v1:_(<16 x s8>) = COPY $q0215 %v2:_(<16 x s8>) = COPY $q1216 %shuf:_(<16 x s8>) = G_SHUFFLE_VECTOR %v1(<16 x s8>), %v2, shufflemask(23, 24, 25, 26, -1, -1, 29, 30, 31, 0, 1, 2, 3, 4, -1, 6)217 $q0 = COPY %shuf(<16 x s8>)218 RET_ReallyLR implicit $q0219...220---221name: undef_elts_should_match_4222alignment: 4223legalized: true224tracksRegLiveness: true225body: |226 bb.0:227 liveins: $q0, $q1228 ; Undef shuffle indices should not prevent matching G_EXT.229 ; We should get a constant 10 here.230 ; CHECK-LABEL: name: undef_elts_should_match_4231 ; CHECK: liveins: $q0, $q1232 ; CHECK-NEXT: {{ $}}233 ; CHECK-NEXT: %v1:_(<8 x s16>) = COPY $q0234 ; CHECK-NEXT: %v2:_(<8 x s16>) = COPY $q1235 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10236 ; CHECK-NEXT: %shuf:_(<8 x s16>) = G_EXT %v2, %v1, [[C]](s32)237 ; CHECK-NEXT: $q0 = COPY %shuf(<8 x s16>)238 ; CHECK-NEXT: RET_ReallyLR implicit $q0239 %v1:_(<8 x s16>) = COPY $q0240 %v2:_(<8 x s16>) = COPY $q1241 %shuf:_(<8 x s16>) = G_SHUFFLE_VECTOR %v1(<8 x s16>), %v2, shufflemask(-1, -1, -1, -1, 1, 2, 3, 4)242 $q0 = COPY %shuf(<8 x s16>)243 RET_ReallyLR implicit $q0244...245---246name: all_undef247alignment: 4248legalized: true249tracksRegLiveness: true250body: |251 bb.0:252 liveins: $q0, $q1253 ; We expect at least one defined element in the shuffle mask.254 ; CHECK-LABEL: name: all_undef255 ; CHECK: liveins: $q0, $q1256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: %v1:_(<8 x s16>) = COPY $q0258 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0259 ; CHECK-NEXT: %shuf:_(<8 x s16>) = G_DUPLANE16 %v1, [[C]](s64)260 ; CHECK-NEXT: $q0 = COPY %shuf(<8 x s16>)261 ; CHECK-NEXT: RET_ReallyLR implicit $q0262 %v1:_(<8 x s16>) = COPY $q0263 %v2:_(<8 x s16>) = COPY $q1264 %shuf:_(<8 x s16>) = G_SHUFFLE_VECTOR %v1(<8 x s16>), %v2, shufflemask(-1, -1, -1, -1, -1, -1, -1, -1)265 $q0 = COPY %shuf(<8 x s16>)266 RET_ReallyLR implicit $q0267...268---269name: v2s64_singleton_ext270alignment: 4271legalized: true272tracksRegLiveness: true273body: |274 bb.0:275 liveins: $q0276 ; CHECK-LABEL: name: v2s64_singleton_ext277 ; CHECK: liveins: $q0278 ; CHECK-NEXT: {{ $}}279 ; CHECK-NEXT: %v1:_(<2 x s64>) = COPY $q0280 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8281 ; CHECK-NEXT: %shuf:_(<2 x s64>) = G_EXT %v1, %v1, [[C]](s32)282 ; CHECK-NEXT: $q0 = COPY %shuf(<2 x s64>)283 ; CHECK-NEXT: RET_ReallyLR implicit $q0284 %v1:_(<2 x s64>) = COPY $q0285 %v2:_(<2 x s64>) = G_IMPLICIT_DEF286 %shuf:_(<2 x s64>) = G_SHUFFLE_VECTOR %v1(<2 x s64>), %v2, shufflemask(1, 0)287 $q0 = COPY %shuf(<2 x s64>)288 RET_ReallyLR implicit $q0289...290---291name: v2s64_singleton_ext_all_undef292alignment: 4293legalized: true294tracksRegLiveness: true295body: |296 bb.0:297 liveins: $q0298 ; CHECK-LABEL: name: v2s64_singleton_ext_all_undef299 ; CHECK: liveins: $q0300 ; CHECK-NEXT: {{ $}}301 ; CHECK-NEXT: %v1:_(<2 x s64>) = COPY $q0302 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0303 ; CHECK-NEXT: %shuf:_(<2 x s64>) = G_DUPLANE64 %v1, [[C]](s64)304 ; CHECK-NEXT: $q0 = COPY %shuf(<2 x s64>)305 ; CHECK-NEXT: RET_ReallyLR implicit $q0306 %v1:_(<2 x s64>) = COPY $q0307 %v2:_(<2 x s64>) = G_IMPLICIT_DEF308 %shuf:_(<2 x s64>) = G_SHUFFLE_VECTOR %v1(<2 x s64>), %v2, shufflemask(undef, undef)309 $q0 = COPY %shuf(<2 x s64>)310 RET_ReallyLR implicit $q0311...312---313name: v2s64_singleton_ext_same314alignment: 4315legalized: true316tracksRegLiveness: true317body: |318 bb.0:319 liveins: $q0320 ; CHECK-LABEL: name: v2s64_singleton_ext_same321 ; CHECK: liveins: $q0322 ; CHECK-NEXT: {{ $}}323 ; CHECK-NEXT: %v1:_(<2 x s64>) = COPY $q0324 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1325 ; CHECK-NEXT: %shuf:_(<2 x s64>) = G_DUPLANE64 %v1, [[C]](s64)326 ; CHECK-NEXT: $q0 = COPY %shuf(<2 x s64>)327 ; CHECK-NEXT: RET_ReallyLR implicit $q0328 %v1:_(<2 x s64>) = COPY $q0329 %v2:_(<2 x s64>) = G_IMPLICIT_DEF330 %shuf:_(<2 x s64>) = G_SHUFFLE_VECTOR %v1(<2 x s64>), %v2, shufflemask(1, 1)331 $q0 = COPY %shuf(<2 x s64>)332 RET_ReallyLR implicit $q0333...334