# HG changeset patch # User Tomas Lindquist Olsen # Date 1221573999 -7200 # Node ID e235b80c92bc92fede2b7763a6112c1ece5aeb94 # Parent a30fc28e8f232a8c8c9a2736d75e113924da6d76 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 diff -r a30fc28e8f23 -r e235b80c92bc gen/optimizer.cpp --- 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()); } diff -r a30fc28e8f23 -r e235b80c92bc gen/toir.cpp --- 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 vals(elements->dim, NULL); diff -r a30fc28e8f23 -r e235b80c92bc gen/toobj.cpp --- 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());