Move early tail duplication earlier.
This fixes the issue noted in PR10251 where early tail dup of bbs with indirectbr would cause a bb to be duplicated into a loop preheader and then into its predecessors, creating phi nodes with identical operands just before register allocation. This helps with jsinterp.o size (__TEXT goes from 163568 to 126656) and a bit with performance 1.005x faster on sunspider (jits still enabled). The result on webkit with the jit disabled is more significant: 1.021x faster. llvm-svn: 134372
This commit is contained in:
parent
f9f012ea88
commit
c74d9378e1
|
@ -388,6 +388,12 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,
|
||||||
// Expand pseudo-instructions emitted by ISel.
|
// Expand pseudo-instructions emitted by ISel.
|
||||||
PM.add(createExpandISelPseudosPass());
|
PM.add(createExpandISelPseudosPass());
|
||||||
|
|
||||||
|
// Pre-ra tail duplication.
|
||||||
|
if (OptLevel != CodeGenOpt::None && !DisableEarlyTailDup) {
|
||||||
|
PM.add(createTailDuplicatePass(true));
|
||||||
|
printAndVerify(PM, "After Pre-RegAlloc TailDuplicate");
|
||||||
|
}
|
||||||
|
|
||||||
// Optimize PHIs before DCE: removing dead PHI cycles may make more
|
// Optimize PHIs before DCE: removing dead PHI cycles may make more
|
||||||
// instructions dead.
|
// instructions dead.
|
||||||
if (OptLevel != CodeGenOpt::None)
|
if (OptLevel != CodeGenOpt::None)
|
||||||
|
@ -416,12 +422,6 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,
|
||||||
printAndVerify(PM, "After codegen peephole optimization pass");
|
printAndVerify(PM, "After codegen peephole optimization pass");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre-ra tail duplication.
|
|
||||||
if (OptLevel != CodeGenOpt::None && !DisableEarlyTailDup) {
|
|
||||||
PM.add(createTailDuplicatePass(true));
|
|
||||||
printAndVerify(PM, "After Pre-RegAlloc TailDuplicate");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run pre-ra passes.
|
// Run pre-ra passes.
|
||||||
if (addPreRegAlloc(PM, OptLevel))
|
if (addPreRegAlloc(PM, OptLevel))
|
||||||
printAndVerify(PM, "After PreRegAlloc passes");
|
printAndVerify(PM, "After PreRegAlloc passes");
|
||||||
|
|
Loading…
Reference in New Issue