Mercurial > projects > ldc
diff gen/structs.cpp @ 217:0806379a5eca trunk
[svn r233] Added: -oq command line option for writing fully qualified object names.
Added: started support for x86 80bit floating point.
Changed: aggregates passed by value now use the llvm 'byval' parameter attribute, also lays ground work for
using other attributes.
Changed: eliminated a lot more std::vectorS, these showed up pretty much at the top when profiling!
Changed: performed other misc. cleanups.
Changed: halt expression now call the new llvm trap intrinsic instead of an assert(0).
Changed: dstress suite now passes -O0 by default, this only eliminates unreferenced globals, which speeds up
linking quite a bit.
author | lindquist |
---|---|
date | Thu, 05 Jun 2008 06:38:36 +0200 |
parents | 7816aafeea3c |
children | a95056b3c996 |
line wrap: on
line diff
--- a/gen/structs.cpp Tue Jun 03 22:32:59 2008 +0200 +++ b/gen/structs.cpp Thu Jun 05 06:38:36 2008 +0200 @@ -105,7 +105,7 @@ ////////////////////////////////////////////////////////////////////////////////////////// -LLValue* DtoIndexStruct(LLValue* ptr, StructDeclaration* sd, Type* t, unsigned os, std::vector<unsigned>& idxs) +LLValue* DtoIndexStruct(LLValue* ptr, StructDeclaration* sd, Type* t, unsigned os, DStructIndexVector& idxs) { Logger::println("checking for offset %u type %s:", os, t->toChars()); LOG_SCOPE; @@ -127,7 +127,7 @@ assert(vd->ir.irField->index >= 0); if (os == vd->offset && vdtype == t) { idxs.push_back(vd->ir.irField->index); - ptr = DtoGEP(ptr, idxs, "tmp"); + ptr = DtoGEPi(ptr, idxs, "tmp"); if (ptr->getType() != llt) ptr = gIR->ir->CreateBitCast(ptr, llt, "tmp"); if (vd->ir.irField->indexOffset) @@ -140,18 +140,18 @@ idxs.push_back(vd->ir.irField->index); if (vd->ir.irField->indexOffset) { Logger::println("has union field offset"); - ptr = DtoGEP(ptr, idxs, "tmp"); + ptr = DtoGEPi(ptr, idxs, "tmp"); if (ptr->getType() != llt) ptr = DtoBitCast(ptr, llt); ptr = llvm::GetElementPtrInst::Create(ptr, DtoConstUint(vd->ir.irField->indexOffset), "tmp", gIR->scopebb()); - std::vector<unsigned> tmp; + DStructIndexVector tmp; return DtoIndexStruct(ptr, ssd, t, os-vd->offset, tmp); } else { const LLType* sty = getPtrToType(DtoType(vd->type)); if (ptr->getType() != sty) { ptr = DtoBitCast(ptr, sty); - std::vector<unsigned> tmp; + DStructIndexVector tmp; return DtoIndexStruct(ptr, ssd, t, os-vd->offset, tmp); } else {