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 @@ -134,13 +134,9 @@ return TailPolicy == Undisturbed && MaskPolicy == Omit; } - bool isMAPolicy() const { - return MaskPolicy == Agnostic && TailPolicy == Omit; - } + bool isMAPolicy() const { return MaskPolicy == Agnostic; } - bool isMUPolicy() const { - return MaskPolicy == Undisturbed && TailPolicy == Omit; - } + bool isMUPolicy() const { return MaskPolicy == Undisturbed; } bool hasTailPolicy() const { return HasTailPolicy; } 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 @@ -915,9 +915,6 @@ PolicyScheme DefaultScheme, Policy PolicyAttrs) { SmallVector NewPrototype(Prototype.begin(), Prototype.end()); - // Update PolicyAttrs if need (TA or TAMA) for compute builtin types. - if (PolicyAttrs.isMAPolicy()) - PolicyAttrs.TailPolicy = Policy::PolicyType::Agnostic; // TAMA bool HasPassthruOp = DefaultScheme == PolicyScheme::HasPassthruOperand; if (IsMasked) { // If HasMaskedOffOperand, insert result type as first input operand if @@ -998,10 +995,11 @@ Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic, HasTailPolicy, HasMaskPolicy)}; // TAM if (!HasTailPolicy && HasMaskPolicy) - return {Policy(Policy::PolicyType::Omit, Policy::PolicyType::Agnostic, + return {Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic, HasTailPolicy, HasMaskPolicy), // MA - Policy(Policy::PolicyType::Omit, Policy::PolicyType::Undisturbed, - HasTailPolicy, HasMaskPolicy)}; // MU + Policy(Policy::PolicyType::Agnostic, + Policy::PolicyType::Undisturbed, HasTailPolicy, + HasMaskPolicy)}; // MU llvm_unreachable("An RVV instruction should not be without both tail policy " "and mask policy"); } @@ -1040,6 +1038,10 @@ appendPolicySuffix("_tum"); else if (PolicyAttrs.isTAMAPolicy() && !PolicyAttrs.hasMaskPolicy()) appendPolicySuffix("_tam"); + else if (PolicyAttrs.isMUPolicy() && !PolicyAttrs.hasTailPolicy()) + appendPolicySuffix("_mu"); + else if (PolicyAttrs.isMAPolicy() && !PolicyAttrs.hasTailPolicy()) + appendPolicySuffix("_ma"); else if (PolicyAttrs.isTUMUPolicy()) appendPolicySuffix("_tumu"); else if (PolicyAttrs.isTAMUPolicy()) @@ -1052,13 +1054,7 @@ appendPolicySuffix("_tu"); else if (PolicyAttrs.isTAPolicy() && !IsMasked) appendPolicySuffix("_ta"); - else if (PolicyAttrs.isMUPolicy() && !PolicyAttrs.hasTailPolicy()) { - appendPolicySuffix("_mu"); - PolicyAttrs.TailPolicy = Policy::PolicyType::Agnostic; - } else if (PolicyAttrs.isMAPolicy() && !PolicyAttrs.hasTailPolicy()) { - appendPolicySuffix("_ma"); - PolicyAttrs.TailPolicy = Policy::PolicyType::Agnostic; - } else + else llvm_unreachable("Unhandled policy condition"); } }