Mercurial > projects > ldc
diff gen/toobj.cpp @ 920:545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Fixed align N; in asm blocks.
Fixed inreg parameter passing on x86 for ref/out params.
Removed support for lazy initialization of function local static variables, I have no idea why I ever implemented this, it's not in the D spec, and DMD doesn't support it :P
Some of the global variable related changes might cause minor regressions, but they should be easily fixable.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 03 Feb 2009 08:54:57 +0100 |
parents | c76f74d09fb1 |
children | d3a6f1a96731 |
line wrap: on
line diff
--- a/gen/toobj.cpp Mon Feb 02 02:35:44 2009 +0100 +++ b/gen/toobj.cpp Tue Feb 03 08:54:57 2009 +0100 @@ -914,22 +914,13 @@ Logger::println("parent: %s (%s)", parent->toChars(), parent->kind()); - // handle static local variables - bool static_local = false; #if DMDV2 // not sure why this is only needed for d2 bool _isconst = isConst() && init; #else bool _isconst = isConst(); #endif - Dsymbol* par = toParent2(); - if (par && par->isFuncDeclaration()) - { - static_local = true; - if (init && init->isExpInitializer()) { - _isconst = false; - } - } + Logger::println("Creating global variable"); @@ -943,10 +934,12 @@ if (Logger::enabled()) Logger::cout() << *gvar << '\n'; - if (static_local) - DtoConstInitGlobal(this); - else - gIR->constInitList.push_back(this); + // if this global is used from a nested function, this is necessary or + // optimization could potentially remove the global (if it's the only use) + if (nakedUse) + gIR->usedArray.push_back(DtoBitCast(gvar, getVoidPtrType())); + + gIR->constInitList.push_back(this); } else {