mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[ARM][BFloat] Implement lowering of bf16 load/store intrinsics
Reviewers: labrinea, dmgreen, pratlucas, LukeGeeson Reviewed By: dmgreen Subscribers: kristof.beyls, hiraditya, danielkiss, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D81486
This commit is contained in:
parent
3691e53520
commit
23628b352d
@ -2078,6 +2078,7 @@ void ARMDAGToDAGISel::SelectVLD(SDNode *N, bool isUpdating, unsigned NumVecs,
|
||||
// Double-register operations:
|
||||
case MVT::v8i8: OpcodeIndex = 0; break;
|
||||
case MVT::v4f16:
|
||||
case MVT::v4bf16:
|
||||
case MVT::v4i16: OpcodeIndex = 1; break;
|
||||
case MVT::v2f32:
|
||||
case MVT::v2i32: OpcodeIndex = 2; break;
|
||||
@ -2085,6 +2086,7 @@ void ARMDAGToDAGISel::SelectVLD(SDNode *N, bool isUpdating, unsigned NumVecs,
|
||||
// Quad-register operations:
|
||||
case MVT::v16i8: OpcodeIndex = 0; break;
|
||||
case MVT::v8f16:
|
||||
case MVT::v8bf16:
|
||||
case MVT::v8i16: OpcodeIndex = 1; break;
|
||||
case MVT::v4f32:
|
||||
case MVT::v4i32: OpcodeIndex = 2; break;
|
||||
@ -2221,6 +2223,7 @@ void ARMDAGToDAGISel::SelectVST(SDNode *N, bool isUpdating, unsigned NumVecs,
|
||||
// Double-register operations:
|
||||
case MVT::v8i8: OpcodeIndex = 0; break;
|
||||
case MVT::v4f16:
|
||||
case MVT::v4bf16:
|
||||
case MVT::v4i16: OpcodeIndex = 1; break;
|
||||
case MVT::v2f32:
|
||||
case MVT::v2i32: OpcodeIndex = 2; break;
|
||||
@ -2228,6 +2231,7 @@ void ARMDAGToDAGISel::SelectVST(SDNode *N, bool isUpdating, unsigned NumVecs,
|
||||
// Quad-register operations:
|
||||
case MVT::v16i8: OpcodeIndex = 0; break;
|
||||
case MVT::v8f16:
|
||||
case MVT::v8bf16:
|
||||
case MVT::v8i16: OpcodeIndex = 1; break;
|
||||
case MVT::v4f32:
|
||||
case MVT::v4i32: OpcodeIndex = 2; break;
|
||||
@ -2389,11 +2393,13 @@ void ARMDAGToDAGISel::SelectVLDSTLane(SDNode *N, bool IsLoad, bool isUpdating,
|
||||
// Double-register operations:
|
||||
case MVT::v8i8: OpcodeIndex = 0; break;
|
||||
case MVT::v4f16:
|
||||
case MVT::v4bf16:
|
||||
case MVT::v4i16: OpcodeIndex = 1; break;
|
||||
case MVT::v2f32:
|
||||
case MVT::v2i32: OpcodeIndex = 2; break;
|
||||
// Quad-register operations:
|
||||
case MVT::v8f16:
|
||||
case MVT::v8bf16:
|
||||
case MVT::v8i16: OpcodeIndex = 0; break;
|
||||
case MVT::v4f32:
|
||||
case MVT::v4i32: OpcodeIndex = 1; break;
|
||||
@ -2923,6 +2929,8 @@ void ARMDAGToDAGISel::SelectVLDDup(SDNode *N, bool IsIntrinsic,
|
||||
case MVT::v8i16:
|
||||
case MVT::v4f16:
|
||||
case MVT::v8f16:
|
||||
case MVT::v4bf16:
|
||||
case MVT::v8bf16:
|
||||
OpcodeIndex = 1; break;
|
||||
case MVT::v2f32:
|
||||
case MVT::v2i32:
|
||||
|
@ -1074,6 +1074,12 @@ def : Pat<(vector_insert (v4f16 DPR:$src),
|
||||
def : Pat<(vector_insert (v8f16 QPR:$src),
|
||||
(f16 (load addrmode6:$addr)), imm:$lane),
|
||||
(VLD1LNq16Pseudo addrmode6:$addr, QPR:$src, imm:$lane)>;
|
||||
def : Pat<(vector_insert (v4bf16 DPR:$src),
|
||||
(bf16 (load addrmode6:$addr)), imm:$lane),
|
||||
(VLD1LNd16 addrmode6:$addr, DPR:$src, imm:$lane)>;
|
||||
def : Pat<(vector_insert (v8bf16 QPR:$src),
|
||||
(bf16 (load addrmode6:$addr)), imm:$lane),
|
||||
(VLD1LNq16Pseudo addrmode6:$addr, QPR:$src, imm:$lane)>;
|
||||
def : Pat<(vector_insert (v2f32 DPR:$src),
|
||||
(f32 (load addrmode6:$addr)), imm:$lane),
|
||||
(VLD1LNd32 addrmode6:$addr, DPR:$src, imm:$lane)>;
|
||||
|
1062
test/CodeGen/ARM/bf16-intrinsics-ld-st.ll
Normal file
1062
test/CodeGen/ARM/bf16-intrinsics-ld-st.ll
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user