mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-24 08:24:33 +00:00
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
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user