aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen')
-rw-r--r--llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp10
-rw-r--r--llvm/utils/TableGen/InstrInfoEmitter.cpp19
2 files changed, 26 insertions, 3 deletions
diff --git a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
index be7537c..cd86646 100644
--- a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
+++ b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
@@ -278,15 +278,21 @@ CodeGenIntrinsic::CodeGenIntrinsic(const Record *R,
TargetPrefix = R->getValueAsString("TargetPrefix");
Name = R->getValueAsString("LLVMName").str();
+ std::string DefaultName = "llvm." + EnumName.str();
+ llvm::replace(DefaultName, '_', '.');
+
if (Name == "") {
// If an explicit name isn't specified, derive one from the DefName.
- Name = "llvm." + EnumName.str();
- llvm::replace(Name, '_', '.');
+ Name = std::move(DefaultName);
} else {
// Verify it starts with "llvm.".
if (!StringRef(Name).starts_with("llvm."))
PrintFatalError(DefLoc, "Intrinsic '" + DefName +
"'s name does not start with 'llvm.'!");
+
+ if (Name == DefaultName)
+ PrintNote(DefLoc, "Explicitly specified name matches default name, "
+ "consider dropping it");
}
// If TargetPrefix is specified, make sure that Name starts with
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";