From 8ec459f49ce4ce0c172481b5be879d293ac941b8 Mon Sep 17 00:00:00 2001 From: Daniel Sanders <daniel_l_sanders@apple.com> Date: Wed, 1 Nov 2017 22:13:05 +0000 Subject: [PATCH] [globalisel][regbank] Warn about MIR ambiguities when register bank/class names clash. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317132 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/TableGen/Error.h | 2 ++ lib/TableGen/Error.cpp | 4 ++++ utils/TableGen/RegisterBankEmitter.cpp | 13 +++++++++++++ 3 files changed, 19 insertions(+) diff --git a/include/llvm/TableGen/Error.h b/include/llvm/TableGen/Error.h index 3df658df880..de4d3bf5478 100644 --- a/include/llvm/TableGen/Error.h +++ b/include/llvm/TableGen/Error.h @@ -19,6 +19,8 @@ namespace llvm { +void PrintNote(ArrayRef<SMLoc> NoteLoc, const Twine &Msg); + void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg); void PrintWarning(const char *Loc, const Twine &Msg); void PrintWarning(const Twine &Msg); diff --git a/lib/TableGen/Error.cpp b/lib/TableGen/Error.cpp index fd089356625..b4830178a26 100644 --- a/lib/TableGen/Error.cpp +++ b/lib/TableGen/Error.cpp @@ -39,6 +39,10 @@ static void PrintMessage(ArrayRef<SMLoc> Loc, SourceMgr::DiagKind Kind, "instantiated from multiclass"); } +void PrintNote(ArrayRef<SMLoc> NoteLoc, const Twine &Msg) { + PrintMessage(NoteLoc, SourceMgr::DK_Note, Msg); +} + void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg) { PrintMessage(WarningLoc, SourceMgr::DK_Warning, Msg); } diff --git a/utils/TableGen/RegisterBankEmitter.cpp b/utils/TableGen/RegisterBankEmitter.cpp index 293933ffb8d..5c647168804 100644 --- a/utils/TableGen/RegisterBankEmitter.cpp +++ b/utils/TableGen/RegisterBankEmitter.cpp @@ -299,6 +299,19 @@ void RegisterBankEmitter::run(raw_ostream &OS) { Banks.push_back(Bank); } + // Warn about ambiguous MIR caused by register bank/class name clashes. + for (const auto &Class : Records.getAllDerivedDefinitions("RegisterClass")) { + for (const auto &Bank : Banks) { + if (Bank.getName().lower() == Class->getName().lower()) { + PrintWarning(Bank.getDef().getLoc(), "Register bank names should be " + "distinct from register classes " + "to avoid ambiguous MIR"); + PrintNote(Bank.getDef().getLoc(), "RegisterBank was declared here"); + PrintNote(Class->getLoc(), "RegisterClass was declared here"); + } + } + } + emitSourceFileHeader("Register Bank Source Fragments", OS); OS << "#ifdef GET_REGBANK_DECLARATIONS\n" << "#undef GET_REGBANK_DECLARATIONS\n"; -- 2.40.0