diff options
| author | Lang Hames <lhames@gmail.com> | 2012-03-26 23:07:23 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2012-03-26 23:07:23 +0000 |
| commit | 95e021faf57e1f68d6b862323b048e3fcf83a15a (patch) | |
| tree | 293df35ec6dc3be32f522fba48a9438f77e4b3da /llvm/lib/CodeGen | |
| parent | 84db9105d24a326f35054f103fbb468eb6d9bfeb (diff) | |
| download | bcm5719-llvm-95e021faf57e1f68d6b862323b048e3fcf83a15a.tar.gz bcm5719-llvm-95e021faf57e1f68d6b862323b048e3fcf83a15a.zip | |
Add a debug option to dump PBQP graphs during register allocation.
llvm-svn: 153483
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/RegAllocPBQP.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/RegAllocPBQP.cpp b/llvm/lib/CodeGen/RegAllocPBQP.cpp index 73f78e2a8d9..7d340baed31 100644 --- a/llvm/lib/CodeGen/RegAllocPBQP.cpp +++ b/llvm/lib/CodeGen/RegAllocPBQP.cpp @@ -36,6 +36,7 @@ #include "Spiller.h" #include "VirtRegMap.h" #include "RegisterCoalescer.h" +#include "llvm/Module.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/CalcSpillWeights.h" #include "llvm/CodeGen/LiveIntervalAnalysis.h" @@ -56,6 +57,7 @@ #include <limits> #include <memory> #include <set> +#include <sstream> #include <vector> using namespace llvm; @@ -69,6 +71,13 @@ pbqpCoalescing("pbqp-coalescing", cl::desc("Attempt coalescing during PBQP register allocation."), cl::init(false), cl::Hidden); +#ifndef NDEBUG +static cl::opt<bool> +pbqpDumpGraphs("pbqp-dump-graphs", + cl::desc("Dump graphs for each function/round in the compilation unit."), + cl::init(false), cl::Hidden); +#endif + namespace { /// @@ -667,6 +676,12 @@ bool RegAllocPBQP::runOnMachineFunction(MachineFunction &MF) { // Find the vreg intervals in need of allocation. findVRegIntervalsToAlloc(); + const Function* func = mf->getFunction(); + std::string fqn = + func->getParent()->getModuleIdentifier() + "." + + func->getName().str(); + (void)fqn; + // If there are non-empty intervals allocate them using pbqp. if (!vregsToAlloc.empty()) { @@ -678,6 +693,20 @@ bool RegAllocPBQP::runOnMachineFunction(MachineFunction &MF) { std::auto_ptr<PBQPRAProblem> problem = builder->build(mf, lis, loopInfo, vregsToAlloc); + +#ifndef NDEBUG + if (pbqpDumpGraphs) { + std::ostringstream rs; + rs << round; + std::string graphFileName(fqn + "." + rs.str() + ".pbqpgraph"); + std::string tmp; + raw_fd_ostream os(graphFileName.c_str(), tmp); + DEBUG(dbgs() << "Dumping graph for round " << round << " to \"" + << graphFileName << "\"\n"); + problem->getGraph().dump(os); + } +#endif + PBQP::Solution solution = PBQP::HeuristicSolver<PBQP::Heuristics::Briggs>::solve( problem->getGraph()); |

