summaryrefslogtreecommitdiff
path: root/lib/CodeGen/BranchFolding.h
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2009-10-27 23:49:38 +0000
committerBob Wilson <bob.wilson@apple.com>2009-10-27 23:49:38 +0000
commitcd4f04d6bcb7aefa24d92582fbadfe17519f4756 (patch)
tree154762d67c0c4a8d677aeef3bd023b5a1f0f719a /lib/CodeGen/BranchFolding.h
parent03236140fa4ef316a605717e090276d6a0d42828 (diff)
downloadllvm-cd4f04d6bcb7aefa24d92582fbadfe17519f4756.tar.gz
llvm-cd4f04d6bcb7aefa24d92582fbadfe17519f4756.tar.bz2
llvm-cd4f04d6bcb7aefa24d92582fbadfe17519f4756.tar.xz
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.h10
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"; }