Skip to content

Commit d1d0a3a

Browse files
[AIE2] Implement vshuffle instruction selection
1 parent 4c349de commit d1d0a3a

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

llvm/lib/Target/AIE/AIE2InstrPatterns.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,18 @@ def : Pat<(int_aie2_vshuffle VEC512:$s1, VEC512:$s2, eR:$mod),
597597
def : Pat<(int_aie2_vshuffle_bf16 VEC512:$s1, VEC512:$s2, eR:$mod),
598598
(VSHUFFLE VEC512:$s1, VEC512:$s2, eR:$mod)>;
599599

600+
// VSHUFFLE generic opcodes translation
601+
def vshuffle_node : SDNode<"AIE2::G_AIE_VSHUFFLE",
602+
SDTypeProfile<1, 3, [SDTCisVec<1>, SDTCisVec<2>, SDTCisInt<3>]>>;
603+
def : GINodeEquiv<G_AIE_VSHUFFLE, vshuffle_node>;
604+
605+
def : Pat<(v16i32 (vshuffle_node (v16i32 VEC512:$v0), (v16i32 VEC512:$v1), (i32 eR:$mode))),
606+
(VSHUFFLE VEC512:$v0, VEC512:$v1, i32:$mode)>;
607+
def : Pat<(v32i16 (vshuffle_node (v32i16 VEC512:$v0), (v32i16 VEC512:$v1), (i32 eR:$mode))),
608+
(VSHUFFLE VEC512:$v0, VEC512:$v1, i32:$mode)>;
609+
def : Pat<(v64i8 (vshuffle_node (v64i8 VEC512:$v0), (v64i8 VEC512:$v1), (i32 eR:$mode))),
610+
(VSHUFFLE VEC512:$v0, VEC512:$v1, i32:$mode)>;
611+
600612
// VSHIFT Intrinsic (shift/shiftx/shift_bytes)
601613
def : Pat<(int_aie2_vshift_I512_I512 VEC512:$s1, VEC512:$s2, 0x0, eR:$shift),
602614
(VSHIFT VEC512:$s1, VEC512:$s2, eR:$shift)>;
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
#
3+
# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
# See https://llvm.org/LICENSE.txt for license information.
5+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
#
7+
# (c) Copyright 2023-2024 Advanced Micro Devices, Inc. or its affiliates
8+
#
9+
# RUN: llc -mtriple aie2 -run-pass=instruction-select %s -verify-machineinstrs -o - | FileCheck %s
10+
11+
---
12+
name: vshuffle_32_m35
13+
legalized: true
14+
regBankSelected: true
15+
tracksRegLiveness: true
16+
stack:
17+
- { id: 0, name: "", size: 128, alignment: 32 }
18+
body: |
19+
bb.0.entry:
20+
liveins: $x2
21+
; CHECK-LABEL: name: vshuffle_32_m35
22+
; CHECK: liveins: $x2
23+
; CHECK-NEXT: {{ $}}
24+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vec512 = COPY $x2
25+
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 29
26+
; CHECK-NEXT: [[VSHUFFLE:%[0-9]+]]:vec512 = VSHUFFLE [[COPY]], [[COPY]], [[MOV_RLC_imm10_pseudo]]
27+
; CHECK-NEXT: $x0 = COPY [[VSHUFFLE]]
28+
; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
29+
%1:vregbank(<16 x s32>) = COPY $x2
30+
%2:gprregbank(s32) = G_CONSTANT i32 29
31+
%0:vregbank(<16 x s32>) = G_AIE_VSHUFFLE %1:vregbank, %1:vregbank, %2:gprregbank(s32)
32+
$x0 = COPY %0:vregbank(<16 x s32>)
33+
PseudoRET implicit $lr, implicit $x0
34+
...
35+
36+
---
37+
name: vshuffle_16_m35
38+
legalized: true
39+
regBankSelected: true
40+
tracksRegLiveness: true
41+
stack:
42+
- { id: 0, name: "", size: 128, alignment: 32 }
43+
body: |
44+
bb.0.entry:
45+
liveins: $x2
46+
; CHECK-LABEL: name: vshuffle_16_m35
47+
; CHECK: liveins: $x2
48+
; CHECK-NEXT: {{ $}}
49+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vec512 = COPY $x2
50+
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 29
51+
; CHECK-NEXT: [[VSHUFFLE:%[0-9]+]]:vec512 = VSHUFFLE [[COPY]], [[COPY]], [[MOV_RLC_imm10_pseudo]]
52+
; CHECK-NEXT: $x0 = COPY [[VSHUFFLE]]
53+
; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
54+
%1:vregbank(<32 x s16>) = COPY $x2
55+
%2:gprregbank(s32) = G_CONSTANT i32 29
56+
%0:vregbank(<32 x s16>) = G_AIE_VSHUFFLE %1:vregbank, %1:vregbank, %2:gprregbank(s32)
57+
$x0 = COPY %0:vregbank(<32 x s16>)
58+
PseudoRET implicit $lr, implicit $x0
59+
...
60+
61+
---
62+
name: vshuffle_8_m35
63+
legalized: true
64+
regBankSelected: true
65+
tracksRegLiveness: true
66+
stack:
67+
- { id: 0, name: "", size: 128, alignment: 32 }
68+
body: |
69+
bb.0.entry:
70+
liveins: $x2
71+
; CHECK-LABEL: name: vshuffle_8_m35
72+
; CHECK: liveins: $x2
73+
; CHECK-NEXT: {{ $}}
74+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vec512 = COPY $x2
75+
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 29
76+
; CHECK-NEXT: [[VSHUFFLE:%[0-9]+]]:vec512 = VSHUFFLE [[COPY]], [[COPY]], [[MOV_RLC_imm10_pseudo]]
77+
; CHECK-NEXT: $x0 = COPY [[VSHUFFLE]]
78+
; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
79+
%1:vregbank(<64 x s8>) = COPY $x2
80+
%2:gprregbank(s32) = G_CONSTANT i32 29
81+
%0:vregbank(<64 x s8>) = G_AIE_VSHUFFLE %1:vregbank, %1:vregbank, %2:gprregbank(s32)
82+
$x0 = COPY %0:vregbank(<64 x s8>)
83+
PseudoRET implicit $lr, implicit $x0

0 commit comments

Comments
 (0)