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 @@ -13,6 +13,7 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringSet.h" #include "llvm/ADT/Twine.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" #include #include @@ -992,16 +993,18 @@ Policy::PolicyType::Undisturbed), // TUMU Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Undisturbed)}; // TAMU - - if (HasTailPolicy) + if (HasTailPolicy && !HasMaskPolicy) return {Policy(Policy::PolicyType::Undisturbed, Policy::PolicyType::Agnostic, true), // TUM Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic, true)}; // TAM - - return { - Policy(Policy::PolicyType::Omit, Policy::PolicyType::Agnostic), // MA - Policy(Policy::PolicyType::Omit, Policy::PolicyType::Undisturbed)}; // MU + if (!HasTailPolicy && HasMaskPolicy) + return { + Policy(Policy::PolicyType::Omit, Policy::PolicyType::Agnostic), // MA + Policy(Policy::PolicyType::Omit, + Policy::PolicyType::Undisturbed)}; // MU + llvm_unreachable("An RVV instruction should not be without both tail policy " + "and mask policy"); } void RVVIntrinsic::updateNamesAndPolicy(bool IsMasked, bool HasPolicy,