diff options
author | Bob Wilson <bob.wilson@apple.com> | 2009-10-27 23:49:38 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2009-10-27 23:49:38 +0000 |
commit | cd4f04d6bcb7aefa24d92582fbadfe17519f4756 (patch) | |
tree | 154762d67c0c4a8d677aeef3bd023b5a1f0f719a /lib/CodeGen/BranchFolding.h | |
parent | 03236140fa4ef316a605717e090276d6a0d42828 (diff) |
Record CodeGen optimization level in the BranchFolding pass so that we can
use it to control tail merging when there is a tradeoff between performance
and code size. When there is only 1 instruction in the common tail, we have
been merging. That can be good for code size but is a definite loss for
performance. Now we will avoid tail merging in that case when the
optimization level is "Aggressive", i.e., "-O3". Radar 7338114.
Since the IfConversion pass invokes BranchFolding, it too needs to know
the optimization level. Note that I removed the RegisterPass instantiation
for IfConversion because it required a default constructor. If someone
wants to keep that for some reason, we can add a default constructor with
a hard-wired optimization level.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85346 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/BranchFolding.h')
-rw-r--r-- | lib/CodeGen/BranchFolding.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/CodeGen/BranchFolding.h b/lib/CodeGen/BranchFolding.h index 9763e3339a..5d355256d1 100644 --- a/lib/CodeGen/BranchFolding.h +++ b/lib/CodeGen/BranchFolding.h @@ -12,6 +12,7 @@ #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/Target/TargetMachine.h" #include <vector> namespace llvm { @@ -23,7 +24,7 @@ namespace llvm { class BranchFolder { public: - explicit BranchFolder(bool defaultEnableTailMerge); + explicit BranchFolder(bool defaultEnableTailMerge, CodeGenOpt::Level OL); bool OptimizeFunction(MachineFunction &MF, const TargetInstrInfo *tii, @@ -37,6 +38,7 @@ namespace llvm { typedef std::pair<MPIterator, MachineBasicBlock::iterator> SameTailElt; std::vector<SameTailElt> SameTails; + CodeGenOpt::Level OptLevel; bool EnableTailMerge; const TargetInstrInfo *TII; const TargetRegisterInfo *TRI; @@ -73,8 +75,10 @@ namespace llvm { public BranchFolder { public: static char ID; - explicit BranchFolderPass(bool defaultEnableTailMerge) - : MachineFunctionPass(&ID), BranchFolder(defaultEnableTailMerge) {} + explicit BranchFolderPass(bool defaultEnableTailMerge, + CodeGenOpt::Level OptLevel) + : MachineFunctionPass(&ID), + BranchFolder(defaultEnableTailMerge, OptLevel) {} virtual bool runOnMachineFunction(MachineFunction &MF); virtual const char *getPassName() const { return "Control Flow Optimizer"; } |