153 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2#3# Check that we can recognize a shuffle mask for a uzp instruction and produce4# a G_UZP1 or G_UZP2 where appropriate.5#6# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -verify-machineinstrs %s -o - | FileCheck %s7 8...9---10name: uzp1_v4s3211legalized: true12tracksRegLiveness: true13body: |14 bb.1.entry:15 liveins: $q0, $q116 17 ; CHECK-LABEL: name: uzp1_v4s3218 ; CHECK: liveins: $q0, $q119 ; CHECK-NEXT: {{ $}}20 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q021 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q122 ; CHECK-NEXT: [[UZP1_:%[0-9]+]]:_(<4 x s32>) = G_UZP1 [[COPY]], [[COPY1]]23 ; CHECK-NEXT: $q0 = COPY [[UZP1_]](<4 x s32>)24 ; CHECK-NEXT: RET_ReallyLR implicit $q025 %0:_(<4 x s32>) = COPY $q026 %1:_(<4 x s32>) = COPY $q127 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 2, 4, 6)28 $q0 = COPY %2(<4 x s32>)29 RET_ReallyLR implicit $q030 31...32---33name: uzp2_v4s3234legalized: true35tracksRegLiveness: true36body: |37 bb.1.entry:38 liveins: $q0, $q139 40 ; CHECK-LABEL: name: uzp2_v4s3241 ; CHECK: liveins: $q0, $q142 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q044 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q145 ; CHECK-NEXT: [[UZP2_:%[0-9]+]]:_(<4 x s32>) = G_UZP2 [[COPY]], [[COPY1]]46 ; CHECK-NEXT: $q0 = COPY [[UZP2_]](<4 x s32>)47 ; CHECK-NEXT: RET_ReallyLR implicit $q048 %0:_(<4 x s32>) = COPY $q049 %1:_(<4 x s32>) = COPY $q150 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 3, 5, 7)51 $q0 = COPY %2(<4 x s32>)52 RET_ReallyLR implicit $q053 54...55---56name: no_uzp157legalized: true58tracksRegLiveness: true59body: |60 bb.1.entry:61 liveins: $q0, $q162 63 ; See isUZPMask: Mask[1] != 2 * i + 064 65 ; CHECK-LABEL: name: no_uzp166 ; CHECK: liveins: $q0, $q167 ; CHECK-NEXT: {{ $}}68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q069 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q170 ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(0, 1, 4, 6)71 ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)72 ; CHECK-NEXT: RET_ReallyLR implicit $q073 %0:_(<4 x s32>) = COPY $q074 %1:_(<4 x s32>) = COPY $q175 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 1, 4, 6)76 $q0 = COPY %2(<4 x s32>)77 RET_ReallyLR implicit $q078 79...80---81name: no_uzp282legalized: true83tracksRegLiveness: true84body: |85 bb.1.entry:86 liveins: $q0, $q187 88 ; See isUZPMask: Mask[1] != 2 * i + 189 90 ; CHECK-LABEL: name: no_uzp291 ; CHECK: liveins: $q0, $q192 ; CHECK-NEXT: {{ $}}93 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q094 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q195 ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(1, 4, 5, 7)96 ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)97 ; CHECK-NEXT: RET_ReallyLR implicit $q098 %0:_(<4 x s32>) = COPY $q099 %1:_(<4 x s32>) = COPY $q1100 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 4, 5, 7)101 $q0 = COPY %2(<4 x s32>)102 RET_ReallyLR implicit $q0103 104...105---106name: uzp1_undef107legalized: true108tracksRegLiveness: true109body: |110 bb.1.entry:111 liveins: $q0, $q1112 113 ; Make sure that we can still produce a uzp1/uzp2 with undef indices.114 115 ; CHECK-LABEL: name: uzp1_undef116 ; CHECK: liveins: $q0, $q1117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0119 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1120 ; CHECK-NEXT: [[UZP1_:%[0-9]+]]:_(<4 x s32>) = G_UZP1 [[COPY]], [[COPY1]]121 ; CHECK-NEXT: $q0 = COPY [[UZP1_]](<4 x s32>)122 ; CHECK-NEXT: RET_ReallyLR implicit $q0123 %0:_(<4 x s32>) = COPY $q0124 %1:_(<4 x s32>) = COPY $q1125 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, -1, 4, 6)126 $q0 = COPY %2(<4 x s32>)127 RET_ReallyLR implicit $q0128 129...130---131name: uzp2_undef132legalized: true133tracksRegLiveness: true134body: |135 bb.1.entry:136 liveins: $q0, $q1137 138 ; Make sure that we can still produce a uzp1/uzp2 with undef indices.139 140 ; CHECK-LABEL: name: uzp2_undef141 ; CHECK: liveins: $q0, $q1142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0144 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1145 ; CHECK-NEXT: [[UZP2_:%[0-9]+]]:_(<4 x s32>) = G_UZP2 [[COPY]], [[COPY1]]146 ; CHECK-NEXT: $q0 = COPY [[UZP2_]](<4 x s32>)147 ; CHECK-NEXT: RET_ReallyLR implicit $q0148 %0:_(<4 x s32>) = COPY $q0149 %1:_(<4 x s32>) = COPY $q1150 %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 3, -1, 7)151 $q0 = COPY %2(<4 x s32>)152 RET_ReallyLR implicit $q0153