[llvm] e29c5f3 - [RISCV][TTI] Add legality check of vector of address for gather/scatter. (#106481)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 29 19:50:19 PDT 2024
Author: Elvis Wang
Date: 2024-08-30T10:50:15+08:00
New Revision: e29c5f387f4a4aff039c01bde9eedeb6bd97951f
URL: https://github.com/llvm/llvm-project/commit/e29c5f387f4a4aff039c01bde9eedeb6bd97951f
DIFF: https://github.com/llvm/llvm-project/commit/e29c5f387f4a4aff039c01bde9eedeb6bd97951f.diff
LOG: [RISCV][TTI] Add legality check of vector of address for gather/scatter. (#106481)
This patch add a legality check that checks if target machine support
vector of address in `isLegalMaskedGatherScatter()`.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll
llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
index cc69e1d118b5a1..763b89bfec0a66 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
+++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
@@ -252,6 +252,12 @@ class RISCVTTIImpl : public BasicTTIImplBase<RISCVTTIImpl> {
if (DataTypeVT.isFixedLengthVector() && !ST->useRVVForFixedLengthVectors())
return false;
+ // We also need to check if the vector of address is valid.
+ EVT PointerTypeVT = EVT(TLI->getPointerTy(DL));
+ if (DataTypeVT.isScalableVector() &&
+ !TLI->isLegalElementTypeForRVV(PointerTypeVT))
+ return false;
+
EVT ElemType = DataTypeVT.getScalarType();
if (!ST->enableUnalignedVectorMem() && Alignment < ElemType.getStoreSize())
return false;
diff --git a/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll b/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll
index 3307ed32d4f360..e68fcf689c4ad2 100644
--- a/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll
+++ b/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll
@@ -2,6 +2,7 @@
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,GENERIC
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s --check-prefixes=CHECK,MAX256
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED
+; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+zve32f,+zvl128b,+f,+d,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED
define void @masked_gather_aligned() {
; GENERIC-LABEL: 'masked_gather_aligned'
diff --git a/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll b/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll
index 4476c313c2b60b..f7c8437e27e7f7 100644
--- a/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll
+++ b/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll
@@ -2,6 +2,7 @@
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,GENERIC
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s --check-prefixes=CHECK,MAX256
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED
+; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+zve32f,+zvl128b,+f,+d,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED
define void @masked_scatter_aligned() {
; GENERIC-LABEL: 'masked_scatter_aligned'
More information about the llvm-commits
mailing list