diff options
author | Dale Johannesen <dalej@apple.com> | 2007-05-22 17:14:46 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-05-22 17:14:46 +0000 |
commit | 82810c8a13bea59b73b7c6dcc83263abaa2247f0 (patch) | |
tree | 364a4b172c117c237e436038e5101b194ca4c3cc /llvm/lib/CodeGen/BranchFolding.cpp | |
parent | 83d7dd419ad5f8b2214a458a2a1589fa05789547 (diff) | |
download | bcm5719-llvm-82810c8a13bea59b73b7c6dcc83263abaa2247f0.tar.gz bcm5719-llvm-82810c8a13bea59b73b7c6dcc83263abaa2247f0.zip |
Make tail merging the default, except on powerPC. There was no prior art
for a target-dependent default with a command-line override; this way
should be generally usable.
llvm-svn: 37285
Diffstat (limited to 'llvm/lib/CodeGen/BranchFolding.cpp')
-rw-r--r-- | llvm/lib/CodeGen/BranchFolding.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp index d8ec3406921..7cc4c2db79f 100644 --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -35,12 +35,19 @@ using namespace llvm; STATISTIC(NumDeadBlocks, "Number of dead blocks removed"); STATISTIC(NumBranchOpts, "Number of branches optimized"); STATISTIC(NumTailMerge , "Number of block tails merged"); -static cl::opt<bool> EnableTailMerge("enable-tail-merge", cl::Hidden); - +static cl::opt<cl::boolOrDefault> FlagEnableTailMerge("enable-tail-merge", + cl::init(cl::BOU_UNSET), cl::Hidden); namespace { struct BranchFolder : public MachineFunctionPass { static char ID; - BranchFolder() : MachineFunctionPass((intptr_t)&ID) {} + BranchFolder(bool defaultEnableTailMerge) : + MachineFunctionPass((intptr_t)&ID) { + switch (FlagEnableTailMerge) { + case cl::BOU_UNSET: EnableTailMerge = defaultEnableTailMerge; break; + case cl::BOU_TRUE: EnableTailMerge = true; break; + case cl::BOU_FALSE: EnableTailMerge = false; break; + } + } virtual bool runOnMachineFunction(MachineFunction &MF); virtual const char *getPassName() const { return "Control Flow Optimizer"; } @@ -49,6 +56,7 @@ namespace { bool MadeChange; private: // Tail Merging. + bool EnableTailMerge; bool TailMergeBlocks(MachineFunction &MF); bool TryMergeBlocks(MachineBasicBlock* SuccBB, MachineBasicBlock* PredBB); @@ -79,7 +87,8 @@ static bool CorrectExtraCFGEdges(MachineBasicBlock &MBB, bool isCond, MachineFunction::iterator FallThru); -FunctionPass *llvm::createBranchFoldingPass() { return new BranchFolder(); } +FunctionPass *llvm::createBranchFoldingPass(bool DefaultEnableTailMerge) { + return new BranchFolder(DefaultEnableTailMerge); } /// RemoveDeadBlock - Remove the specified dead machine basic block from the /// function, updating the CFG. |