241 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 produce G_TRN1 or G_TRN2 when we have an appropriate shuffle5# mask.6#7 8...9---10name: trn1_v8s811alignment: 412legalized: true13tracksRegLiveness: true14body: |15 bb.1.entry:16 liveins: $d0, $d117 ; CHECK-LABEL: name: trn1_v8s818 ; CHECK: liveins: $d0, $d119 ; CHECK-NEXT: {{ $}}20 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d021 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d122 ; CHECK-NEXT: [[TRN1_:%[0-9]+]]:_(<8 x s8>) = G_TRN1 [[COPY]], [[COPY1]]23 ; CHECK-NEXT: $d0 = COPY [[TRN1_]](<8 x s8>)24 ; CHECK-NEXT: RET_ReallyLR implicit $q025 %0:_(<8 x s8>) = COPY $d026 %1:_(<8 x s8>) = COPY $d127 %2:_(<8 x s8>) = G_SHUFFLE_VECTOR %0(<8 x s8>), %1, shufflemask(0, 8, 2, 10, 4, 12, 6, 14)28 $d0 = COPY %2(<8 x s8>)29 RET_ReallyLR implicit $q030 31...32---33name: trn2_v8s834alignment: 435legalized: true36tracksRegLiveness: true37body: |38 bb.1.entry:39 liveins: $d0, $d140 ; CHECK-LABEL: name: trn2_v8s841 ; CHECK: liveins: $d0, $d142 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d044 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d145 ; CHECK-NEXT: [[TRN2_:%[0-9]+]]:_(<8 x s8>) = G_TRN2 [[COPY]], [[COPY1]]46 ; CHECK-NEXT: $d0 = COPY [[TRN2_]](<8 x s8>)47 ; CHECK-NEXT: RET_ReallyLR implicit $q048 %0:_(<8 x s8>) = COPY $d049 %1:_(<8 x s8>) = COPY $d150 %2:_(<8 x s8>) = G_SHUFFLE_VECTOR %0(<8 x s8>), %1, shufflemask(1, 9, 3, 11, 5, 13, 7, 15)51 $d0 = COPY %2(<8 x s8>)52 RET_ReallyLR implicit $q053 54...55---56name: trn1_v16s857alignment: 458legalized: true59tracksRegLiveness: true60body: |61 bb.1.entry:62 liveins: $q0, $q163 ; CHECK-LABEL: name: trn1_v16s864 ; CHECK: liveins: $q0, $q165 ; CHECK-NEXT: {{ $}}66 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q067 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q168 ; CHECK-NEXT: [[TRN1_:%[0-9]+]]:_(<16 x s8>) = G_TRN1 [[COPY]], [[COPY1]]69 ; CHECK-NEXT: $q0 = COPY [[TRN1_]](<16 x s8>)70 ; CHECK-NEXT: RET_ReallyLR implicit $q071 %0:_(<16 x s8>) = COPY $q072 %1:_(<16 x s8>) = COPY $q173 %2:_(<16 x s8>) = G_SHUFFLE_VECTOR %0(<16 x s8>), %1, shufflemask(0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30)74 $q0 = COPY %2(<16 x s8>)75 RET_ReallyLR implicit $q076 77...78---79name: trn2_v16s880alignment: 481legalized: true82tracksRegLiveness: true83body: |84 bb.1.entry:85 liveins: $q0, $q186 ; CHECK-LABEL: name: trn2_v16s887 ; CHECK: liveins: $q0, $q188 ; CHECK-NEXT: {{ $}}89 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q090 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q191 ; CHECK-NEXT: [[TRN2_:%[0-9]+]]:_(<16 x s8>) = G_TRN2 [[COPY]], [[COPY1]]92 ; CHECK-NEXT: $q0 = COPY [[TRN2_]](<16 x s8>)93 ; CHECK-NEXT: RET_ReallyLR implicit $q094 %0:_(<16 x s8>) = COPY $q095 %1:_(<16 x s8>) = COPY $q196 %2:_(<16 x s8>) = G_SHUFFLE_VECTOR %0(<16 x s8>), %1, shufflemask(1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31)97 $q0 = COPY %2(<16 x s8>)98 RET_ReallyLR implicit $q099 100...101---102name: trn1_v4s32103alignment: 4104legalized: true105tracksRegLiveness: true106body: |107 bb.1.entry:108 liveins: $q0, $q1109 ; CHECK-LABEL: name: trn1_v4s32110 ; CHECK: liveins: $q0, $q1111 ; CHECK-NEXT: {{ $}}112 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0113 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1114 ; CHECK-NEXT: [[TRN1_:%[0-9]+]]:_(<4 x s32>) = G_TRN1 [[COPY]], [[COPY1]]115 ; CHECK-NEXT: $q0 = COPY [[TRN1_]](<4 x s32>)116 ; CHECK-NEXT: RET_ReallyLR implicit $q0117 %0:_(<4 x s32>) = COPY $q0118 %1:_(<4 x s32>) = COPY $q1119 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 4, 2, 6)120 $q0 = COPY %2(<4 x s32>)121 RET_ReallyLR implicit $q0122 123...124---125name: trn2_v4s32126alignment: 4127legalized: true128tracksRegLiveness: true129body: |130 bb.1.entry:131 liveins: $q0, $q1132 ; CHECK-LABEL: name: trn2_v4s32133 ; CHECK: liveins: $q0, $q1134 ; CHECK-NEXT: {{ $}}135 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0136 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1137 ; CHECK-NEXT: [[TRN2_:%[0-9]+]]:_(<4 x s32>) = G_TRN2 [[COPY]], [[COPY1]]138 ; CHECK-NEXT: $q0 = COPY [[TRN2_]](<4 x s32>)139 ; CHECK-NEXT: RET_ReallyLR implicit $q0140 %0:_(<4 x s32>) = COPY $q0141 %1:_(<4 x s32>) = COPY $q1142 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 5, 3, 7)143 $q0 = COPY %2(<4 x s32>)144 RET_ReallyLR implicit $q0145 146...147---148name: redundant_with_zip1149alignment: 4150legalized: true151tracksRegLiveness: true152body: |153 bb.1.entry:154 liveins: $d0, $d1155 ; 2 x s32 TRN is redundant with ZIP. Make sure we prioritize ZIP.156 ; CHECK-LABEL: name: redundant_with_zip1157 ; CHECK: liveins: $d0, $d1158 ; CHECK-NEXT: {{ $}}159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0160 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1161 ; CHECK-NEXT: [[ZIP1_:%[0-9]+]]:_(<2 x s32>) = G_ZIP1 [[COPY]], [[COPY1]]162 ; CHECK-NEXT: $d0 = COPY [[ZIP1_]](<2 x s32>)163 ; CHECK-NEXT: RET_ReallyLR implicit $d0164 %0:_(<2 x s32>) = COPY $d0165 %1:_(<2 x s32>) = COPY $d1166 %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(0, 2)167 $d0 = COPY %2(<2 x s32>)168 RET_ReallyLR implicit $d0169 170...171---172name: redundant_with_zip2173alignment: 4174legalized: true175tracksRegLiveness: true176body: |177 bb.1.entry:178 liveins: $d0, $d1179 ; 2 x s32 TRN is redundant with ZIP. Make sure we prioritize ZIP.180 ; CHECK-LABEL: name: redundant_with_zip2181 ; CHECK: liveins: $d0, $d1182 ; CHECK-NEXT: {{ $}}183 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0184 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1185 ; CHECK-NEXT: [[ZIP2_:%[0-9]+]]:_(<2 x s32>) = G_ZIP2 [[COPY]], [[COPY1]]186 ; CHECK-NEXT: $d0 = COPY [[ZIP2_]](<2 x s32>)187 ; CHECK-NEXT: RET_ReallyLR implicit $d0188 %0:_(<2 x s32>) = COPY $d0189 %1:_(<2 x s32>) = COPY $d1190 %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(1, 3)191 $d0 = COPY %2(<2 x s32>)192 RET_ReallyLR implicit $d0193 194...195---196name: trn1_undef197alignment: 4198legalized: true199tracksRegLiveness: true200body: |201 bb.1.entry:202 liveins: $d0, $d1203 ; Undef shuffle indices should not prevent matching to G_TRN1.204 ; CHECK-LABEL: name: trn1_undef205 ; CHECK: liveins: $d0, $d1206 ; CHECK-NEXT: {{ $}}207 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0208 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1209 ; CHECK-NEXT: [[TRN1_:%[0-9]+]]:_(<8 x s8>) = G_TRN1 [[COPY]], [[COPY1]]210 ; CHECK-NEXT: $d0 = COPY [[TRN1_]](<8 x s8>)211 ; CHECK-NEXT: RET_ReallyLR implicit $d0212 %0:_(<8 x s8>) = COPY $d0213 %1:_(<8 x s8>) = COPY $d1214 %2:_(<8 x s8>) = G_SHUFFLE_VECTOR %0(<8 x s8>), %1, shufflemask(0, 8, -1, -1, 4, 12, 6, 14)215 $d0 = COPY %2(<8 x s8>)216 RET_ReallyLR implicit $d0217 218...219---220name: trn2_undef221alignment: 4222legalized: true223tracksRegLiveness: true224body: |225 bb.1.entry:226 liveins: $d0, $d1227 ; Undef shuffle indices should not prevent matching to G_TRN2.228 ; CHECK-LABEL: name: trn2_undef229 ; CHECK: liveins: $d0, $d1230 ; CHECK-NEXT: {{ $}}231 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0232 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1233 ; CHECK-NEXT: [[TRN2_:%[0-9]+]]:_(<8 x s8>) = G_TRN2 [[COPY]], [[COPY1]]234 ; CHECK-NEXT: $d0 = COPY [[TRN2_]](<8 x s8>)235 ; CHECK-NEXT: RET_ReallyLR implicit $d0236 %0:_(<8 x s8>) = COPY $d0237 %1:_(<8 x s8>) = COPY $d1238 %2:_(<8 x s8>) = G_SHUFFLE_VECTOR %0(<8 x s8>), %1, shufflemask(1, -1, 3, 11, 5, 13, -1, -1)239 $d0 = COPY %2(<8 x s8>)240 RET_ReallyLR implicit $d0241