aboutsummaryrefslogtreecommitdiff
path: root/clang/utils/TableGen/MveEmitter.cpp
diff options
context:
space:
mode:
authormingmingl <mingmingl@google.com>2025-02-04 11:11:14 -0800
committermingmingl <mingmingl@google.com>2025-02-04 11:11:14 -0800
commite91747a92d27ecf799427bf563f9f64f7c4d2447 (patch)
tree7aa5a8a9170deec293e152bdf2be804399dcd612 /clang/utils/TableGen/MveEmitter.cpp
parent3a8d9337d816aef41c3ca1484be8b933a71a3c46 (diff)
parent53d6e59b594639417cdbfcfa2d18cea64acb4009 (diff)
downloadllvm-users/mingmingl-llvm/spr/sdpglobalvariable.zip
llvm-users/mingmingl-llvm/spr/sdpglobalvariable.tar.gz
llvm-users/mingmingl-llvm/spr/sdpglobalvariable.tar.bz2
Merge branch 'main' into users/mingmingl-llvm/spr/sdpglobalvariableusers/mingmingl-llvm/spr/sdpglobalvariable
Diffstat (limited to 'clang/utils/TableGen/MveEmitter.cpp')
-rw-r--r--clang/utils/TableGen/MveEmitter.cpp91
1 files changed, 68 insertions, 23 deletions
diff --git a/clang/utils/TableGen/MveEmitter.cpp b/clang/utils/TableGen/MveEmitter.cpp
index 58a4d3c..e776798 100644
--- a/clang/utils/TableGen/MveEmitter.cpp
+++ b/clang/utils/TableGen/MveEmitter.cpp
@@ -1949,26 +1949,53 @@ void MveEmitter::EmitHeader(raw_ostream &OS) {
}
void MveEmitter::EmitBuiltinDef(raw_ostream &OS) {
- for (const auto &kv : ACLEIntrinsics) {
- const ACLEIntrinsic &Int = *kv.second;
- OS << "BUILTIN(__builtin_arm_mve_" << Int.fullName()
- << ", \"\", \"n\")\n";
+ llvm::StringToOffsetTable Table;
+ Table.GetOrAddStringOffset("n");
+ Table.GetOrAddStringOffset("nt");
+ Table.GetOrAddStringOffset("ntu");
+ Table.GetOrAddStringOffset("vi.");
+
+ for (const auto &[_, Int] : ACLEIntrinsics)
+ Table.GetOrAddStringOffset(Int->fullName());
+
+ std::map<std::string, ACLEIntrinsic *> ShortNameIntrinsics;
+ for (const auto &[_, Int] : ACLEIntrinsics) {
+ if (!Int->polymorphic())
+ continue;
+
+ StringRef Name = Int->shortName();
+ if (ShortNameIntrinsics.insert({Name.str(), Int.get()}).second)
+ Table.GetOrAddStringOffset(Name);
}
- DenseSet<StringRef> ShortNamesSeen;
+ OS << "#ifdef GET_MVE_BUILTIN_ENUMERATORS\n";
+ for (const auto &[_, Int] : ACLEIntrinsics) {
+ OS << " BI__builtin_arm_mve_" << Int->fullName() << ",\n";
+ }
+ for (const auto &[Name, _] : ShortNameIntrinsics) {
+ OS << " BI__builtin_arm_mve_" << Name << ",\n";
+ }
+ OS << "#endif // GET_MVE_BUILTIN_ENUMERATORS\n\n";
- for (const auto &kv : ACLEIntrinsics) {
- const ACLEIntrinsic &Int = *kv.second;
- if (Int.polymorphic()) {
- StringRef Name = Int.shortName();
- if (ShortNamesSeen.insert(Name).second) {
- OS << "BUILTIN(__builtin_arm_mve_" << Name << ", \"vi.\", \"nt";
- if (Int.nonEvaluating())
- OS << "u"; // indicate that this builtin doesn't evaluate its args
- OS << "\")\n";
- }
- }
+ OS << "#ifdef GET_MVE_BUILTIN_STR_TABLE\n";
+ Table.EmitStringTableDef(OS, "BuiltinStrings");
+ OS << "#endif // GET_MVE_BUILTIN_STR_TABLE\n\n";
+
+ OS << "#ifdef GET_MVE_BUILTIN_INFOS\n";
+ for (const auto &[_, Int] : ACLEIntrinsics) {
+ OS << " Builtin::Info{Builtin::Info::StrOffsets{"
+ << Table.GetStringOffset(Int->fullName()) << " /* " << Int->fullName()
+ << " */, " << Table.GetStringOffset("") << ", "
+ << Table.GetStringOffset("n") << " /* n */}},\n";
+ }
+ for (const auto &[Name, Int] : ShortNameIntrinsics) {
+ StringRef Attrs = Int->nonEvaluating() ? "ntu" : "nt";
+ OS << " Builtin::Info{Builtin::Info::StrOffsets{"
+ << Table.GetStringOffset(Name) << " /* " << Name << " */, "
+ << Table.GetStringOffset("vi.") << " /* vi. */, "
+ << Table.GetStringOffset(Attrs) << " /* " << Attrs << " */}},\n";
}
+ OS << "#endif // GET_MVE_BUILTIN_INFOS\n\n";
}
void MveEmitter::EmitBuiltinSema(raw_ostream &OS) {
@@ -2156,13 +2183,31 @@ void CdeEmitter::EmitHeader(raw_ostream &OS) {
}
void CdeEmitter::EmitBuiltinDef(raw_ostream &OS) {
- for (const auto &kv : ACLEIntrinsics) {
- if (kv.second->headerOnly())
- continue;
- const ACLEIntrinsic &Int = *kv.second;
- OS << "BUILTIN(__builtin_arm_cde_" << Int.fullName()
- << ", \"\", \"ncU\")\n";
- }
+ llvm::StringToOffsetTable Table;
+ Table.GetOrAddStringOffset("ncU");
+
+ for (const auto &[_, Int] : ACLEIntrinsics)
+ if (!Int->headerOnly())
+ Table.GetOrAddStringOffset(Int->fullName());
+
+ OS << "#ifdef GET_CDE_BUILTIN_ENUMERATORS\n";
+ for (const auto &[_, Int] : ACLEIntrinsics)
+ if (!Int->headerOnly())
+ OS << " BI__builtin_arm_cde_" << Int->fullName() << ",\n";
+ OS << "#endif // GET_CDE_BUILTIN_ENUMERATORS\n\n";
+
+ OS << "#ifdef GET_CDE_BUILTIN_STR_TABLE\n";
+ Table.EmitStringTableDef(OS, "BuiltinStrings");
+ OS << "#endif // GET_CDE_BUILTIN_STR_TABLE\n\n";
+
+ OS << "#ifdef GET_CDE_BUILTIN_INFOS\n";
+ for (const auto &[_, Int] : ACLEIntrinsics)
+ if (!Int->headerOnly())
+ OS << " Builtin::Info{Builtin::Info::StrOffsets{"
+ << Table.GetStringOffset(Int->fullName()) << " /* " << Int->fullName()
+ << " */, " << Table.GetStringOffset("") << ", "
+ << Table.GetStringOffset("ncU") << " /* ncU */}},\n";
+ OS << "#endif // GET_CDE_BUILTIN_INFOS\n\n";
}
void CdeEmitter::EmitBuiltinSema(raw_ostream &OS) {