diff --git a/llvm/lib/Target/ARC/ARCOptAddrMode.cpp b/llvm/lib/Target/ARC/ARCOptAddrMode.cpp --- a/llvm/lib/Target/ARC/ARCOptAddrMode.cpp +++ b/llvm/lib/Target/ARC/ARCOptAddrMode.cpp @@ -23,6 +23,7 @@ #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/IR/Function.h" #include "llvm/InitializePasses.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -33,6 +34,16 @@ #define DEBUG_TYPE "arc-addr-mode" namespace llvm { + +static cl::opt ArcKillAddrMode("arc-kill-addr-mode", cl::init(0), + cl::ReallyHidden, cl::ZeroOrMore); + +#define DUMP_BEFORE() ((ArcKillAddrMode & 0x0001) != 0) +#define DUMP_AFTER() ((ArcKillAddrMode & 0x0002) != 0) +#define VIEW_BEFORE() ((ArcKillAddrMode & 0x0004) != 0) +#define VIEW_AFTER() ((ArcKillAddrMode & 0x0008) != 0) +#define KILL_PASS() ((ArcKillAddrMode & 0x0010) != 0) + FunctionPass *createARCOptAddrMode(); void initializeARCOptAddrModePass(PassRegistry &); } // end namespace llvm @@ -485,9 +496,14 @@ } bool ARCOptAddrMode::runOnMachineFunction(MachineFunction &MF) { - if (skipFunction(MF.getFunction())) + if (skipFunction(MF.getFunction()) || KILL_PASS()) return false; + if (DUMP_BEFORE()) + MF.dump(); + if (VIEW_BEFORE()) + MF.viewCFG(); + AST = &MF.getSubtarget(); AII = AST->getInstrInfo(); MRI = &MF.getRegInfo(); @@ -496,6 +512,11 @@ bool Changed = false; for (auto &MBB : MF) Changed |= processBasicBlock(MBB); + + if (DUMP_AFTER()) + MF.dump(); + if (VIEW_AFTER()) + MF.viewCFG(); return Changed; }