Skip to content

Commit cb8b48e

Browse files
authored
[TableGen][MC] Pass a MCSubtargetInfo instance into resolveVariantSchedClassImpl (llvm#161886)
`Target_MC::resolveVariantSchedClassImpl` is the implementation function for `TargetGenMCSubtargetInfo::resolveVariantSchedClass`. Despite being only called by `resolveVariantSchedClass`, `resolveVariantSchedClassImpl` is still a standalone function that cannot access a MCSubtargetInfo through `this` (i.e. `TargetGenMCSubtargetInfo`). And having access to a `MCSubtargetInfo` could be useful for some (future) SchedPredicate. This patch modifies TableGen to generate `resolveVariantSchedClassImpl` with an additional `MCSubtargetInfo` argument passing in. Note that this does not change any public interface in either `TargetGenMCSubtargetInfo ` or `MCSubtargetInfo`, as `resolveVariantSchedClassImpl` is basically an internal function.
1 parent f3673c5 commit cb8b48e

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// RUN: llvm-tblgen -gen-subtarget -I %p/../../include %s -o - | FileCheck %s
2+
3+
include "llvm/Target/Target.td"
4+
5+
def TestTargetInstrInfo : InstrInfo;
6+
7+
def TestTarget : Target {
8+
let InstructionSet = TestTargetInstrInfo;
9+
}
10+
11+
// CHECK: unsigned resolveVariantSchedClassImpl(unsigned SchedClass,
12+
// CHECK-NEXT: const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID)
13+
14+
// CHECK: unsigned resolveVariantSchedClass(unsigned SchedClass,
15+
// CHECK-NEXT: const MCInst *MI, const MCInstrInfo *MCII,
16+
// CHECK-NEXT: unsigned CPUID) const override {
17+
// CHECK-NEXT: return TestTarget_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
18+
// CHECK-NEXT: }

llvm/utils/TableGen/SubtargetEmitter.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,7 +1761,7 @@ void SubtargetEmitter::emitSchedModelHelpers(const std::string &ClassName,
17611761
<< "\n::resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI,"
17621762
<< " const MCInstrInfo *MCII, unsigned CPUID) const {\n"
17631763
<< " return " << Target << "_MC"
1764-
<< "::resolveVariantSchedClassImpl(SchedClass, MI, MCII, CPUID);\n"
1764+
<< "::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);\n"
17651765
<< "} // " << ClassName << "::resolveVariantSchedClass\n\n";
17661766

17671767
STIPredicateExpander PE(Target, /*Indent=*/0);
@@ -1923,7 +1923,8 @@ void SubtargetEmitter::parseFeaturesFunction(raw_ostream &OS) {
19231923
void SubtargetEmitter::emitGenMCSubtargetInfo(raw_ostream &OS) {
19241924
OS << "namespace " << Target << "_MC {\n"
19251925
<< "unsigned resolveVariantSchedClassImpl(unsigned SchedClass,\n"
1926-
<< " const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) {\n";
1926+
<< " const MCInst *MI, const MCInstrInfo *MCII, "
1927+
<< "const MCSubtargetInfo &STI, unsigned CPUID) {\n";
19271928
emitSchedModelHelpersImpl(OS, /* OnlyExpandMCPredicates */ true);
19281929
OS << "}\n";
19291930
OS << "} // end namespace " << Target << "_MC\n\n";
@@ -1945,7 +1946,7 @@ void SubtargetEmitter::emitGenMCSubtargetInfo(raw_ostream &OS) {
19451946
<< " const MCInst *MI, const MCInstrInfo *MCII,\n"
19461947
<< " unsigned CPUID) const override {\n"
19471948
<< " return " << Target << "_MC"
1948-
<< "::resolveVariantSchedClassImpl(SchedClass, MI, MCII, CPUID);\n";
1949+
<< "::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);\n";
19491950
OS << " }\n";
19501951
if (TGT.getHwModes().getNumModeIds() > 1) {
19511952
OS << " unsigned getHwModeSet() const override;\n";
@@ -2073,7 +2074,8 @@ void SubtargetEmitter::run(raw_ostream &OS) {
20732074
OS << "class DFAPacketizer;\n";
20742075
OS << "namespace " << Target << "_MC {\n"
20752076
<< "unsigned resolveVariantSchedClassImpl(unsigned SchedClass,"
2076-
<< " const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID);\n"
2077+
<< " const MCInst *MI, const MCInstrInfo *MCII, "
2078+
<< "const MCSubtargetInfo &STI, unsigned CPUID);\n"
20772079
<< "} // end namespace " << Target << "_MC\n\n";
20782080
OS << "struct " << ClassName << " : public TargetSubtargetInfo {\n"
20792081
<< " explicit " << ClassName << "(const Triple &TT, StringRef CPU, "

0 commit comments

Comments
 (0)