changeset 623:fe3c7af578eb

merge
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Wed, 01 Oct 2008 18:33:21 +0200
parents 26fce59fe80a (diff) 0ecdb11ca85e (current diff)
children eb444ed4a2d3
files
diffstat 13 files changed, 197 insertions(+), 87 deletions(-) [+]
line wrap: on
line diff
--- a/gen/aa.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/aa.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -105,12 +105,16 @@
     llvm::Function* func = LLVM_D_GetRuntimeFunction(gIR->module, "_aaIn");
     const llvm::FunctionType* funcTy = func->getFunctionType();
 
-    Logger::cout() << "_aaIn = " << *func << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "_aaIn = " << *func << '\n';
 
     // aa param
     LLValue* aaval = aa->getRVal();
-    Logger::cout() << "aaval: " << *aaval << '\n';
-    Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
+    if (Logger::enabled())
+    {
+        Logger::cout() << "aaval: " << *aaval << '\n';
+        Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
+    }
     aaval = DtoBitCast(aaval, funcTy->getParamType(0));
 
     // keyti param
@@ -143,12 +147,16 @@
     llvm::Function* func = LLVM_D_GetRuntimeFunction(gIR->module, "_aaDel");
     const llvm::FunctionType* funcTy = func->getFunctionType();
 
-    Logger::cout() << "_aaDel = " << *func << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "_aaDel = " << *func << '\n';
 
     // aa param
     LLValue* aaval = aa->getRVal();
-    Logger::cout() << "aaval: " << *aaval << '\n';
-    Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
+    if (Logger::enabled())
+    {
+        Logger::cout() << "aaval: " << *aaval << '\n';
+        Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
+    }
     aaval = DtoBitCast(aaval, funcTy->getParamType(0));
 
     // keyti param
--- a/gen/arrays.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/arrays.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -85,7 +85,8 @@
     }
     else
     {
-        Logger::cout() << "array assignment type dont match: " << *dst->getType() << "\n\n" << *src->getType() << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "array assignment type dont match: " << *dst->getType() << "\n\n" << *src->getType() << '\n';
         const LLArrayType* arrty = isaArray(src->getType()->getContainedType(0));
         if (!arrty)
         {
@@ -234,7 +235,8 @@
 
     LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, funcname);
     assert(fn);
-    Logger::cout() << "calling array init function: " << *fn <<'\n';
+    if (Logger::enabled())
+        Logger::cout() << "calling array init function: " << *fn <<'\n';
     CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end());
     call->setCallingConv(llvm::CallingConv::C);
 }
@@ -335,7 +337,8 @@
         assert(v);
 
         inits[i] = v;
-        Logger::cout() << "llval: " << *v << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "llval: " << *v << '\n';
     }
 
     Logger::println("building constant array");
@@ -426,7 +429,8 @@
     if (newptr->getType() != dstType)
         newptr = DtoBitCast(newptr, dstType, ".gc_mem");
 
-    Logger::cout() << "final ptr = " << *newptr << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "final ptr = " << *newptr << '\n';
 
     return new DSliceValue(arrayType, arrayLen, newptr);
 }
@@ -468,7 +472,8 @@
     if (newptr->getType() != dstType)
         newptr = DtoBitCast(newptr, dstType, ".gc_mem");
 
-    Logger::cout() << "final ptr = " << *newptr << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "final ptr = " << *newptr << '\n';
 
     assert(firstDim);
     return new DSliceValue(arrayType, firstDim, newptr);
@@ -497,7 +502,8 @@
     args.push_back(DtoArrayLen(array));
 
     LLValue* arrPtr = DtoArrayPtr(array);
-    Logger::cout() << "arrPtr = " << *arrPtr << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "arrPtr = " << *arrPtr << '\n';
     args.push_back(DtoBitCast(arrPtr, fn->getFunctionType()->getParamType(3), "tmp"));
 
     LLValue* newptr = gIR->CreateCallOrInvoke(fn, args.begin(), args.end(), ".gc_mem")->get();
@@ -726,9 +732,12 @@
     const LLType* pt = fn->getFunctionType()->getParamType(0);
 
     LLSmallVector<LLValue*, 3> args;
