mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-01 12:24:24 +00:00
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
This commit is contained in:
@ -148,9 +148,11 @@ namespace {
|
||||
const TargetInstrInfo *TII;
|
||||
bool MadeChange;
|
||||
int FnNum;
|
||||
CodeGenOpt::Level OptLevel;
|
||||
public:
|
||||
static char ID;
|
||||
IfConverter() : MachineFunctionPass(&ID), FnNum(-1) {}
|
||||
IfConverter(CodeGenOpt::Level OL) :
|
||||
MachineFunctionPass(&ID), FnNum(-1), OptLevel(OL) {}
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &MF);
|
||||
virtual const char *getPassName() const { return "If Converter"; }
|
||||
@ -219,10 +221,9 @@ namespace {
|
||||
char IfConverter::ID = 0;
|
||||
}
|
||||
|
||||
static RegisterPass<IfConverter>
|
||||
X("if-converter", "If Converter");
|
||||
|
||||
FunctionPass *llvm::createIfConverterPass() { return new IfConverter(); }
|
||||
FunctionPass *llvm::createIfConverterPass(CodeGenOpt::Level OptLevel) {
|
||||
return new IfConverter(OptLevel);
|
||||
}
|
||||
|
||||
bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
|
||||
TLI = MF.getTarget().getTargetLowering();
|
||||
@ -362,7 +363,7 @@ bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
|
||||
BBAnalysis.clear();
|
||||
|
||||
if (MadeChange) {
|
||||
BranchFolder BF(false);
|
||||
BranchFolder BF(false, OptLevel);
|
||||
BF.OptimizeFunction(MF, TII,
|
||||
MF.getTarget().getRegisterInfo(),
|
||||
getAnalysisIfAvailable<MachineModuleInfo>());
|
||||
|
Reference in New Issue
Block a user