summaryrefslogtreecommitdiff
path: root/clang/utils
diff options
context:
space:
mode:
authorPiyou Chen <piyou.chen@sifive.com>2022-12-20 01:12:57 -0800
committerPiyou Chen <piyou.chen@sifive.com>2022-12-20 01:13:13 -0800
commit0d4c6506100b339311283c10d841d7693287666a (patch)
tree5943cdb2c3224efccd6edd1d19151827b03c9c21 /clang/utils
parent74cca964a653190d37101116c80d38907228021a (diff)
downloadllvm-0d4c6506100b339311283c10d841d7693287666a.tar.gz
[RISCV] Refactor RVV Policy by structure
RVV intrinsic function has several policy variants. Include TU, TA, TAMU, TAMA, TUMU, TUMA, MU, MA, TUM, TAM Currently, the clang side enumerates these policies, but it's hard to add a new policy. This patch use structure to replace the origin policy enumeration, and enhance some policy transform logic. This is a clean-up job that will not affect the RVV intrinsic functionality and make sure riscv_vector_builtin_cg.inc is the same as the original one. Reviewed By: kito-cheng Differential Revision: https://reviews.llvm.org/D139995
Diffstat (limited to 'clang/utils')
-rw-r--r--clang/utils/TableGen/RISCVVEmitter.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp b/clang/utils/TableGen/RISCVVEmitter.cpp
index 1b58b7d02d37..ecf3b35e4a47 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -164,8 +164,8 @@ void emitCodeGenSwitchBody(const RVVIntrinsic *RVVI, raw_ostream &OS) {
if (RVVI->getNF() >= 2)
OS << " NF = " + utostr(RVVI->getNF()) + ";\n";
// We had initialized DefaultPolicy as TU/TUMU in CodeGen function.
- if (RVVI->getDefaultPolicy() != Policy::TU &&
- RVVI->getDefaultPolicy() != Policy::TUMU && !RVVI->hasPassthruOperand() &&
+ if (!RVVI->getDefaultPolicy().isTUPolicy() &&
+ !RVVI->getDefaultPolicy().isTUMUPolicy() && !RVVI->hasPassthruOperand() &&
!RVVI->hasManualCodegen() && RVVI->hasVL())
OS << " DefaultPolicy = " << RVVI->getDefaultPolicyBits() << ";\n";
@@ -193,11 +193,11 @@ void emitCodeGenSwitchBody(const RVVIntrinsic *RVVI, raw_ostream &OS) {
OS << " Ops.push_back(ConstantInt::get(Ops.back()->getType(),"
" DefaultPolicy));\n";
if (RVVI->hasMaskedOffOperand() &&
- RVVI->getDefaultPolicy() == Policy::TAMA)
+ RVVI->getDefaultPolicy().isTAMAPolicy())
OS << " Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType));\n";
// Masked reduction cases.
if (!RVVI->hasMaskedOffOperand() && RVVI->hasPassthruOperand() &&
- RVVI->getDefaultPolicy() == Policy::TAMA)
+ RVVI->getDefaultPolicy().isTAMAPolicy())
OS << " Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType));\n";
} else {
OS << " std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end());\n";
@@ -207,7 +207,7 @@ void emitCodeGenSwitchBody(const RVVIntrinsic *RVVI, raw_ostream &OS) {
OS << " Ops.push_back(ConstantInt::get(Ops.back()->getType(), "
"DefaultPolicy));\n";
else if (RVVI->hasPassthruOperand() &&
- RVVI->getDefaultPolicy() == Policy::TA)
+ RVVI->getDefaultPolicy().isTAPolicy())
OS << " Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType));\n";
}
@@ -527,7 +527,11 @@ void RVVEmitter::createRVVIntrinsics(
unsigned NF = R->getValueAsInt("NF");
// If unmasked builtin supports policy, they should be TU or TA.
- SmallVector<Policy> SupportedUnMaskedPolicies = {Policy::TU, Policy::TA};
+ llvm::SmallVector<Policy> SupportedUnMaskedPolicies;
+ SupportedUnMaskedPolicies.emplace_back(Policy(
+ Policy::PolicyType::Undisturbed, Policy::PolicyType::Omit)); // TU
+ SupportedUnMaskedPolicies.emplace_back(
+ Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Omit)); // TA
SmallVector<Policy> SupportedMaskedPolicies =
RVVIntrinsic::getSupportedMaskedPolicies(HasTailPolicy, HasMaskPolicy);
@@ -544,10 +548,10 @@ void RVVEmitter::createRVVIntrinsics(
auto Prototype = RVVIntrinsic::computeBuiltinTypes(
BasicPrototype, /*IsMasked=*/false,
/*HasMaskedOffOperand=*/false, HasVL, NF, IsPrototypeDefaultTU,
- UnMaskedPolicyScheme);
+ UnMaskedPolicyScheme, Policy());
auto MaskedPrototype = RVVIntrinsic::computeBuiltinTypes(
BasicPrototype, /*IsMasked=*/true, HasMaskedOffOperand, HasVL, NF,
- IsPrototypeDefaultTU, MaskedPolicyScheme);
+ IsPrototypeDefaultTU, MaskedPolicyScheme, Policy());
// Create Intrinsics for each type and LMUL.
for (char I : TypeRange) {
@@ -569,7 +573,7 @@ void RVVEmitter::createRVVIntrinsics(
/*IsMasked=*/false, /*HasMaskedOffOperand=*/false, HasVL,
UnMaskedPolicyScheme, SupportOverloading, HasBuiltinAlias,
ManualCodegen, *Types, IntrinsicTypes, RequiredFeatures, NF,
- Policy::PolicyNone, IsPrototypeDefaultTU));
+ Policy(), IsPrototypeDefaultTU));
if (UnMaskedPolicyScheme != PolicyScheme::SchemeNone)
for (auto P : SupportedUnMaskedPolicies) {
SmallVector<PrototypeDescriptor> PolicyPrototype =
@@ -596,7 +600,7 @@ void RVVEmitter::createRVVIntrinsics(
/*IsMasked=*/true, HasMaskedOffOperand, HasVL, MaskedPolicyScheme,
SupportOverloading, HasBuiltinAlias, MaskedManualCodegen,
*MaskTypes, IntrinsicTypes, RequiredFeatures, NF,
- Policy::PolicyNone, IsPrototypeDefaultTU));
+ Policy(), IsPrototypeDefaultTU));
if (MaskedPolicyScheme == PolicyScheme::SchemeNone)
continue;
for (auto P : SupportedMaskedPolicies) {