[llvm] b2a958a - [TBLGEN] Emit register pressure set enum
Stanislav Mekhanoshin via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 18 10:22:04 PST 2020
Author: Stanislav Mekhanoshin
Date: 2020-02-18T10:09:05-08:00
New Revision: b2a958a01385ef417917382e27969d5317890941
URL: https://github.com/llvm/llvm-project/commit/b2a958a01385ef417917382e27969d5317890941
DIFF: https://github.com/llvm/llvm-project/commit/b2a958a01385ef417917382e27969d5317890941.diff
LOG: [TBLGEN] Emit register pressure set enum
Differential Revision: https://reviews.llvm.org/D74649
Added:
llvm/test/TableGen/pset-enum.td
Modified:
llvm/test/TableGen/Common/reg-with-subregs-common.td
llvm/utils/TableGen/CodeGenRegisters.cpp
llvm/utils/TableGen/RegisterInfoEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/test/TableGen/Common/reg-with-subregs-common.td b/llvm/test/TableGen/Common/reg-with-subregs-common.td
index eb73518e9972..cb8ada4b2664 100644
--- a/llvm/test/TableGen/Common/reg-with-subregs-common.td
+++ b/llvm/test/TableGen/Common/reg-with-subregs-common.td
@@ -16,6 +16,9 @@ class Indexes<int N> {
!listconcat(acc, !if(!lt(cur, N), [cur], [])));
}
+#ifdef USE_NAMESPACE
+ let Namespace = "TestNamespace" in {
+#endif
foreach Index = 0-31 in {
def sub#Index : SubRegIndex<32, !shl(Index, 5)>;
}
@@ -35,6 +38,9 @@ foreach Size = {2,4,8,16} in {
foreach Index = 0-255 in {
def R#Index : Register <"r"#Index>;
}
+#ifdef USE_NAMESPACE
+}
+#endif
def GPR32 : RegisterClass<"TestTarget", [i32], 32,
(add (sequence "R%u", 0, 255))>;
@@ -124,5 +130,11 @@ def GPR1024 : RegisterTuples<[sub0, sub1, sub2, sub3, sub4, sub5, sub6, sub7,
(decimate (shl GPR32, 31), 1)
]>;
+#ifdef USE_NAMESPACE
+ let Namespace = "TestNamespace" in {
+#endif
def GPR_64 : RegisterClass<"", [v2i32], 64, (add GPR64)>;
def GPR_1024 : RegisterClass<"", [v32i32], 1024, (add GPR1024)>;
+#ifdef USE_NAMESPACE
+}
+#endif
diff --git a/llvm/test/TableGen/pset-enum.td b/llvm/test/TableGen/pset-enum.td
new file mode 100644
index 000000000000..c4c58c2ce640
--- /dev/null
+++ b/llvm/test/TableGen/pset-enum.td
@@ -0,0 +1,11 @@
+// RUN: llvm-tblgen -gen-register-info -I %p/../../include -I %p/Common %s | FileCheck %s
+// RUN: llvm-tblgen -gen-register-info -I %p/../../include -I %p/Common -DUSE_NAMESPACE %s | FileCheck --check-prefixes=CHECK,NAMESPACE %s
+
+include "reg-with-subregs-common.td"
+
+// CHECK-LABEL: // Register pressure sets enum.
+// NAMESPACE-NEXT: namespace TestNamespace {
+// CHECK-NEXT: enum RegisterPressureSets {
+// CHECK-NEXT: GPR32 = 0,
+// CHECK-NEXT: };
+// NAMESPACE-NEXT: } // end namespace TestNamespace
diff --git a/llvm/utils/TableGen/CodeGenRegisters.cpp b/llvm/utils/TableGen/CodeGenRegisters.cpp
index 454b05d30297..bebee0d685d7 100644
--- a/llvm/utils/TableGen/CodeGenRegisters.cpp
+++ b/llvm/utils/TableGen/CodeGenRegisters.cpp
@@ -1956,7 +1956,7 @@ void CodeGenRegBank::computeRegUnitSets() {
// Speculatively grow the RegUnitSets to hold the new set.
RegUnitSets.resize(RegUnitSets.size() + 1);
RegUnitSets.back().Name =
- RegUnitSets[Idx].Name + "+" + RegUnitSets[SearchIdx].Name;
+ RegUnitSets[Idx].Name + "_with_" + RegUnitSets[SearchIdx].Name;
std::set_union(RegUnitSets[Idx].Units.begin(),
RegUnitSets[Idx].Units.end(),
diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp
index f9766931344d..a615587efdee 100644
--- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp
+++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp
@@ -182,6 +182,20 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS,
OS << "} // end namespace " << Namespace << "\n\n";
}
+ OS << "// Register pressure sets enum.\n";
+ if (!Namespace.empty())
+ OS << "namespace " << Namespace << " {\n";
+ OS << "enum RegisterPressureSets {\n";
+ unsigned NumSets = Bank.getNumRegPressureSets();
+ for (unsigned i = 0; i < NumSets; ++i ) {
+ const RegUnitSet &RegUnits = Bank.getRegSetAt(i);
+ OS << " " << RegUnits.Name << " = " << i << ",\n";
+ }
+ OS << "};\n";
+ if (!Namespace.empty())
+ OS << "} // end namespace " << Namespace << '\n';
+ OS << '\n';
+
OS << "} // end namespace llvm\n\n";
OS << "#endif // GET_REGINFO_ENUM\n\n";
}
More information about the llvm-commits
mailing list