summaryrefslogtreecommitdiff
path: root/lib/CodeGen/MachineBlockPlacement.cpp
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2013-04-12 00:48:32 +0000
committerNadav Rotem <nrotem@apple.com>2013-04-12 00:48:32 +0000
commit07706e5506fb1bf494667e9fd16795b6c0b4d0fb (patch)
tree904fea6f8e94e70005c42efc315e29b35f1983ad /lib/CodeGen/MachineBlockPlacement.cpp
parente292347503cd7598429c08f9984ab3e0a44ab8a3 (diff)
downloadllvm-07706e5506fb1bf494667e9fd16795b6c0b4d0fb.tar.gz
llvm-07706e5506fb1bf494667e9fd16795b6c0b4d0fb.tar.bz2
llvm-07706e5506fb1bf494667e9fd16795b6c0b4d0fb.tar.xz
Add a flag to align all basic blocks in the function.
When debugging performance regressions we often ask ourselves if the regression that we see is due to poor isel/sched/ra or due to some micro-architetural problem. When comparing two code sequences one good way to rule out front-end bottlenecks (and other the issues) is to force code alignment. This pass adds a flag that forces the alignment of all of the basic blocks in the program. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179353 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineBlockPlacement.cpp')
-rw-r--r--lib/CodeGen/MachineBlockPlacement.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/CodeGen/MachineBlockPlacement.cpp b/lib/CodeGen/MachineBlockPlacement.cpp
index cd948e24a6..774df81b4d 100644
--- a/lib/CodeGen/MachineBlockPlacement.cpp
+++ b/lib/CodeGen/MachineBlockPlacement.cpp
@@ -39,6 +39,7 @@
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/Support/Allocator.h"
+#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetLowering.h"
@@ -52,6 +53,11 @@ STATISTIC(CondBranchTakenFreq,
STATISTIC(UncondBranchTakenFreq,
"Potential frequency of taking unconditional branches");
+static cl::opt<unsigned> AlignAllBlock("align-all-blocks",
+ cl::desc("Force the alignment of all "
+ "blocks in the function."),
+ cl::init(0), cl::Hidden);
+
namespace {
class BlockChain;
/// \brief Type for our function-wide basic block -> block chain mapping.
@@ -1083,6 +1089,14 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &F) {
TLI = F.getTarget().getTargetLowering();
assert(BlockToChain.empty());
+ if (AlignAllBlock) {
+ // Align all of the blocks in the function to a specific alignment.
+ for (MachineFunction::iterator FI = F.begin(), FE = F.end();
+ FI != FE; ++FI)
+ FI->setAlignment(AlignAllBlock);
+ return true;
+ }
+
buildCFGChains(F);
BlockToChain.clear();