-    Logger::cout() << "bitcasting to " << *pt << '\n';
-    Logger::cout() << *lmem << '\n';
-    Logger::cout() << *rmem << '\n';
+    if (Logger::enabled())
+    {
+        Logger::cout() << "bitcasting to " << *pt << '\n';
+        Logger::cout() << *lmem << '\n';
+        Logger::cout() << *rmem << '\n';
+    }
     args.push_back(DtoBitCast(lmem,pt));
     args.push_back(DtoBitCast(rmem,pt));
 
@@ -738,7 +747,9 @@
         LLValue* tival = DtoTypeInfoOf(t);
         // DtoTypeInfoOf only does declare, not enough in this case :/
         DtoForceConstInitDsymbol(t->vtinfo);
-        Logger::cout() << "typeinfo decl: " << *tival << '\n';
+
+        if (Logger::enabled())
+            Logger::cout() << "typeinfo decl: " << *tival << '\n';
 
         pt = fn->getFunctionType()->getParamType(2);
         args.push_back(DtoBitCast(tival, pt));
@@ -957,22 +968,29 @@
     LLValue* rval2;
     bool isslice = false;
 
-    Logger::cout() << "from array or sarray" << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "from array or sarray" << '\n';
+
     if (totype->ty == Tpointer) {
-        Logger::cout() << "to pointer" << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "to pointer" << '\n';
         rval = DtoArrayPtr(u);
         if (rval->getType() != tolltype)
             rval = gIR->ir->CreateBitCast(rval, tolltype, "tmp");
     }
     else if (totype->ty == Tarray) {
-        Logger::cout() << "to array" << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "to array" << '\n';
 
         const LLType* ptrty = DtoArrayType(totype)->getContainedType(1);
         const LLType* ety = DtoTypeNotVoid(fromtype->next);
 
         if (DSliceValue* usl = u->isSlice()) {
-            Logger::println("from slice");
-            Logger::cout() << "from: " << *usl->ptr << " to: " << *ptrty << '\n';
+            if (Logger::enabled())
+            {
+                Logger::println("from slice");
+                Logger::cout() << "from: " << *usl->ptr << " to: " << *ptrty << '\n';
+            }
             rval = DtoBitCast(usl->ptr, ptrty);
             if (fromtype->next->size() == totype->next->size())
                 rval2 = DtoArrayLen(usl);
@@ -982,7 +1000,8 @@
         else {
             LLValue* uval = u->getRVal();
             if (fromtype->ty == Tsarray) {
-                Logger::cout() << "uvalTy = " << *uval->getType() << '\n';
+                if (Logger::enabled())
+                    Logger::cout() << "uvalTy = " << *uval->getType() << '\n';
                 assert(isaPointer(uval->getType()));
                 const LLArrayType* arrty = isaArray(uval->getType()->getContainedType(0));
 
@@ -1012,7 +1031,8 @@
         isslice = true;
     }
     else if (totype->ty == Tsarray) {
-        Logger::cout() << "to sarray" << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "to sarray" << '\n';
         assert(0);
     }
     else {
--- a/gen/asmstmt.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/asmstmt.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -624,7 +624,8 @@
     types.insert(types.end(), outtypes.begin(), outtypes.end());
     types.insert(types.end(), intypes.begin(), intypes.end());
     llvm::FunctionType* fty = llvm::FunctionType::get(llvm::Type::VoidTy, types, false);
-    Logger::cout() << "function type = " << *fty << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "function type = " << *fty << '\n';
     llvm::InlineAsm* ia = llvm::InlineAsm::get(fty, code, out_c, true);
 
     std::vector<LLValue*> args;
--- a/gen/classes.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/classes.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -95,6 +95,8 @@
     Logger::println("DtoResolveClass(%s): %s", cd->toPrettyChars(), cd->loc.toChars());
     LOG_SCOPE;
 
+    //printf("resolve class: %s\n", cd->toPrettyChars());
+
     // get the TypeClass
     assert(cd->type->ty == Tclass);
     TypeClass* ts = (TypeClass*)cd->type;
@@ -244,7 +246,8 @@
         TypeClass* itc = (TypeClass*)id->type;
         const LLType* ivtblTy = itc->ir.vtblType->get();
         assert(ivtblTy);
-        Logger::cout() << "interface vtbl type: " << *ivtblTy << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "interface vtbl type: " << *ivtblTy << '\n';
         fieldtypes.push_back(getPtrToType(ivtblTy));
 
         // fix the interface vtable type
@@ -360,6 +363,8 @@
     Logger::println("DtoDeclareClass(%s): %s", cd->toPrettyChars(), cd->loc.toChars());
     LOG_SCOPE;
 
+    //printf("declare class: %s\n", cd->toPrettyChars());
+
     assert(cd->type->ty == Tclass);
     TypeClass* ts = (TypeClass*)cd->type;
 
@@ -654,7 +659,7 @@
 
             for (int k=1; k < b->vtbl.dim; k++)
             {
-                Logger::println("interface vtbl const init nr. %d", k);
+//                 Logger::println("interface vtbl const init nr. %d", k);
                 Dsymbol* dsym = (Dsymbol*)b->vtbl.data[k];
 
                 // error on unimplemented functions, error was already generated earlier
@@ -674,11 +679,13 @@
                 // we have to bitcast, as the type created in ResolveClass expects a different this type
                 c = llvm::ConstantExpr::getBitCast(c, targetTy);
                 iinits.push_back(c);
-                Logger::cout() << "c: " << *c << '\n';
+//                 if (Logger::enabled())
+//                     Logger::cout() << "c: " << *c << '\n';
             }
 
         #if OPAQUE_VTBLS
-            Logger::cout() << "n: " << iinits.size() << " ivtbl_ty: " << *ivtbl_ty << '\n';
+//             if (Logger::enabled())
+//                 Logger::cout() << "n: " << iinits.size() << " ivtbl_ty: " << *ivtbl_ty << '\n';
             LLConstant* civtblInit = llvm::ConstantArray::get(ivtbl_ty, iinits);
             iri->vtblInit = llvm::cast<llvm::ConstantArray>(civtblInit);
         #else
@@ -825,7 +832,8 @@
         size_t idx = 2 + tc->sym->vthis->ir.irField->index;
         LLValue* src = thisval->getRVal();
         LLValue* dst = DtoGEPi(mem,0,idx,"tmp");
-        Logger::cout() << "dst: " << *dst << "\nsrc: " << *src << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "dst: " << *dst << "\nsrc: " << *src << '\n';
         DtoStore(src, dst);
     }
     // set the context for nested classes
@@ -1175,7 +1183,8 @@
     assert(inst->getType()->toBasetype()->ty == Tclass);
 
     LLValue* vthis = inst->getRVal();
-    Logger::cout() << "vthis: " << *vthis << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "vthis: " << *vthis << '\n';
 
     LLValue* funcval;
     funcval = DtoGEPi(vthis, 0, 0, "tmp");
@@ -1183,11 +1192,13 @@
     funcval = DtoGEPi(funcval, 0, fdecl->vtblIndex, fdecl->toPrettyChars());
     funcval = DtoLoad(funcval);
 
-    Logger::cout() << "funcval: " << *funcval << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "funcval: " << *funcval << '\n';
 
 #if OPAQUE_VTBLS
     funcval = DtoBitCast(funcval, getPtrToType(DtoType(fdecl->type)));
-    Logger::cout() << "funcval casted: " << *funcval << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "funcval casted: " << *funcval << '\n';
 #endif
 
     return funcval;
--- a/gen/functions.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/functions.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -164,11 +164,16 @@
         // handle lazy args
         if (arg->storageClass & STClazy)
         {
-            Logger::cout() << "for lazy got: " << *paramvec.back() << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "for lazy got: " << *paramvec.back() << '\n';
+
             TypeFunction *ltf = new TypeFunction(NULL, arg->type, 0, LINKd);
             TypeDelegate *ltd = new TypeDelegate(ltf);
             at = getPtrToType(DtoType(ltd));
-            Logger::cout() << "lazy updated to: " << *at << '\n';
+
+            if (Logger::enabled())
+                Logger::cout() << "lazy updated to: " << *at << '\n';
+
             paramvec.back() = at;
             // lazy doesn't need byval as the delegate is not visible to the user
         }
@@ -289,6 +294,8 @@
     Logger::println("DtoResolveFunction(%s): %s", fdecl->toPrettyChars(), fdecl->loc.toChars());
     LOG_SCOPE;
 
+    //printf("resolve function: %s\n", fdecl->toPrettyChars());
+
     if (fdecl->parent)
     if (TemplateInstance* tinst = fdecl->parent->isTemplateInstance())
     {
@@ -391,6 +398,8 @@
     Logger::println("DtoDeclareFunction(%s): %s", fdecl->toPrettyChars(), fdecl->loc.toChars());
     LOG_SCOPE;
 
+    //printf("declare function: %s\n", fdecl->toPrettyChars());
+
     // intrinsic sanity check
     if (fdecl->llvmInternal == LLVMintrinsic && fdecl->fbody) {
         error(fdecl->loc, "intrinsics cannot have function bodies");
@@ -530,7 +539,8 @@
     else
         assert(func->getLinkage() != llvm::GlobalValue::InternalLinkage);
 
-    Logger::cout() << "func decl: " << *func << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "func decl: " << *func << '\n';
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
--- a/gen/llvmhelpers.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/llvmhelpers.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -416,7 +416,7 @@
 
 void DtoAssign(Loc& loc, DValue* lhs, DValue* rhs)
 {
-    Logger::cout() << "DtoAssign(...);\n";
+    Logger::println("DtoAssign(...);\n");
     LOG_SCOPE;
 
     Type* t = lhs->getType()->toBasetype();
@@ -472,7 +472,8 @@
         else {
             LLValue* l = lhs->getLVal();
             LLValue* r = rhs->getRVal();
-            Logger::cout() << "assign\nlhs: " << *l << "rhs: " << *r << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "assign\nlhs: " << *l << "rhs: " << *r << '\n';
             DtoAggrCopy(l, r);
         }
     }
@@ -480,8 +481,11 @@
         assert(t2->ty == Tclass);
         LLValue* l = lhs->getLVal();
         LLValue* r = rhs->getRVal();
-        Logger::cout() << "l : " << *l << '\n';
-        Logger::cout() << "r : " << *r << '\n';
+        if (Logger::enabled())
+        {
+            Logger::cout() << "l : " << *l << '\n';
+            Logger::cout() << "r : " << *r << '\n';
+        }
         r = DtoBitCast(r, l->getType()->getContainedType(0));
         DtoStore(r, l);
     }
@@ -499,7 +503,8 @@
     else {
         LLValue* l = lhs->getLVal();
         LLValue* r = rhs->getRVal();
-        Logger::cout() << "assign\nlhs: " << *l << "rhs: " << *r << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "assign\nlhs: " << *l << "rhs: " << *r << '\n';
         const LLType* lit = l->getType()->getContainedType(0);
         if (r->getType() != lit) {
             // handle lvalue cast assignments
@@ -510,7 +515,8 @@
             else {
                 r = DtoCast(loc, rhs, lhs->getType())->getRVal();
             }
-            Logger::cout() << "really assign\nlhs: " << *l << "rhs: " << *r << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "really assign\nlhs: " << *l << "rhs: " << *r << '\n';
             assert(r->getType() == l->getType()->getContainedType(0));
         }
         gIR->ir->CreateStore(r, l);
@@ -584,7 +590,8 @@
 
     if (to->isintegral()) {
         if (fromsz < tosz) {
-            Logger::cout() << "cast to: " << *tolltype << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "cast to: " << *tolltype << '\n';
             if (from->isunsigned() || from->ty == Tbool) {
                 rval = new llvm::ZExtInst(rval, tolltype, "tmp", gIR->scopebb());
             } else {
@@ -610,7 +617,8 @@
         }
     }
     else if (to->ty == Tpointer) {
-        Logger::cout() << "cast pointer: " << *tolltype << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "cast pointer: " << *tolltype << '\n';
         rval = gIR->ir->CreateIntToPtr(rval, tolltype, "tmp");
     }
     else {
@@ -633,7 +641,8 @@
 
     if (totype->ty == Tpointer || totype->ty == Tclass) {
         LLValue* src = val->getRVal();
-        Logger::cout() << "src: " << *src << "to type: " << *tolltype << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "src: " << *src << "to type: " << *tolltype << '\n';
         rval = DtoBitCast(src, tolltype);
     }
     else if (totype->isintegral()) {
@@ -910,7 +919,9 @@
 
     //Logger::cout() << "initializer: " << *_init << '\n';
     if (_type != _init->getType()) {
-        Logger::cout() << "got type '" << *_init->getType() << "' expected '" << *_type << "'\n";
+        if (Logger::enabled())
+            Logger::cout() << "got type '" << *_init->getType() << "' expected '" << *_type << "'\n";
+
         // zero initalizer
         if (_init->isNullValue())
             _init = llvm::Constant::getNullValue(_type);
@@ -930,7 +941,8 @@
             _init = DtoConstStaticArray(_type, _init);
         }
         else {
-            Logger::cout() << "Unexpected initializer type: " << *_type << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "Unexpected initializer type: " << *_type << '\n';
             //assert(0);
         }
     }
@@ -950,9 +962,12 @@
     llvm::GlobalVariable* gvar = llvm::cast<llvm::GlobalVariable>(vd->ir.irGlobal->value);
     if (!(vd->storage_class & STCextern) && (vd->getModule() == gIR->dmodule || istempl))
     {
-        Logger::println("setting initializer");
-        Logger::cout() << "global: " << *gvar << '\n';
-        Logger::cout() << "init:   " << *_init << '\n';
+        if (Logger::enabled())
+        {
+            Logger::println("setting initializer");
+            Logger::cout() << "global: " << *gvar << '\n';
+            Logger::cout() << "init:   " << *_init << '\n';
+        }
         gvar->setInitializer(_init);
         // do debug info
         if (global.params.symdebug)
@@ -1168,7 +1183,8 @@
                 assert(vd->ir.irLocal->value);
             }
 
-            Logger::cout() << "llvm value for decl: " << *vd->ir.irLocal->value << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "llvm value for decl: " << *vd->ir.irLocal->value << '\n';
             DValue* ie = DtoInitializer(vd->ir.irLocal->value, vd->init);
         }
 
@@ -1292,7 +1308,8 @@
     assert(_init);
     if (_type != _init->getType())
     {
-        Logger::cout() << "field init is: " << *_init << " type should be " << *_type << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "field init is: " << *_init << " type should be " << *_type << '\n';
         if (t->ty == Tsarray)
         {
             const LLArrayType* arrty = isaArray(_type);
@@ -1379,7 +1396,8 @@
 {
     Logger::println("building type %s from expression (%s) of type %s", base->toChars(), exp->toChars(), exp->type->toChars());
     const LLType* dstTy = DtoType(base);
-    Logger::cout() << "final llvm type requested: " << *dstTy << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "final llvm type requested: " << *dstTy << '\n';
     
     LLConstant* val = exp->toConstElem(gIR);
     
@@ -1510,8 +1528,11 @@
     else if (ty == Tpointer || ty == Tclass) {
         LLValue* val = dval->getRVal();
         LLValue* zero = LLConstant::getNullValue(val->getType());
-        Logger::cout() << "val:  " << *val << '\n';
-        Logger::cout() << "zero: " << *zero << '\n';
+        if (Logger::enabled())
+        {
+            Logger::cout() << "val:  " << *val << '\n';
+            Logger::cout() << "zero: " << *zero << '\n';
+        }
         return gIR->ir->CreateICmpNE(val, zero, "tmp");
     }
     // dynamic array
--- a/gen/statements.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/statements.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -79,13 +79,16 @@
             DValue* e = exp->toElem(p);
             LLValue* v = e->getRVal();
             delete e;
-            Logger::cout() << "return value is '" <<*v << "'\n";
+
+            if (Logger::enabled())
+                Logger::cout() << "return value is '" <<*v << "'\n";
 
             // can happen for classes
             if (v->getType() != p->topfunc()->getReturnType())
             {
                 v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp");
-                Logger::cout() << "return value after cast: " << *v << '\n';
+                if (Logger::enabled())
+                    Logger::cout() << "return value after cast: " << *v << '\n';
             }
 
             DtoEnclosingHandlers(enclosinghandler, NULL);
@@ -165,7 +168,8 @@
     llvm::BasicBlock* elsebb = elsebody ? llvm::BasicBlock::Create("else", gIR->topfunc(), endbb) : endbb;
 
     if (cond_val->getType() != LLType::Int1Ty) {
-        Logger::cout() << "if conditional: " << *cond_val << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "if conditional: " << *cond_val << '\n';
         cond_val = DtoBoolean(loc, cond_e);
     }
     LLValue* ifgoback = llvm::BranchInst::Create(ifbb, elsebb, cond_val, gIR->scopebb());
@@ -677,8 +681,11 @@
 
     llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, fname);
 
-    Logger::cout() << *table->getType() << '\n';
-    Logger::cout() << *fn->getFunctionType()->getParamType(0) << '\n';
+    if (Logger::enabled())
+    {
+        Logger::cout() << *table->getType() << '\n';
+        Logger::cout() << *fn->getFunctionType()->getParamType(0) << '\n';
+    }
     assert(table->getType() == fn->getFunctionType()->getParamType(0));
 
     DValue* val = e->toElem(gIR);
--- a/gen/structs.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/structs.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -29,7 +29,9 @@
     DtoResolveDsymbol(si->ad);
 
     const llvm::StructType* structtype = isaStruct(ts->ir.type->get());
-    Logger::cout() << "llvm struct type: " << *structtype << '\n';
+
+    if (Logger::enabled())
+        Logger::cout() << "llvm struct type: " << *structtype << '\n';
 
     assert(si->value.dim == si->vars.dim);
 
@@ -61,8 +63,11 @@
     const LLType* llt = getPtrToType(DtoType(t));
     const LLType* st = getPtrToType(DtoType(sd->type));
 
-    Logger::cout() << "ptr = " << *ptr << '\n';
-    Logger::cout() << "st  = " << *st << '\n';
+    if (Logger::enabled())
+    {
+        Logger::cout() << "ptr = " << *ptr << '\n';
+        Logger::cout() << "st  = " << *st << '\n';
+    }
 
     if (ptr->getType() != st) {
         assert(sd->ir.irStruct->hasUnions);
--- a/gen/tocall.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/tocall.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -76,7 +76,8 @@
     else if (type->ty == Tdelegate)
     {
         LLValue* dg = fn->getRVal();
-        Logger::cout() << "delegate: " << *dg << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "delegate: " << *dg << '\n';
         LLValue* funcptr = DtoGEPi(dg, 0, 1);
         return DtoLoad(funcptr);
     }
@@ -126,7 +127,10 @@
             vtypes.back() = DtoSize_t();
     }
     const LLStructType* vtype = LLStructType::get(vtypes);
-    Logger::cout() << "d-variadic argument struct type:\n" << *vtype << '\n';
+
+    if (Logger::enabled())
+        Logger::cout() << "d-variadic argument struct type:\n" << *vtype << '\n';
+
     LLValue* mem = DtoAlloca(vtype,"_argptr_storage");
 
     // store arguments in the struct
@@ -147,7 +151,8 @@
 
     llvm::GlobalVariable* typeinfomem =
         new llvm::GlobalVariable(typeinfoarraytype, true, llvm::GlobalValue::InternalLinkage, NULL, "._arguments.storage", gIR->module);
-    Logger::cout() << "_arguments storage: " << *typeinfomem << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "_arguments storage: " << *typeinfomem << '\n';
 
     std::vector<LLConstant*> vtypeinfos;
     for (int i=begin,k=0; i<n_arguments; i++,k++)
@@ -314,8 +319,11 @@
             LLValue* arg = argval->getRVal();
             if (fnarg) // can fnarg ever be null in this block?
             {
-                Logger::cout() << "arg:     " << *arg << '\n';
-                Logger::cout() << "expects: " << *callableTy->getParamType(j) << '\n';
+//                 if (Logger::enabled())
+//                 {
+//                     Logger::cout() << "arg:     " << *arg << '\n';
+//                     Logger::cout() << "expects: " << *callableTy->getParamType(j) << '\n';
+//                 }
                 if (arg->getType() != callableTy->getParamType(j))
                     arg = DtoBitCast(arg, callableTy->getParamType(j));
                 if (fnarg->llvmAttrs)
--- a/gen/toir.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/toir.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -132,7 +132,8 @@
             }
             if (!vd->ir.isSet() || !vd->ir.getIrValue() || DtoType(vd->type)->isAbstract()) {
                 error("global variable %s not resolved", vd->toChars());
-                Logger::cout() << "unresolved global had type: " << *DtoType(vd->type) << '\n';
+                if (Logger::enabled())
+                    Logger::cout() << "unresolved global had type: " << *DtoType(vd->type) << '\n';
                 fatal();
             }
             return new DVarValue(type, vd, vd->ir.getIrValue());
@@ -222,7 +223,8 @@
     assert(llvm::isa<LLIntegerType>(t));
     LLConstant* c = llvm::ConstantInt::get(t,(uint64_t)value,!type->isunsigned());
     assert(c);
-    Logger::cout() << "value = " << *c << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "value = " << *c << '\n';
     return c;
 }
 
@@ -353,7 +355,8 @@
     assert(0);
 
     llvm::GlobalValue::LinkageTypes _linkage = llvm::GlobalValue::InternalLinkage;//WeakLinkage;
-    Logger::cout() << "type: " << *at << "\ninit: " << *_init << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "type: " << *at << "\ninit: " << *_init << '\n';
     llvm::GlobalVariable* gvar = new llvm::GlobalVariable(at,true,_linkage,_init,".stringliteral",gIR->module);
 
     llvm::ConstantInt* zero = llvm::ConstantInt::get(LLType::Int32Ty, 0, false);
@@ -588,7 +591,8 @@
     if (t1->ty == Tpointer && t2->ty == Tpointer) {
         LLValue* lv = l->getRVal();
         LLValue* rv = r->getRVal();
-        Logger::cout() << "lv: " << *lv << " rv: " << *rv << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "lv: " << *lv << " rv: " << *rv << '\n';
         lv = p->ir->CreatePtrToInt(lv, DtoSize_t(), "tmp");
         rv = p->ir->CreatePtrToInt(rv, DtoSize_t(), "tmp");
         LLValue* diff = p->ir->CreateSub(lv,rv,"tmp");
@@ -869,7 +873,8 @@
     }
     Logger::println("is nothing special");
     LLValue* lval = v->getLVal();
-    Logger::cout() << "lval: " << *lval << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "lval: " << *lval << '\n';
     return new DImValue(type, DtoBitCast(v->getLVal(), DtoType(type)));
 }
 
@@ -1009,14 +1014,16 @@
 
             LLValue* zero = llvm::ConstantInt::get(LLType::Int32Ty, 0, false);
             LLValue* vtblidx = llvm::ConstantInt::get(LLType::Int32Ty, (size_t)fdecl->vtblIndex, false);
-            Logger::cout() << "vthis: " << *vthis << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "vthis: " << *vthis << '\n';
             funcval = DtoGEP(vthis, zero, zero);
             funcval = DtoLoad(funcval);
             funcval = DtoGEP(funcval, zero, vtblidx, toChars());
             funcval = DtoLoad(funcval);
         #if OPAQUE_VTBLS
             funcval = DtoBitCast(funcval, getPtrToType(DtoType(fdecl->type)));
-            Logger::cout() << "funcval casted: " << *funcval << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "funcval casted: " << *funcval << '\n';
         #endif
         }
         // static call
@@ -1248,8 +1255,11 @@
         {
             LLValue* a = l->getRVal();
             LLValue* b = r->getRVal();
-            Logger::cout() << "type 1: " << *a << '\n';
-            Logger::cout() << "type 2: " << *b << '\n';
+            if (Logger::enabled())
+            {
+                Logger::cout() << "type 1: " << *a << '\n';
+                Logger::cout() << "type 2: " << *b << '\n';
+            }
             if (a->getType() != b->getType())
                 b = DtoBitCast(b, a->getType());
             eval = p->ir->CreateICmp(cmpop, a, b, "tmp");
@@ -1871,7 +1881,8 @@
         uval = src->getRVal();
     }
 
-    Logger::cout() << "context = " << *uval << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "context = " << *uval << '\n';
 
     LLValue* context = DtoGEPi(lval,0,0);
     LLValue* castcontext = DtoBitCast(uval, int8ptrty);
@@ -2160,12 +2171,14 @@
 
     // llvm target type
     const LLType* llType = DtoType(arrayType);
-    Logger::cout() << (dyn?"dynamic":"static") << " array literal with length " << len << " of D type: '" << arrayType->toChars() << "' has llvm type: '" << *llType << "'\n";
+    if (Logger::enabled())
+        Logger::cout() << (dyn?"dynamic":"static") << " array literal with length " << len << " of D type: '" << arrayType->toChars() << "' has llvm type: '" << *llType << "'\n";
 
     // llvm storage type
     const LLType* llElemType = DtoTypeNotVoid(elemType);
     const LLType* llStoType = LLArrayType::get(llElemType, len);
-    Logger::cout() << "llvm storage type: '" << *llStoType << "'\n";
+    if (Logger::enabled())
+        Logger::cout() << "llvm storage type: '" << *llStoType << "'\n";
 
     // don't allocate storage for zero length dynamic array literals
     if (dyn && len == 0)
@@ -2285,11 +2298,13 @@
         const LLStructType* t = LLStructType::get(tys, sd->ir.irStruct->packed);
         if (t != llt) {
             if (getABITypeSize(t) != getABITypeSize(llt)) {
-                Logger::cout() << "got size " << getABITypeSize(t) << ", expected " << getABITypeSize(llt) << '\n';
+                if (Logger::enabled())
+                    Logger::cout() << "got size " << getABITypeSize(t) << ", expected " << getABITypeSize(llt) << '\n';
                 assert(0 && "type size mismatch");
             }
             sptr = DtoBitCast(sptr, getPtrToType(t));
-            Logger::cout() << "sptr type is now: " << *t << '\n';
+            if (Logger::enabled())
+                Logger::cout() << "sptr type is now: " << *t << '\n';
         }
     }
 
@@ -2300,7 +2315,8 @@
         Expression* vx = (Expression*)elements->data[i];
         if (!vx) continue;
 
-        Logger::cout() << "getting index " << j << " of " << *sptr << '\n';
+        if (Logger::enabled())
+            Logger::cout() << "getting index " << j << " of " << *sptr << '\n';
         LLValue* arrptr = DtoGEPi(sptr,0,j);
         DValue* darrptr = new DVarValue(vx->type, arrptr);
 
--- a/gen/tollvm.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/tollvm.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -319,7 +319,8 @@
     // something else unsupported
     else
     {
-        Logger::cout() << *ptrTy << '|' << *valTy << '\n';
+        if (Logger::enabled())
+            Logger::cout() << *ptrTy << '|' << *valTy << '\n';
         assert(0);
     }
     return 0;
--- a/gen/toobj.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/toobj.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -61,10 +61,10 @@
         Logger::enable();
     }
 
-    Logger::cout() << "Generating module: " << (md ? md->toChars() : toChars()) << '\n';
+    Logger::println("Generating module: %s\n", (md ? md->toChars() : toChars()));
     LOG_SCOPE;
 
-    //printf("codegen: %s\n", srcfile->toChars());
+    printf("codegen: %s\n", srcfile->toChars());
 
     // start by deleting the old object file
     deleteObjFile();
@@ -652,7 +652,8 @@
         llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_type,_isconst,_linkage,NULL,_name,gIR->module);
         this->ir.irGlobal->value = gvar;
 
-        Logger::cout() << *gvar << '\n';
+        if (Logger::enabled())
+            Logger::cout() << *gvar << '\n';
 
         if (static_local)
             DtoConstInitGlobal(this);
--- a/gen/typinf.cpp	Wed Oct 01 17:54:50 2008 +0200
+++ b/gen/typinf.cpp	Wed Oct 01 18:33:21 2008 +0200
@@ -369,7 +369,8 @@
     DtoForceConstInitDsymbol(base);
 
     const LLStructType* stype = isaStruct(base->type->ir.type->get());
-    Logger::cout() << "got stype: " << *stype << '\n';
+    if (Logger::enabled())
+        Logger::cout() << "got stype: " << *stype << '\n';
 
     // vtbl
     std::vector<LLConstant*> sinits;