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 | 20df03ccd572aefadc3d68e4abc2e58c0bef9ff7 (patch) | |
tree | a345dedbf2a51d81dced2ca9add284fa4c0accd4 /lib/CodeGen/RegAllocPBQP.cpp | |
parent | eb6dd23c95c1df08a4a924e2125158c5203b0991 (diff) | |
download | llvm-20df03ccd572aefadc3d68e4abc2e58c0bef9ff7.tar.gz llvm-20df03ccd572aefadc3d68e4abc2e58c0bef9ff7.tar.bz2 llvm-20df03ccd572aefadc3d68e4abc2e58c0bef9ff7.tar.xz |
Add a debug option to dump PBQP graphs during register allocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153483 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegAllocPBQP.cpp')
-rw-r--r-- | lib/CodeGen/RegAllocPBQP.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/CodeGen/RegAllocPBQP.cpp b/lib/CodeGen/RegAllocPBQP.cpp index 73f78e2a8d..7d340baed3 100644 --- a/lib/CodeGen/RegAllocPBQP.cpp +++ b/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()); |