diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h b/clang/include/clang/Support/RISCVVIntrinsicUtils.h --- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h +++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h @@ -472,6 +472,8 @@ bool IsMasked, bool HasMaskedOffOperand, bool HasVL, unsigned NF, PolicyScheme DefaultScheme, Policy PolicyAttrs); + + static llvm::SmallVector getSupportedUnMaskedPolicies(); static llvm::SmallVector getSupportedMaskedPolicies(bool HasTailPolicy, bool HasMaskPolicy); diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp b/clang/lib/Sema/SemaRISCVVectorLookup.cpp --- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp +++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp @@ -205,13 +205,9 @@ bool UnMaskedHasPolicy = UnMaskedPolicyScheme != PolicyScheme::SchemeNone; bool MaskedHasPolicy = MaskedPolicyScheme != PolicyScheme::SchemeNone; - // If unmasked builtin supports policy, they should be TU or TA. - llvm::SmallVector SupportedUnMaskedPolicies; - SupportedUnMaskedPolicies.emplace_back(Policy( - Policy::PolicyType::Undisturbed, Policy::PolicyType::Omit)); // TU - SupportedUnMaskedPolicies.emplace_back( - Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Omit)); // TA - llvm::SmallVector SupportedMaskedPolicies = + SmallVector SupportedUnMaskedPolicies = + RVVIntrinsic::getSupportedUnMaskedPolicies(); + SmallVector SupportedMaskedPolicies = RVVIntrinsic::getSupportedMaskedPolicies(Record.HasTailPolicy, Record.HasMaskPolicy); diff --git a/clang/lib/Support/RISCVVIntrinsicUtils.cpp b/clang/lib/Support/RISCVVIntrinsicUtils.cpp --- a/clang/lib/Support/RISCVVIntrinsicUtils.cpp +++ b/clang/lib/Support/RISCVVIntrinsicUtils.cpp @@ -974,6 +974,12 @@ return NewPrototype; } +llvm::SmallVector RVVIntrinsic::getSupportedUnMaskedPolicies() { + return { + Policy(Policy::PolicyType::Undisturbed, Policy::PolicyType::Omit), // TU + Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Omit)}; // TA +} + llvm::SmallVector RVVIntrinsic::getSupportedMaskedPolicies(bool HasTailPolicy, bool HasMaskPolicy) { diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp b/clang/utils/TableGen/RISCVVEmitter.cpp --- a/clang/utils/TableGen/RISCVVEmitter.cpp +++ b/clang/utils/TableGen/RISCVVEmitter.cpp @@ -528,12 +528,8 @@ StringRef MaskedIRName = R->getValueAsString("MaskedIRName"); unsigned NF = R->getValueAsInt("NF"); - // If unmasked builtin supports policy, they should be TU or TA. - llvm::SmallVector SupportedUnMaskedPolicies; - SupportedUnMaskedPolicies.emplace_back(Policy( - Policy::PolicyType::Undisturbed, Policy::PolicyType::Omit)); // TU - SupportedUnMaskedPolicies.emplace_back( - Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Omit)); // TA + SmallVector SupportedUnMaskedPolicies = + RVVIntrinsic::getSupportedUnMaskedPolicies(); SmallVector SupportedMaskedPolicies = RVVIntrinsic::getSupportedMaskedPolicies(HasTailPolicy, HasMaskPolicy);