[llvm] 49cb4fe - [AArch64][SelectionDAG] Refactor to support more scalable vector extending stores
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 15 04:12:29 PDT 2022
Author: zhongyunde
Date: 2022-04-15T19:11:40+08:00
New Revision: 49cb4fef02e635bf304906232214166c7531d753
URL: https://github.com/llvm/llvm-project/commit/49cb4fef02e635bf304906232214166c7531d753
DIFF: https://github.com/llvm/llvm-project/commit/49cb4fef02e635bf304906232214166c7531d753.diff
LOG: [AArch64][SelectionDAG] Refactor to support more scalable vector extending stores
Similar to D122281, we should firstly exclude all scalable vector extending
stores and then selectively enable those which we directly support.
Also merge integer and float scalable vector into scalable_vector_valuetypes.
Reviewed By: paulwalker-arm
Differential Revision: https://reviews.llvm.org/D123449
Added:
Modified:
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index ba1a9adde9cb6..cde9433e647d8 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1177,22 +1177,11 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
setOperationAction(ISD::MSCATTER, VT, Custom);
}
- for (MVT VT : MVT::fp_scalable_vector_valuetypes()) {
- for (MVT InnerVT : MVT::fp_scalable_vector_valuetypes()) {
- // Avoid marking truncating FP stores as legal to prevent the
- // DAGCombiner from creating unsupported truncating stores.
+ // Firstly, exclude all scalable vector extending loads/truncating stores,
+ // include both integer and floating scalable vector.
+ for (MVT VT : MVT::scalable_vector_valuetypes()) {
+ for (MVT InnerVT : MVT::scalable_vector_valuetypes()) {
setTruncStoreAction(VT, InnerVT, Expand);
- // SVE does not have floating-point extending loads.
- setLoadExtAction(ISD::SEXTLOAD, VT, InnerVT, Expand);
- setLoadExtAction(ISD::ZEXTLOAD, VT, InnerVT, Expand);
- setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Expand);
- }
- }
-
- // Firstly, exclude all scalable vector extending loads/truncating stores.
- for (MVT VT : MVT::integer_scalable_vector_valuetypes()) {
- for (MVT InnerVT : MVT::integer_scalable_vector_valuetypes()) {
- // TODO: truncating stores should also be exclude
setLoadExtAction(ISD::SEXTLOAD, VT, InnerVT, Expand);
setLoadExtAction(ISD::ZEXTLOAD, VT, InnerVT, Expand);
setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Expand);
@@ -1200,6 +1189,12 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
}
// Then, selectively enable those which we directly support.
+ setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i8, Legal);
+ setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i16, Legal);
+ setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i32, Legal);
+ setTruncStoreAction(MVT::nxv4i32, MVT::nxv4i8, Legal);
+ setTruncStoreAction(MVT::nxv4i32, MVT::nxv4i16, Legal);
+ setTruncStoreAction(MVT::nxv8i16, MVT::nxv8i8, Legal);
for (auto Op : {ISD::ZEXTLOAD, ISD::SEXTLOAD, ISD::EXTLOAD}) {
setLoadExtAction(Op, MVT::nxv2i64, MVT::nxv2i8, Legal);
setLoadExtAction(Op, MVT::nxv2i64, MVT::nxv2i16, Legal);
More information about the llvm-commits
mailing list