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:
Bob Wilson
2009-10-27 23:49:38 +00:00
parent 03236140fa
commit cd4f04d6bc
6 changed files with 29 additions and 19 deletions

View File

@@ -127,10 +127,11 @@ namespace llvm {
/// optimizations to delete branches to branches, eliminate branches to
/// successor blocks (creating fall throughs), and eliminating branches over
/// branches.
FunctionPass *createBranchFoldingPass(bool DefaultEnableTailMerge);
FunctionPass *createBranchFoldingPass(bool DefaultEnableTailMerge,
CodeGenOpt::Level OptLevel);
/// IfConverter Pass - This pass performs machine code if conversion.
FunctionPass *createIfConverterPass();
/// IfConverter Pass - This pass performs machine code if-conversion.
FunctionPass *createIfConverterPass(CodeGenOpt::Level OptLevel);
/// Code Placement Pass - This pass optimize code placement and aligns loop
/// headers to target specific alignment boundary.