Skip to content

Commit d94a315

Browse files
committed
[Clang][RISCV] Simplify RVV intrinsic policy suffix
This patch works towards the simplification proposal [0] of Nick Knight. After this patch, we have reduced the hierarchy of intrinsics from two sets (non-policy and policy) into a single set, with a general assumption that policy behavior is agnostic unless specified. [0] https://gist.github.com/nick-knight/6cb0b74b351a25323dfb1821d3a269b9 Pull Request: riscv-non-isa/rvv-intrinsic-doc#186. Depends on D141796. Reviewed By: craig.topper, kito-cheng Differential Revision: https://reviews.llvm.org/D142016
1 parent 0f0d8f5 commit d94a315

File tree

613 files changed

+125066
-503762
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

613 files changed

+125066
-503762
lines changed

clang/include/clang/Support/RISCVVIntrinsicUtils.h

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -98,26 +98,18 @@ class Policy {
9898
Undisturbed,
9999
Agnostic,
100100
};
101-
bool IsUnspecified = false;
102101

103102
private:
104103
// The default assumption for an RVV instruction is TAMA, as an undisturbed
105104
// policy generally will affect the performance of an out-of-order core.
106105
const PolicyType TailPolicy = Agnostic;
107106
const PolicyType MaskPolicy = Agnostic;
108-
bool HasTailPolicy, HasMaskPolicy;
109107

110108
public:
111-
Policy(bool HasTailPolicy, bool HasMaskPolicy)
112-
: IsUnspecified(true), HasTailPolicy(HasTailPolicy),
113-
HasMaskPolicy(HasMaskPolicy) {}
114-
Policy(PolicyType TailPolicy, bool HasTailPolicy, bool HasMaskPolicy)
115-
: TailPolicy(TailPolicy), HasTailPolicy(HasTailPolicy),
116-
HasMaskPolicy(HasMaskPolicy) {}
117-
Policy(PolicyType TailPolicy, PolicyType MaskPolicy, bool HasTailPolicy,
118-
bool HasMaskPolicy)
119-
: TailPolicy(TailPolicy), MaskPolicy(MaskPolicy),
120-
HasTailPolicy(HasTailPolicy), HasMaskPolicy(HasMaskPolicy) {}
109+
Policy() = default;
110+
Policy(PolicyType TailPolicy) : TailPolicy(TailPolicy) {}
111+
Policy(PolicyType TailPolicy, PolicyType MaskPolicy)
112+
: TailPolicy(TailPolicy), MaskPolicy(MaskPolicy) {}
121113

