Mercurial > projects > ldc
diff gen/optimizer.cpp @ 1506:76936858d1c6
Return `void*` from _d_allocclass so LLVM doesn't do weird things with it...
This allows `-instcombine` followed by `-gvn` to do devirtualization, so add
`-gvn` in strategic places in the default pass order.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 20 Jun 2009 11:39:13 +0200 |
parents | ef76f6e1693c |
children | f86fd3b77285 |
line wrap: on
line diff
--- a/gen/optimizer.cpp Thu Jun 18 15:44:18 2009 +0100 +++ b/gen/optimizer.cpp Sat Jun 20 11:39:13 2009 +0200 @@ -135,6 +135,7 @@ addPass(pm, createFunctionAttrsPass()); addPass(pm, createTailCallEliminationPass()); addPass(pm, createCFGSimplificationPass()); + addPass(pm, createGVNPass()); } // -inline @@ -145,10 +146,13 @@ // Run some optimizations to clean up after inlining. addPass(pm, createScalarReplAggregatesPass()); addPass(pm, createInstructionCombiningPass()); + // -instcombine + gvn == devirtualization :) + addPass(pm, createGVNPass()); - // Inline again, to catch things like foreach delegates - // passed to inlined opApply's where the function wasn't - // known during the first inliner pass. + // Inline again, to catch things like now nonvirtual + // function calls, foreach delegates passed to inlined + // opApply's, etc. where the actual function being called + // wasn't known during the first inliner pass. addPass(pm, createFunctionInliningPass()); // Run clean-up again.