[svn r135] * Merged DMD 1.025 *

* Fixed a minor linking order mishap *
* Added an command line option -annotate *
* Fixed some problems with running optimizations *
* Added std.stdio and dependencies to lphobos (still not 100% working, but compiles and links) *
* Fixed problems with passing aggregate types to variadic functions *
* Added initial code towards full GC support, currently based on malloc and friends, not all the runtime calls the GC yet for memory *
* Fixed problems with resolving nested function context pointers for some heavily nested cases *
* Redid function argument passing + other minor code cleanups, still lots to do on this end... *
This commit is contained in:
Tomas Lindquist Olsen
2008-01-04 01:38:42 +01:00
parent 4428e47a66
commit bc08c6fcb1
44 changed files with 4587 additions and 592 deletions

View File

@@ -12,11 +12,22 @@ using namespace llvm;
void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
{
if (!doinline && lvl < 0)
return;
assert(lvl >= 0 && lvl <= 5);
PassManager pm;
pm.add(new TargetData(m));
// -O0
if (lvl >= 0)
{
//pm.add(createStripDeadPrototypesPass());
pm.add(createGlobalDCEPass());
}
// -O1
if (lvl >= 1)
{
pm.add(createRaiseAllocationsPass());
@@ -26,6 +37,7 @@ void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
pm.add(createGlobalDCEPass());
}
// -O2
if (lvl >= 2)
{
pm.add(createIPConstantPropagationPass());
@@ -35,10 +47,12 @@ void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
pm.add(createPruneEHPass());
}
// -inline
if (doinline) {
pm.add(createFunctionInliningPass());
}
// -O3
if (lvl >= 3)
{
pm.add(createArgumentPromotionPass());
@@ -73,8 +87,7 @@ void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
pm.add(createConstantMergePass());
}
// level 4 and 5 are linktime optimizations
// level -O4 and -O5 are linktime optimizations
if (lvl > 0 || doinline)
pm.run(*m);
pm.run(*m);
}