Make the -verify-regalloc command line option available to base classes as
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 17 Dec 2010 23:16:35 +0000 (23:16 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 17 Dec 2010 23:16:35 +0000 (23:16 +0000)
RegAllocBase::VerifyEnabled.

Run the machine code verifier in a few interesting places during RegAllocGreedy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122107 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocBase.h
lib/CodeGen/RegAllocBasic.cpp
lib/CodeGen/RegAllocGreedy.cpp

index 438a7d17baefee1d7712da0a4545a004a5f38b24..193c14460ccb30f9f3eca72caa2c4d535dc47cca 100644 (file)
@@ -156,6 +156,10 @@ protected:
   // Use this group name for NamedRegionTimer.
   static const char *TimerGroupName;
 
+public:
+  /// VerifyEnabled - True when -verify-regalloc is given.
+  static bool VerifyEnabled;
+
 private:
   void seedLiveVirtRegs(std::priority_queue<std::pair<float, unsigned> >&);
 
index f01ebf5030e07f8971df5eb5560a01fc32976bfe..85a3d7f12026913365259ffaa7096c8089d4a0b1 100644 (file)
@@ -53,11 +53,12 @@ static RegisterRegAlloc basicRegAlloc("basic", "basic register allocator",
 
 // Temporary verification option until we can put verification inside
 // MachineVerifier.
-static cl::opt<bool>
-VerifyRegAlloc("verify-regalloc",
-               cl::desc("Verify live intervals before renaming"));
+static cl::opt<bool, true>
+VerifyRegAlloc("verify-regalloc", cl::location(RegAllocBase::VerifyEnabled),
+               cl::desc("Verify during register allocation"));
 
 const char *RegAllocBase::TimerGroupName = "Register Allocation";
+bool RegAllocBase::VerifyEnabled = false;
 
 namespace {
 /// RABasic provides a minimal implementation of the basic register allocation
@@ -475,7 +476,7 @@ bool RABasic::runOnMachineFunction(MachineFunction &mf) {
   // make the rewriter a separate pass and override verifyAnalysis instead. When
   // that happens, verification naturally falls under VerifyMachineCode.
 #ifndef NDEBUG
-  if (VerifyRegAlloc) {
+  if (VerifyEnabled) {
     // Verify accuracy of LiveIntervals. The standard machine code verifier
     // ensures that each LiveIntervals covers all uses of the virtual reg.
 
index d8c1b3d4da5965736c91f81139ab5483c1ea92b9..8dbb56809bf31f6c2b56aa026c64c924a9e294c9 100644 (file)
@@ -328,6 +328,9 @@ unsigned RAGreedy::trySplit(LiveInterval &VirtReg, AllocationOrder &Order,
   SplitEditor(*SA, *LIS, *VRM, *DomTree, LREdit)
     .splitAroundLoop(Loop->getLoop());
 
+  if (VerifyEnabled)
+    MF->verify(this);
+
   // We have new split regs, don't assign anything.
   return 0;
 }
@@ -400,6 +403,9 @@ bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
                << ((Value*)mf.getFunction())->getName() << '\n');
 
   MF = &mf;
+  if (VerifyEnabled)
+    MF->verify(this);
+
   RegAllocBase::init(getAnalysis<VirtRegMap>(), getAnalysis<LiveIntervals>());
   DomTree = &getAnalysis<MachineDominatorTree>();
   ReservedRegs = TRI->getReservedRegs(*MF);