Skip to content

Commit 594380a

Browse files
mallick-qcfhossein-quic
authored andcommitted
[Hexagon] Custom lower v128 bf16 vectors
Adds custom load/store and masked/vector-building lowering for v128bf16, updates HVX patterns to use the proper VecPBF16 leaf. Patch By: Fateme Hosseini Co-authored-by: Muntasir Mallick <[email protected]>
1 parent ac56d6e commit 594380a

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,19 @@ HexagonTargetLowering::initializeHVXLowering() {
184184
setOperationAction(ISD::INSERT_SUBVECTOR, MVT::v64bf16, Custom);
185185
setOperationAction(ISD::EXTRACT_SUBVECTOR, MVT::v64bf16, Custom);
186186

187+
setOperationAction(ISD::LOAD, MVT::v128bf16, Custom);
188+
setOperationAction(ISD::STORE, MVT::v128bf16, Custom);
189+
187190
setOperationAction(ISD::MLOAD, MVT::v64bf16, Custom);
188191
setOperationAction(ISD::MSTORE, MVT::v64bf16, Custom);
189192
setOperationAction(ISD::BUILD_VECTOR, MVT::v64bf16, Custom);
190193
setOperationAction(ISD::CONCAT_VECTORS, MVT::v64bf16, Custom);
191194

195+
setOperationAction(ISD::MLOAD, MVT::v128bf16, Custom);
196+
setOperationAction(ISD::MSTORE, MVT::v128bf16, Custom);
197+
setOperationAction(ISD::BUILD_VECTOR, MVT::v128bf16, Custom);
198+
setOperationAction(ISD::CONCAT_VECTORS, MVT::v128bf16, Custom);
199+
192200
setOperationAction(ISD::SPLAT_VECTOR, MVT::bf16, Custom);
193201
setOperationAction(ISD::INSERT_VECTOR_ELT, MVT::bf16, Custom);
194202
setOperationAction(ISD::BUILD_VECTOR, MVT::bf16, Custom);

llvm/lib/Target/Hexagon/HexagonPatternsHVX.td

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def HWI16: PatLeaf<(VecPI16 HvxWR:$R)>;
2222
def HWI32: PatLeaf<(VecPI32 HvxWR:$R)>;
2323
def HWF16: PatLeaf<(VecPF16 HvxWR:$R)>;
2424
def HWF32: PatLeaf<(VecPF32 HvxWR:$R)>;
25-
def HWBF16: PatLeaf<(VecBF16 HvxWR:$R)>;
25+
def HWBF16: PatLeaf<(VecPBF16 HvxWR:$R)>;
2626

2727
def SDTVecUnaryOp:
2828
SDTypeProfile<1, 1, [SDTCisVec<0>, SDTCisVec<1>]>;
@@ -354,11 +354,15 @@ let Predicates = [UseHVX, UseHVXFloatingPoint] in {
354354

355355
def: Pat<(VecPF16 (concat_vectors HVF16:$Vs, HVF16:$Vt)),
356356
(Combinev HvxVR:$Vt, HvxVR:$Vs)>;
357+
def: Pat<(VecPBF16 (concat_vectors HVBF16:$Vs, HVBF16:$Vt)),
358+
(Combinev HvxVR:$Vt, HvxVR:$Vs)>;
357359
def: Pat<(VecPF32 (concat_vectors HVF32:$Vs, HVF32:$Vt)),
358360
(Combinev HvxVR:$Vt, HvxVR:$Vs)>;
359361

360362
def: Pat<(HexagonVINSERTW0 HVF16:$Vu, I32:$Rt),
361363
(V6_vinsertwr HvxVR:$Vu, I32:$Rt)>;
364+
def: Pat<(HexagonVINSERTW0 HVBF16:$Vu, I32:$Rt),
365+
(V6_vinsertwr HvxVR:$Vu, I32:$Rt)>;
362366
def: Pat<(HexagonVINSERTW0 HVF32:$Vu, I32:$Rt),
363367
(V6_vinsertwr HvxVR:$Vu, I32:$Rt)>;
364368
}

llvm/test/CodeGen/Hexagon/bfloat_vec.ll

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,11 @@ entry:
9595

9696
define dso_local void @copy1d(ptr noundef readonly captures(none) %X, ptr noundef writeonly captures(none) %Y) local_unnamed_addr #0 {
9797
; CHECK-LABEL: copy1d:
98-
; CHECK: // %bb.0: // %entry
99-
; CHECK-NEXT: {
100-
; CHECK-NEXT: v0 = vmemu(r0+#1)
101-
; CHECK-NEXT: }
102-
; CHECK-NEXT: {
103-
; CHECK-NEXT: v1 = vmemu(r0+#0)
104-
; CHECK-NEXT: }
105-
; CHECK-NEXT: {
106-
; CHECK-NEXT: vmemu(r1+#1) = v0
107-
; CHECK-NEXT: }
108-
; CHECK-NEXT: {
109-
; CHECK-NEXT: jumpr r31
110-
; CHECK-NEXT: vmemu(r1+#0) = v1
111-
; CHECK-NEXT: }
98+
; CHECK: v[[X_HI:[0-9]+]] = vmemu(r0+#1)
99+
; CHECK: v[[X_LO:[0-9]+]] = vmemu(r0+#0)
100+
; CHECK: vmemu(r1+#1) = v[[X_HI]]
101+
; CHECK: jumpr [[RET:r[0-9]+]]
102+
; CHECK: vmemu(r1+#0) = v[[X_LO]]
112103
entry:
113104
%0 = load <128 x half>, ptr %X, align 2
114105
store <128 x half> %0, ptr %Y, align 2

0 commit comments

Comments
 (0)