[llvm] 18ff7e0 - [RISCV] Make the min and max vector width command line options more consistent and check their relationship to each other.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 9 10:48:03 PST 2021
Author: Craig Topper
Date: 2021-02-09T10:47:23-08:00
New Revision: 18ff7e045a22c6e6dc71cc081bf1bc6e55d51565
URL: https://github.com/llvm/llvm-project/commit/18ff7e045a22c6e6dc71cc081bf1bc6e55d51565
DIFF: https://github.com/llvm/llvm-project/commit/18ff7e045a22c6e6dc71cc081bf1bc6e55d51565.diff
LOG: [RISCV] Make the min and max vector width command line options more consistent and check their relationship to each other.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVSubtarget.cpp
llvm/lib/Target/RISCV/RISCVSubtarget.h
llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
llvm/test/Transforms/LoopVectorize/RISCV/scalable-vf-hint.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.cpp b/llvm/lib/Target/RISCV/RISCVSubtarget.cpp
index 890bf498179a..995bafbe1c62 100644
--- a/llvm/lib/Target/RISCV/RISCVSubtarget.cpp
+++ b/llvm/lib/Target/RISCV/RISCVSubtarget.cpp
@@ -27,6 +27,12 @@ using namespace llvm;
#define GET_SUBTARGETINFO_CTOR
#include "RISCVGenSubtargetInfo.inc"
+static cl::opt<unsigned> RVVVectorBitsMax(
+ "riscv-v-vector-bits-max",
+ cl::desc("Assume V extension vector registers are at most this big, "
+ "with zero meaning no maximum size is assumed."),
+ cl::init(0), cl::Hidden);
+
static cl::opt<unsigned> RVVVectorBitsMin(
"riscv-v-vector-bits-min",
cl::desc("Assume V extension vector registers are at least this big, "
@@ -39,11 +45,6 @@ static cl::opt<unsigned> RVVVectorLMULMax(
"Fractional LMUL values are not supported."),
cl::init(8), cl::Hidden);
-static cl::opt<unsigned> VectorBitsMax(
- "riscv-vector-bits-max",
- cl::desc("Assume RISC-V vector registers are at most this big"),
- cl::init(0), cl::Hidden);
-
void RISCVSubtarget::anchor() {}
RISCVSubtarget &RISCVSubtarget::initializeSubtargetDependencies(
@@ -67,11 +68,6 @@ RISCVSubtarget &RISCVSubtarget::initializeSubtargetDependencies(
return *this;
}
-unsigned RISCVSubtarget::getMaxVectorSizeInBits() const {
- assert(HasStdExtV && "Tried to get vector length without V support!");
- return VectorBitsMax;
-}
-
RISCVSubtarget::RISCVSubtarget(const Triple &TT, StringRef CPU,
StringRef TuneCPU, StringRef FS,
StringRef ABIName, const TargetMachine &TM)
@@ -104,6 +100,20 @@ const RegisterBankInfo *RISCVSubtarget::getRegBankInfo() const {
return RegBankInfo.get();
}
+unsigned RISCVSubtarget::getMaxRVVVectorSizeInBits() const {
+ assert(hasStdExtV() && "Tried to get vector length without V support!");
+ if (RVVVectorBitsMax == 0)
+ return 0;
+ assert(RVVVectorBitsMax >= 128 && isPowerOf2_32(RVVVectorBitsMax) &&
+ "V extension requires vector length to be at least 128 and a power of "
+ "2!");
+ assert(RVVVectorBitsMax >= RVVVectorBitsMin &&
+ "Minimum V extension vector length should not be larger than its "
+ "maximum!");
+ unsigned Max = std::max(RVVVectorBitsMin, RVVVectorBitsMax);
+ return PowerOf2Floor(Max < 128 ? 0 : Max);
+}
+
unsigned RISCVSubtarget::getMinRVVVectorSizeInBits() const {
assert(hasStdExtV() &&
"Tried to get vector length without V extension support!");
@@ -111,7 +121,13 @@ unsigned RISCVSubtarget::getMinRVVVectorSizeInBits() const {
(RVVVectorBitsMin >= 128 && isPowerOf2_32(RVVVectorBitsMin))) &&
"V extension requires vector length to be at least 128 and a power of "
"2!");
- return PowerOf2Floor(RVVVectorBitsMin < 128 ? 0 : RVVVectorBitsMin);
+ assert((RVVVectorBitsMax >= RVVVectorBitsMin || RVVVectorBitsMax == 0) &&
+ "Minimum V extension vector length should not be larger than its "
+ "maximum!");
+ unsigned Min = RVVVectorBitsMin;
+ if (RVVVectorBitsMax != 0)
+ Min = std::min(RVVVectorBitsMin, RVVVectorBitsMax);
+ return PowerOf2Floor(Min < 128 ? 0 : Min);
}
unsigned RISCVSubtarget::getMaxLMULForFixedLengthVectors() const {
diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h
index d6a63a04892a..aae8b810bf3c 100644
--- a/llvm/lib/Target/RISCV/RISCVSubtarget.h
+++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h
@@ -134,7 +134,6 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo {
assert(i < RISCV::NUM_TARGET_REGS && "Register out of range");
return UserReservedRegister[i];
}
- unsigned getMaxVectorSizeInBits() const;
protected:
// GlobalISel related APIs.
@@ -152,6 +151,7 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo {
// Return the known range for the bit length of RVV data registers. A value
// of 0 means nothing is known about that particular limit beyond what's
// implied by the architecture.
+ unsigned getMaxRVVVectorSizeInBits() const;
unsigned getMinRVVVectorSizeInBits() const;
unsigned getLMULForFixedLengthVector(MVT VT) const;
unsigned getMaxLMULForFixedLengthVectors() const;
diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
index 8204a65d8080..3e86e2827de8 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
@@ -129,7 +129,7 @@ Optional<unsigned> RISCVTTIImpl::getMaxVScale() const {
// If users do not specify the maximum vector length, we have no way to
// know whether the LoopVectorizer is safe to do or not.
// We only consider to use single vector register (LMUL = 1) to vectorize.
- unsigned MaxVectorSizeInBits = ST->getMaxVectorSizeInBits();
+ unsigned MaxVectorSizeInBits = ST->getMaxRVVVectorSizeInBits();
if (ST->hasStdExtV() && MaxVectorSizeInBits != 0)
return MaxVectorSizeInBits / RISCV::RVVBitsPerBlock;
return BaseT::getMaxVScale();
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/scalable-vf-hint.ll b/llvm/test/Transforms/LoopVectorize/RISCV/scalable-vf-hint.ll
index 2c5631110f90..69f0073fb74a 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/scalable-vf-hint.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/scalable-vf-hint.ll
@@ -1,5 +1,5 @@
; RUN: opt -mtriple=riscv64 -mattr=+m,+experimental-v -loop-vectorize \
-; RUN: -riscv-vector-bits-max=512 -S < %s 2>&1 \
+; RUN: -riscv-v-vector-bits-max=512 -S < %s 2>&1 \
; RUN: | FileCheck %s
; void test(int *a, int *b, int N) {
More information about the llvm-commits
mailing list