Mercurial > projects > ldc
changeset 605:e235b80c92bc
Removed useless assert in ArrayLiteralExp::toConstElem
Added second verification pass after optimization
Commented an optimization pass out from lvl2, it turns the IR invalid, see llvm PR 2800
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 16 Sep 2008 16:06:39 +0200 |
parents | a30fc28e8f23 |
children | c7fbcb6b923e |
files | gen/optimizer.cpp gen/toir.cpp gen/toobj.cpp |
diffstat | 3 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/optimizer.cpp Tue Sep 16 09:00:05 2008 +0200 +++ b/gen/optimizer.cpp Tue Sep 16 16:06:39 2008 +0200 @@ -41,7 +41,8 @@ pm.add(createIPConstantPropagationPass()); pm.add(createDeadArgEliminationPass()); pm.add(createInstructionCombiningPass()); - pm.add(createCFGSimplificationPass()); + // this doesn't work, llvm PR 2800 + //pm.add(createCFGSimplificationPass()); pm.add(createPruneEHPass()); }
--- a/gen/toir.cpp Tue Sep 16 09:00:05 2008 +0200 +++ b/gen/toir.cpp Tue Sep 16 16:06:39 2008 +0200 @@ -2219,8 +2219,6 @@ // dynamic arrays can occur here as well ... bool dyn = (bt->ty == Tarray); - if (!dyn) - assert(arrtype->getNumElements() == elements->dim); // build the initializer std::vector<LLConstant*> vals(elements->dim, NULL);
--- a/gen/toobj.cpp Tue Sep 16 09:00:05 2008 +0200 +++ b/gen/toobj.cpp Tue Sep 16 16:06:39 2008 +0200 @@ -154,6 +154,21 @@ // run optimizer llvmdc_optimize_module(ir.module, global.params.optimizeLevel, global.params.llvmInline); + // verify the llvm + if (!global.params.novalidate && (global.params.optimizeLevel >= 0 || global.params.llvmInline)) { + std::string verifyErr; + Logger::println("Verifying module... again..."); + LOG_SCOPE; + if (llvm::verifyModule(*ir.module,llvm::ReturnStatusAction,&verifyErr)) + { + error("%s", verifyErr.c_str()); + fatal(); + } + else { + Logger::println("Verification passed!"); + } + } + // eventually do our own path stuff, dmd's is a bit strange. typedef llvm::sys::Path LLPath; LLPath bcpath = LLPath(objfile->name->toChars());