aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/InstrInfoEmitter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen/InstrInfoEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/InstrInfoEmitter.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/llvm/utils/TableGen/InstrInfoEmitter.cpp b/llvm/utils/TableGen/InstrInfoEmitter.cpp
index 176e4b2..0b90f91 100644
--- a/llvm/utils/TableGen/InstrInfoEmitter.cpp
+++ b/llvm/utils/TableGen/InstrInfoEmitter.cpp
@@ -29,6 +29,7 @@
#include "llvm/Support/Format.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/TableGen/CodeGenHelpers.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TGTimer.h"
@@ -284,7 +285,7 @@ emitGetNamedOperandIdx(raw_ostream &OS,
static void
emitGetOperandIdxName(raw_ostream &OS,
- MapVector<StringRef, unsigned> OperandNameToID,
+ const MapVector<StringRef, unsigned> &OperandNameToID,
const MapVector<SmallVector<int>, unsigned> &OperandMap,
unsigned MaxNumOperands, unsigned NumOperandNames) {
OS << "LLVM_READONLY OpName getOperandIdxName(uint16_t Opcode, int16_t Idx) "
@@ -1135,6 +1136,22 @@ void InstrInfoEmitter::run(raw_ostream &OS) {
OS << "\n};\n} // end namespace llvm\n";
+ {
+ NamespaceEmitter LlvmNS(OS, "llvm");
+ NamespaceEmitter TargetNS(OS, Target.getInstNamespace());
+ for (const Record *R : Records.getAllDerivedDefinitions("Operand")) {
+ if (R->isAnonymous())
+ continue;
+ if (const DagInit *D = R->getValueAsDag("MIOperandInfo")) {
+ for (unsigned i = 0, e = D->getNumArgs(); i < e; ++i) {
+ if (const StringInit *Name = D->getArgName(i))
+ OS << "constexpr unsigned SUBOP_" << R->getName() << "_"
+ << Name->getValue() << " = " << i << ";\n";
+ }
+ }
+ }
+ }
+
OS << "#endif // GET_INSTRINFO_HEADER\n\n";
OS << "#ifdef GET_INSTRINFO_HELPER_DECLS\n";