86 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# Test producing a G_REV from an appropriate G_SHUFFLE_VECTOR.5 6...7---8name: rev64_mask_1_09alignment: 410legalized: true11tracksRegLiveness: true12body: |13 bb.1.entry:14 liveins: $d0, $d115 ; CHECK-LABEL: name: rev64_mask_1_016 ; CHECK: liveins: $d0, $d117 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d019 ; CHECK-NEXT: [[REV64_:%[0-9]+]]:_(<2 x s32>) = G_REV64 [[COPY]]20 ; CHECK-NEXT: $d0 = COPY [[REV64_]](<2 x s32>)21 ; CHECK-NEXT: RET_ReallyLR implicit $d022 %0:_(<2 x s32>) = COPY $d023 %1:_(<2 x s32>) = COPY $d124 %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(1, 0)25 $d0 = COPY %2(<2 x s32>)26 RET_ReallyLR implicit $d027 28...29---30name: rev64_mask_1_undef31alignment: 432legalized: true33tracksRegLiveness: true34body: |35 bb.1.entry:36 liveins: $d0, $d137 ; CHECK-LABEL: name: rev64_mask_1_undef38 ; CHECK: liveins: $d0, $d139 ; CHECK-NEXT: {{ $}}40 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d041 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 142 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF43 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[DEF]](<2 x s32>)44 ; CHECK-NEXT: [[DUPLANE32_:%[0-9]+]]:_(<2 x s32>) = G_DUPLANE32 [[CONCAT_VECTORS]], [[C]](s64)45 ; CHECK-NEXT: $d0 = COPY [[DUPLANE32_]](<2 x s32>)46 ; CHECK-NEXT: RET_ReallyLR implicit $d047 %0:_(<2 x s32>) = COPY $d048 %1:_(<2 x s32>) = COPY $d149 %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(1, undef)50 $d0 = COPY %2(<2 x s32>)51 RET_ReallyLR implicit $d052 53...54---55name: no_rev64_mask_156alignment: 457legalized: true58tracksRegLiveness: true59body: |60 bb.1.entry:61 liveins: $d0, $d162 63 ; Verify that we don't produce a G_REV64 when64 ; M[i] != (i - i % BlockElts) + (BlockElts - 1 - i % BlockElts)65 ; In this example, BlockElts = 266 ; At i = 167 ; M[i] = 368 ; i % BlockElts = i % 2 = 169 ; So70 ; 3 != (1 - 1) + (2 - 1 - 1)71 ; 3 != 072 ; And so we should not produce a G_REV64.73 ; CHECK-LABEL: name: no_rev64_mask_174 ; CHECK: liveins: $d0, $d175 ; CHECK-NEXT: {{ $}}76 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d077 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d178 ; CHECK-NEXT: [[ZIP2_:%[0-9]+]]:_(<2 x s32>) = G_ZIP2 [[COPY]], [[COPY1]]79 ; CHECK-NEXT: $d0 = COPY [[ZIP2_]](<2 x s32>)80 ; CHECK-NEXT: RET_ReallyLR implicit $d081 %0:_(<2 x s32>) = COPY $d082 %1:_(<2 x s32>) = COPY $d183 %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(1, 3)84 $d0 = COPY %2(<2 x s32>)85 RET_ReallyLR implicit $d086