122114
bool isTAMAPolicy() const {
123115
return TailPolicy == Agnostic && MaskPolicy == Agnostic;
@@ -143,17 +135,8 @@ class Policy {
143135

144136
bool isMUPolicy() const { return MaskPolicy == Undisturbed; }
145137

146-
bool hasTailPolicy() const { return HasTailPolicy; }
147-
148-
bool hasMaskPolicy() const { return HasMaskPolicy; }
149-
150-
bool isUnspecified() const { return IsUnspecified; }
151-
152138
bool operator==(const Policy &Other) const {
153-
return IsUnspecified == Other.IsUnspecified &&
154-
TailPolicy == Other.TailPolicy && MaskPolicy == Other.MaskPolicy &&
155-
HasTailPolicy == Other.HasTailPolicy &&
156-
HasMaskPolicy == Other.HasMaskPolicy;
139+
return TailPolicy == Other.TailPolicy && MaskPolicy == Other.MaskPolicy;
157140
}
158141

159142
bool operator!=(const Policy &Other) const { return !(*this == Other); }
@@ -429,7 +412,6 @@ class RVVIntrinsic {
429412
return IntrinsicTypes;
430413
}
431414
Policy getPolicyAttrs() const {
432-
assert(PolicyAttrs.IsUnspecified == false);
433415
return PolicyAttrs;
434416
}
435417
unsigned getPolicyAttrsBits() const {
@@ -438,8 +420,6 @@ class RVVIntrinsic {
438420
// The 1st bit simulates the `vma` of RVV
439421
// int PolicyAttrs = 0;
440422

441-
assert(PolicyAttrs.IsUnspecified == false);
442-
443423
if (PolicyAttrs.isTUMAPolicy())
444424
return 2;
445425
if (PolicyAttrs.isTAMAPolicy())
@@ -466,8 +446,7 @@ class RVVIntrinsic {
466446
unsigned NF, PolicyScheme DefaultScheme,
467447
Policy PolicyAttrs);
468448

469-
static llvm::SmallVector<Policy>
470-
getSupportedUnMaskedPolicies(bool HasTailPolicy, bool HasMaskPolicy);
449+
static llvm::SmallVector<Policy> getSupportedUnMaskedPolicies();
471450
static llvm::SmallVector<Policy>
472451
getSupportedMaskedPolicies(bool HasTailPolicy, bool HasMaskPolicy);
473452

clang/lib/Sema/SemaRISCVVectorLookup.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ void RISCVIntrinsicManagerImpl::InitIntrinsicList() {
192192
PolicyScheme MaskedPolicyScheme =
193193
static_cast<PolicyScheme>(Record.MaskedPolicyScheme);
194194

195-
const Policy DefaultPolicy(Record.HasTailPolicy, Record.HasMaskPolicy);
195+
const Policy DefaultPolicy;
196196

197197
llvm::SmallVector<PrototypeDescriptor> ProtoSeq =
198198
RVVIntrinsic::computeBuiltinTypes(BasicProtoSeq, /*IsMasked=*/false,
@@ -208,8 +208,7 @@ void RISCVIntrinsicManagerImpl::InitIntrinsicList() {
208208
bool UnMaskedHasPolicy = UnMaskedPolicyScheme != PolicyScheme::SchemeNone;
209209
bool MaskedHasPolicy = MaskedPolicyScheme != PolicyScheme::SchemeNone;
210210
SmallVector<Policy> SupportedUnMaskedPolicies =
211-
RVVIntrinsic::getSupportedUnMaskedPolicies(Record.HasTailPolicy,
212-
Record.HasMaskPolicy);
211+
RVVIntrinsic::getSupportedUnMaskedPolicies();
213212
SmallVector<Policy> SupportedMaskedPolicies =
214213
RVVIntrinsic::getSupportedMaskedPolicies(Record.HasTailPolicy,
215214
Record.HasMaskPolicy);

clang/lib/Support/RISCVVIntrinsicUtils.cpp

Lines changed: 27 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -966,40 +966,26 @@ llvm::SmallVector<PrototypeDescriptor> RVVIntrinsic::computeBuiltinTypes(
966966
return NewPrototype;
967967
}
968968

969-
llvm::SmallVector<Policy>
970-
RVVIntrinsic::getSupportedUnMaskedPolicies(bool HasTailPolicy,
971-
bool HasMaskPolicy) {
972-
return {
973-
Policy(Policy::PolicyType::Undisturbed, HasTailPolicy,
974-
HasMaskPolicy), // TU
975-
Policy(Policy::PolicyType::Agnostic, HasTailPolicy, HasMaskPolicy)}; // TA
969+
llvm::SmallVector<Policy> RVVIntrinsic::getSupportedUnMaskedPolicies() {
970+
return {Policy(Policy::PolicyType::Undisturbed)}; // TU
976971
}
977972

978973
llvm::SmallVector<Policy>
979974
RVVIntrinsic::getSupportedMaskedPolicies(bool HasTailPolicy,
980975
bool HasMaskPolicy) {
981976
if (HasTailPolicy && HasMaskPolicy)
982-
return {
983-
Policy(Policy::PolicyType::Undisturbed, Policy::PolicyType::Agnostic,
984-
HasTailPolicy, HasMaskPolicy), // TUMA
985-
Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic,
986-
HasTailPolicy, HasMaskPolicy), // TAMA
987-
Policy(Policy::PolicyType::Undisturbed, Policy::PolicyType::Undisturbed,
988-
HasTailPolicy, HasMaskPolicy), // TUMU
989-
Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Undisturbed,
990-
HasTailPolicy, HasMaskPolicy)}; // TAMU
977+
return {Policy(Policy::PolicyType::Undisturbed,
978+
Policy::PolicyType::Agnostic), // TUM
979+
Policy(Policy::PolicyType::Undisturbed,
980+
Policy::PolicyType::Undisturbed), // TUMU
981+
Policy(Policy::PolicyType::Agnostic,
982+
Policy::PolicyType::Undisturbed)}; // MU
991983
if (HasTailPolicy && !HasMaskPolicy)
992984
return {Policy(Policy::PolicyType::Undisturbed,
993-
Policy::PolicyType::Agnostic, HasTailPolicy,
994-
HasMaskPolicy), // TUM
995-
Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic,
996-
HasTailPolicy, HasMaskPolicy)}; // TAM
985+
Policy::PolicyType::Agnostic)}; // TU
997986
if (!HasTailPolicy && HasMaskPolicy)
998-
return {Policy(Policy::PolicyType::Agnostic, Policy::PolicyType::Agnostic,
999-
HasTailPolicy, HasMaskPolicy), // MA
1000-
Policy(Policy::PolicyType::Agnostic,
1001-
Policy::PolicyType::Undisturbed, HasTailPolicy,
1002-
HasMaskPolicy)}; // MU
987+
return {Policy(Policy::PolicyType::Agnostic,
988+
Policy::PolicyType::Undisturbed)}; // MU
1003989
llvm_unreachable("An RVV instruction should not be without both tail policy "
1004990
"and mask policy");
1005991
}
@@ -1016,46 +1002,29 @@ void RVVIntrinsic::updateNamesAndPolicy(bool IsMasked, bool HasPolicy,
10161002
OverloadedName += suffix;
10171003
};
10181004

1019-
if (PolicyAttrs.isUnspecified()) {
1020-
PolicyAttrs.IsUnspecified = false;
1021-
if (IsMasked) {
1005+
if (IsMasked) {
1006+
if (PolicyAttrs.isTUMUPolicy())
1007+
appendPolicySuffix("_tumu");
1008+
else if (PolicyAttrs.isTUMAPolicy())
1009+
appendPolicySuffix("_tum");
1010+
else if (PolicyAttrs.isTAMUPolicy())
1011+
appendPolicySuffix("_mu");
1012+
else if (PolicyAttrs.isTAMAPolicy()) {
10221013
Name += "_m";
10231014
if (HasPolicy)
10241015
BuiltinName += "_tama";
10251016
else
10261017
BuiltinName += "_m";
1027-
} else {
1018+
} else
1019+
llvm_unreachable("Unhandled policy condition");
1020+
} else {
1021+
if (PolicyAttrs.isTUPolicy())
1022+
appendPolicySuffix("_tu");
1023+
else if (PolicyAttrs.isTAPolicy()) {
10281024
if (HasPolicy)
10291025
BuiltinName += "_ta";
1030-
}
1031-
} else {
1032-
if (IsMasked) {
1033-
if (PolicyAttrs.isTUMAPolicy() && !PolicyAttrs.hasMaskPolicy())
1034-
appendPolicySuffix("_tum");
1035-
else if (PolicyAttrs.isTAMAPolicy() && !PolicyAttrs.hasMaskPolicy())
1036-
appendPolicySuffix("_tam");
1037-
else if (PolicyAttrs.isMUPolicy() && !PolicyAttrs.hasTailPolicy())
1038-
appendPolicySuffix("_mu");
1039-
else if (PolicyAttrs.isMAPolicy() && !PolicyAttrs.hasTailPolicy())
1040-
appendPolicySuffix("_ma");
1041-
else if (PolicyAttrs.isTUMUPolicy())
1042-
appendPolicySuffix("_tumu");
1043-
else if (PolicyAttrs.isTAMUPolicy())
1044-
appendPolicySuffix("_tamu");
1045-
else if (PolicyAttrs.isTUMAPolicy())
1046-
appendPolicySuffix("_tuma");
1047-
else if (PolicyAttrs.isTAMAPolicy())
1048-
appendPolicySuffix("_tama");
1049-
else
1050-
llvm_unreachable("Unhandled policy condition");
1051-
} else {
1052-
if (PolicyAttrs.isTUPolicy())
1053-
appendPolicySuffix("_tu");
1054-
else if (PolicyAttrs.isTAPolicy())
1055-
appendPolicySuffix("_ta");
1056-
else
1057-
llvm_unreachable("Unhandled policy condition");
1058-
}
1026+
} else
1027+
llvm_unreachable("Unhandled policy condition");
10591028
}
10601029
}
10611030

0 commit comments

Comments
 (0)