brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 2fc90e4 Raw
228 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 zip instruction, and produce4# G_ZIP1 or G_ZIP2 where appropriate.5#6# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -verify-machineinstrs %s -o - | FileCheck %s7 8...9---10name:            zip1_v2s3211alignment:       412legalized:       true13tracksRegLiveness: true14body:             |15  bb.1.entry:16    liveins: $d0, $d117 18    ; CHECK-LABEL: name: zip1_v2s3219    ; CHECK: liveins: $d0, $d120    ; CHECK-NEXT: {{  $}}21    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d022    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d123    ; CHECK-NEXT: [[ZIP1_:%[0-9]+]]:_(<2 x s32>) = G_ZIP1 [[COPY]], [[COPY1]]24    ; CHECK-NEXT: $d0 = COPY [[ZIP1_]](<2 x s32>)25    ; CHECK-NEXT: RET_ReallyLR implicit $d026    %0:_(<2 x s32>) = COPY $d027    %1:_(<2 x s32>) = COPY $d128    %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(0, 2)29    $d0 = COPY %2(<2 x s32>)30    RET_ReallyLR implicit $d031 32...33---34name:            zip1_v2s6435alignment:       436legalized:       true37tracksRegLiveness: true38body:             |39  bb.1.entry:40    liveins: $q0, $q141 42    ; CHECK-LABEL: name: zip1_v2s6443    ; CHECK: liveins: $q0, $q144    ; CHECK-NEXT: {{  $}}45    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q046    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q147    ; CHECK-NEXT: [[ZIP1_:%[0-9]+]]:_(<2 x s64>) = G_ZIP1 [[COPY]], [[COPY1]]48    ; CHECK-NEXT: $q0 = COPY [[ZIP1_]](<2 x s64>)49    ; CHECK-NEXT: RET_ReallyLR implicit $q050    %0:_(<2 x s64>) = COPY $q051    %1:_(<2 x s64>) = COPY $q152    %2:_(<2 x s64>) = G_SHUFFLE_VECTOR %0(<2 x s64>), %1, shufflemask(0, 2)53    $q0 = COPY %2(<2 x s64>)54    RET_ReallyLR implicit $q055 56...57---58name:            zip1_v4s3259alignment:       460legalized:       true61tracksRegLiveness: true62body:             |63  bb.1.entry:64    liveins: $q0, $q165 66    ; CHECK-LABEL: name: zip1_v4s3267    ; CHECK: liveins: $q0, $q168    ; CHECK-NEXT: {{  $}}69    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q070    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q171    ; CHECK-NEXT: [[ZIP1_:%[0-9]+]]:_(<4 x s32>) = G_ZIP1 [[COPY]], [[COPY1]]72    ; CHECK-NEXT: $q0 = COPY [[ZIP1_]](<4 x s32>)73    ; CHECK-NEXT: RET_ReallyLR implicit $q074    %0:_(<4 x s32>) = COPY $q075    %1:_(<4 x s32>) = COPY $q176    %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 4, 1, 5)77    $q0 = COPY %2(<4 x s32>)78    RET_ReallyLR implicit $q079 80...81---82name:            zip2_v2s3283alignment:       484legalized:       true85tracksRegLiveness: true86body:             |87  bb.1.entry:88    liveins: $d0, $d189 90    ; CHECK-LABEL: name: zip2_v2s3291    ; CHECK: liveins: $d0, $d192    ; CHECK-NEXT: {{  $}}93    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d094    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d195    ; CHECK-NEXT: [[ZIP2_:%[0-9]+]]:_(<2 x s32>) = G_ZIP2 [[COPY]], [[COPY1]]96    ; CHECK-NEXT: $d0 = COPY [[ZIP2_]](<2 x s32>)97    ; CHECK-NEXT: RET_ReallyLR implicit $d098    %0:_(<2 x s32>) = COPY $d099    %1:_(<2 x s32>) = COPY $d1100    %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(1, 3)101    $d0 = COPY %2(<2 x s32>)102    RET_ReallyLR implicit $d0103 104...105---106name:            zip2_v2s64107alignment:       4108legalized:       true109tracksRegLiveness: true110body:             |111  bb.1.entry:112    liveins: $q0, $q1113 114    ; CHECK-LABEL: name: zip2_v2s64115    ; CHECK: liveins: $q0, $q1116    ; CHECK-NEXT: {{  $}}117    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0118    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1119    ; CHECK-NEXT: [[ZIP2_:%[0-9]+]]:_(<2 x s64>) = G_ZIP2 [[COPY]], [[COPY1]]120    ; CHECK-NEXT: $q0 = COPY [[ZIP2_]](<2 x s64>)121    ; CHECK-NEXT: RET_ReallyLR implicit $q0122    %0:_(<2 x s64>) = COPY $q0123    %1:_(<2 x s64>) = COPY $q1124    %2:_(<2 x s64>) = G_SHUFFLE_VECTOR %0(<2 x s64>), %1, shufflemask(1, 3)125    $q0 = COPY %2(<2 x s64>)126    RET_ReallyLR implicit $q0127 128...129---130name:            zip2_v4s32131alignment:       4132legalized:       true133tracksRegLiveness: true134body:             |135  bb.1.entry:136    liveins: $q0, $q1137 138    ; CHECK-LABEL: name: zip2_v4s32139    ; CHECK: liveins: $q0, $q1140    ; CHECK-NEXT: {{  $}}141    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0142    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1143    ; CHECK-NEXT: [[ZIP2_:%[0-9]+]]:_(<4 x s32>) = G_ZIP2 [[COPY]], [[COPY1]]144    ; CHECK-NEXT: $q0 = COPY [[ZIP2_]](<4 x s32>)145    ; CHECK-NEXT: RET_ReallyLR implicit $q0146    %0:_(<4 x s32>) = COPY $q0147    %1:_(<4 x s32>) = COPY $q1148    %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(2, 6, 3, 7)149    $q0 = COPY %2(<4 x s32>)150    RET_ReallyLR implicit $q0151 152...153---154name:            zip2_no_combine_idx_mismatch155alignment:       4156legalized:       true157tracksRegLiveness: true158body:             |159  bb.1.entry:160    liveins: $q0, $q1161 162    ; This will fail because it expects 3 to be the second element of the163    ; shuffle vector mask.164    ; CHECK-LABEL: name: zip2_no_combine_idx_mismatch165    ; CHECK: liveins: $q0, $q1166    ; CHECK-NEXT: {{  $}}167    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0168    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1169    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8170    ; CHECK-NEXT: [[EXT:%[0-9]+]]:_(<2 x s64>) = G_EXT [[COPY]], [[COPY1]], [[C]](s32)171    ; CHECK-NEXT: $q0 = COPY [[EXT]](<2 x s64>)172    ; CHECK-NEXT: RET_ReallyLR implicit $q0173    %0:_(<2 x s64>) = COPY $q0174    %1:_(<2 x s64>) = COPY $q1175    %2:_(<2 x s64>) = G_SHUFFLE_VECTOR %0(<2 x s64>), %1, shufflemask(1, 2)176    $q0 = COPY %2(<2 x s64>)177    RET_ReallyLR implicit $q0178 179...180---181name:            zip1_no_combine_idx_mismatch182alignment:       4183legalized:       true184tracksRegLiveness: true185body:             |186  bb.1.entry:187    liveins: $q0, $q1188 189    ; This will fail because it expects 2 to be the second element of the190    ; shuffle vector mask.191    ; CHECK-LABEL: name: zip1_no_combine_idx_mismatch192    ; CHECK: liveins: $q0, $q1193    ; CHECK-NEXT: {{  $}}194    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0195    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[COPY]](<2 x s64>)196    ; CHECK-NEXT: $q0 = COPY [[COPY1]](<2 x s64>)197    ; CHECK-NEXT: RET_ReallyLR implicit $q0198    %0:_(<2 x s64>) = COPY $q0199    %1:_(<2 x s64>) = COPY $q1200    %2:_(<2 x s64>) = G_SHUFFLE_VECTOR %0(<2 x s64>), %1, shufflemask(0, 1)201    $q0 = COPY %2(<2 x s64>)202    RET_ReallyLR implicit $q0203 204...205---206name:            no_combine_first_elt_of_mask_must_be_zero_or_one207alignment:       4208legalized:       true209tracksRegLiveness: true210body:             |211  bb.1.entry:212    liveins: $q0, $q1213 214    ; zip1/zip2 must have 0 or 1 as the first element in the shuffle mask.215    ; CHECK-LABEL: name: no_combine_first_elt_of_mask_must_be_zero_or_one216    ; CHECK: liveins: $q0, $q1217    ; CHECK-NEXT: {{  $}}218    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0219    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1220    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(3, 4, 1, 5)221    ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)222    ; CHECK-NEXT: RET_ReallyLR implicit $q0223    %0:_(<4 x s32>) = COPY $q0224    %1:_(<4 x s32>) = COPY $q1225    %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(3, 4, 1, 5)226    $q0 = COPY %2(<4 x s32>)227    RET_ReallyLR implicit $q0228