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());