diff gen/arrays.cpp @ 244:a95056b3c996 trunk

[svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB. Did a lot of smaller cleans up here and there. Replaced more llvm::Foo with LLFoo for common stuff. Split up tollvm.cpp.
author lindquist
date Mon, 09 Jun 2008 09:37:08 +0200
parents 9760f54af0b7
children 665b81613475
line wrap: on
line diff
--- a/gen/arrays.cpp	Mon Jun 09 03:02:14 2008 +0200
+++ b/gen/arrays.cpp	Mon Jun 09 09:37:08 2008 +0200
@@ -8,6 +8,7 @@
 
 #include "gen/irstate.h"
 #include "gen/tollvm.h"
+#include "gen/llvmhelpers.h"
 #include "gen/arrays.h"
 #include "gen/runtime.h"
 #include "gen/logger.h"
@@ -15,23 +16,23 @@
 
 //////////////////////////////////////////////////////////////////////////////////////////
 
-const llvm::StructType* DtoArrayType(Type* arrayTy)
+const LLStructType* DtoArrayType(Type* arrayTy)
 {
     assert(arrayTy->next);
     const LLType* elemty = DtoType(arrayTy->next);
-    if (elemty == llvm::Type::VoidTy)
-        elemty = llvm::Type::Int8Ty;
-    return llvm::StructType::get(DtoSize_t(), getPtrToType(elemty), 0);
+    if (elemty == LLType::VoidTy)
+        elemty = LLType::Int8Ty;
+    return LLStructType::get(DtoSize_t(), getPtrToType(elemty), 0);
 }
 
-const llvm::StructType* DtoArrayType(const LLType* t)
+const LLStructType* DtoArrayType(const LLType* t)
 {
-    return llvm::StructType::get(DtoSize_t(), getPtrToType(t), 0);
+    return LLStructType::get(DtoSize_t(), getPtrToType(t), 0);
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
 
-const llvm::ArrayType* DtoStaticArrayType(Type* t)
+const LLArrayType* DtoStaticArrayType(Type* t)
 {
     if (t->ir.type)
         return isaArray(t->ir.type->get());
@@ -43,10 +44,10 @@
 
     TypeSArray* tsa = (TypeSArray*)t;
     assert(tsa->dim->type->isintegral());
-    const llvm::ArrayType* arrty = llvm::ArrayType::get(at,tsa->dim->toUInteger());
+    const LLArrayType* arrty = LLArrayType::get(at,tsa->dim->toUInteger());
 
     assert(!tsa->ir.type);
-    tsa->ir.type = new llvm::PATypeHolder(arrty);
+    tsa->ir.type = new LLPATypeHolder(arrty);
     return arrty;
 }
 
@@ -57,14 +58,14 @@
     Logger::println("DtoSetArrayToNull");
     LOG_SCOPE;
 
-    LLValue* len = DtoGEPi(v,0,0,"tmp",gIR->scopebb());
+    LLValue* len = DtoGEPi(v,0,0);
     LLValue* zerolen = llvm::ConstantInt::get(len->getType()->getContainedType(0), 0, false);
-    new llvm::StoreInst(zerolen, len, gIR->scopebb());
+    DtoStore(zerolen, len);
 
-    LLValue* ptr = DtoGEPi(v,0,1,"tmp",gIR->scopebb());
-    const llvm::PointerType* pty = isaPointer(ptr->getType()->getContainedType(0));
+    LLValue* ptr = DtoGEPi(v,0,1);
+    const LLPointerType* pty = isaPointer(ptr->getType()->getContainedType(0));
     LLValue* nullptr = llvm::ConstantPointerNull::get(pty);
-    new llvm::StoreInst(nullptr, ptr, gIR->scopebb());
+    DtoStore(nullptr, ptr);
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
@@ -77,20 +78,20 @@
     assert(gIR);
     if (dst->getType() == src->getType())
     {
-        LLValue* ptr = DtoGEPi(src,0,0,"tmp",gIR->scopebb());
-        LLValue* val = new llvm::LoadInst(ptr,"tmp",gIR->scopebb());
-        ptr = DtoGEPi(dst,0,0,"tmp",gIR->scopebb());
-        new llvm::StoreInst(val, ptr, gIR->scopebb());
+        LLValue* ptr = DtoGEPi(src,0,0);
+        LLValue* val = DtoLoad(ptr);
+        ptr = DtoGEPi(dst,0,0);
+        DtoStore(val, ptr);
 
-        ptr = DtoGEPi(src,0,1,"tmp",gIR->scopebb());
-        val = new llvm::LoadInst(ptr,"tmp",gIR->scopebb());
-        ptr = DtoGEPi(dst,0,1,"tmp",gIR->scopebb());
-        new llvm::StoreInst(val, ptr, gIR->scopebb());
+        ptr = DtoGEPi(src,0,1);
+        val = DtoLoad(ptr);
+        ptr = DtoGEPi(dst,0,1);
+        DtoStore(val, ptr);
     }
     else
     {
         Logger::cout() << "array assignment type dont match: " << *dst->getType() << "\n\n" << *src->getType() << '\n';
-        const llvm::ArrayType* arrty = isaArray(src->getType()->getContainedType(0));
+        const LLArrayType* arrty = isaArray(src->getType()->getContainedType(0));
         if (!arrty)
         {
             Logger::cout() << "invalid: " << *src << '\n';
@@ -98,13 +99,13 @@
         }
         const LLType* dstty = getPtrToType(arrty->getElementType());
 
-        LLValue* dstlen = DtoGEPi(dst,0,0,"tmp",gIR->scopebb());
+        LLValue* dstlen = DtoGEPi(dst,0,0);
         LLValue* srclen = DtoConstSize_t(arrty->getNumElements());
-        new llvm::StoreInst(srclen, dstlen, gIR->scopebb());
+        DtoStore(srclen, dstlen);
 
-        LLValue* dstptr = DtoGEPi(dst,0,1,"tmp",gIR->scopebb());
+        LLValue* dstptr = DtoGEPi(dst,0,1);
         LLValue* srcptr = DtoBitCast(src, dstty);
-        new llvm::StoreInst(srcptr, dstptr, gIR->scopebb());
+        DtoStore(srcptr, dstptr);
     }
 }
 
@@ -115,19 +116,19 @@
     Logger::println("DtoArrayInit");
     LOG_SCOPE;
 
-    const llvm::PointerType* ptrty = isaPointer(l->getType());
+    const LLPointerType* ptrty = isaPointer(l->getType());
     const LLType* t = ptrty->getContainedType(0);
-    const llvm::ArrayType* arrty = isaArray(t);
+    const LLArrayType* arrty = isaArray(t);
     if (arrty)
     {
-        LLValue* ptr = DtoGEPi(l,0,0,"tmp",gIR->scopebb());
-        LLValue* dim = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false);
+        LLValue* ptr = DtoGEPi(l,0,0);
+        LLValue* dim = DtoConstSize_t(arrty->getNumElements());
         DtoArrayInit(ptr, dim, r);
     }
     else if (isaStruct(t))
     {
-        LLValue* dim = DtoLoad(DtoGEPi(l, 0,0, "tmp"));
-        LLValue* ptr = DtoLoad(DtoGEPi(l, 0,1, "tmp"));
+        LLValue* dim = DtoLoad(DtoGEPi(l, 0,0));
+        LLValue* ptr = DtoLoad(DtoGEPi(l, 0,1));
         DtoArrayInit(ptr, dim, r);
     }
     else
@@ -140,7 +141,7 @@
 
 static size_t checkRectArrayInit(const LLType* pt, constLLVMTypeP& finalty)
 {
-    if (const llvm::ArrayType* arrty = isaArray(pt)) {
+    if (const LLArrayType* arrty = isaArray(pt)) {
         size_t n = checkRectArrayInit(arrty->getElementType(), finalty);
         size_t ne = arrty->getNumElements();
         if (n) return n * ne;
@@ -180,7 +181,7 @@
             return;
         }
         else {
-            ptr = gIR->ir->CreateBitCast(ptr, getPtrToType(llvm::Type::Int8Ty), "tmp");
+            ptr = gIR->ir->CreateBitCast(ptr, getPtrToType(LLType::Int8Ty), "tmp");
         }
     }
     else {
@@ -203,33 +204,33 @@
     else if (isaPointer(t)) {
         funcname = "_d_array_init_pointer";
 
-        const LLType* dstty = getPtrToType(getPtrToType(llvm::Type::Int8Ty));
+        const LLType* dstty = getPtrToType(getPtrToType(LLType::Int8Ty));
         if (args[0]->getType() != dstty)
             args[0] = DtoBitCast(args[0],dstty);
 
-        const LLType* valty = getPtrToType(llvm::Type::Int8Ty);
+        const LLType* valty = getPtrToType(LLType::Int8Ty);
         if (args[2]->getType() != valty)
             args[2] = DtoBitCast(args[2],valty);
     }
-    else if (t == llvm::Type::Int1Ty) {
+    else if (t == LLType::Int1Ty) {
         funcname = "_d_array_init_i1";
     }
-    else if (t == llvm::Type::Int8Ty) {
+    else if (t == LLType::Int8Ty) {
         funcname = "_d_array_init_i8";
     }
-    else if (t == llvm::Type::Int16Ty) {
+    else if (t == LLType::Int16Ty) {
         funcname = "_d_array_init_i16";
     }
-    else if (t == llvm::Type::Int32Ty) {
+    else if (t == LLType::Int32Ty) {
         funcname = "_d_array_init_i32";
     }
-    else if (t == llvm::Type::Int64Ty) {
+    else if (t == LLType::Int64Ty) {
         funcname = "_d_array_init_i64";
     }
-    else if (t == llvm::Type::FloatTy) {
+    else if (t == LLType::FloatTy) {
         funcname = "_d_array_init_float";
     }
-    else if (t == llvm::Type::DoubleTy) {
+    else if (t == LLType::DoubleTy) {
         funcname = "_d_array_init_double";
     }
     else {
@@ -237,7 +238,7 @@
         assert(0);
     }
 
-    llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, funcname);
+    LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, funcname);
     assert(fn);
     Logger::cout() << "calling array init function: " << *fn <<'\n';
     llvm::CallInst* call = llvm::CallInst::Create(fn, args.begin(), args.end(), "", gIR->scopebb());
@@ -248,25 +249,9 @@
 
 void DtoSetArray(LLValue* arr, LLValue* dim, LLValue* ptr)
 {
-    Logger::println("DtoSetArray");
-    LOG_SCOPE;
-
-    Logger::cout() << "arr = " << *arr << '\n';
-    Logger::cout() << "dim = " << *dim << '\n';
-    Logger::cout() << "ptr = " << *ptr << '\n';
-
-    const llvm::StructType* st = isaStruct(arr->getType()->getContainedType(0));
-
-    LLValue* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
-    LLValue* one = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1, false);
-
-    LLValue* arrdim = DtoGEP(arr,zero,zero,"tmp",gIR->scopebb());
-    Logger::cout() << "arrdim = " << *arrdim << '\n';
-    new llvm::StoreInst(dim, arrdim, gIR->scopebb());
-
-    LLValue* arrptr = DtoGEP(arr,zero,one,"tmp",gIR->scopebb());
-    Logger::cout() << "arrptr = " << *arrptr << '\n';
-    new llvm::StoreInst(ptr, arrptr, gIR->scopebb());
+    Logger::println("SetArray");
+    DtoStore(dim, DtoGEPi(arr,0,0));
+    DtoStore(ptr, DtoGEPi(arr,0,1));
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
@@ -326,7 +311,7 @@
                 LLConstant* cc = idx->toConstElem(gIR);
                 Logger::println("value gotten");
                 assert(cc != NULL);
-                llvm::ConstantInt* ci = llvm::dyn_cast<llvm::ConstantInt>(cc);
+                LLConstantInt* ci = llvm::dyn_cast<LLConstantInt>(cc);
                 assert(ci != NULL);
                 uint64_t k = ci->getZExtValue();
                 if (i == k)
@@ -356,15 +341,15 @@
     }
 
     Logger::println("building constant array");
-    const llvm::ArrayType* arrty = llvm::ArrayType::get(elemty,tdim);
-    LLConstant* constarr = llvm::ConstantArray::get(arrty, inits);
+    const LLArrayType* arrty = LLArrayType::get(elemty,tdim);
+    LLConstant* constarr = LLConstantArray::get(arrty, inits);
 
     if (arrinittype->ty == Tsarray)
         return constarr;
     else
         assert(arrinittype->ty == Tarray);
 
-    llvm::GlobalVariable* gvar = new llvm::GlobalVariable(arrty,true,llvm::GlobalValue::InternalLinkage,constarr,"constarray",gIR->module);
+    LLGlobalVariable* gvar = new LLGlobalVariable(arrty,true,LLGlobalValue::InternalLinkage,constarr,"constarray",gIR->module);
     LLConstant* idxs[2] = { DtoConstUint(0), DtoConstUint(0) };
     LLConstant* gep = llvm::ConstantExpr::getGetElementPtr(gvar,idxs,2);
     return DtoConstSlice(DtoConstSize_t(tdim),gep);
@@ -390,7 +375,7 @@
         }
     }
     else if (isaArray(t)) {
-        ret = DtoGEPi(e->ptr, 0, 0, "tmp", gIR->scopebb());
+        ret = DtoGEPi(e->ptr, 0, 0);
 
         size_t elembsz = getABITypeSize(ret->getType()->getContainedType(0));
         llvm::ConstantInt* elemsz = llvm::ConstantInt::get(DtoSize_t(), elembsz, false);
@@ -401,14 +386,14 @@
         sz = llvm::ConstantExpr::getMul(elemsz, nelems);
     }
     else if (isaStruct(t)) {
-        ret = DtoGEPi(e->ptr, 0, 1, "tmp", gIR->scopebb());
-        ret = new llvm::LoadInst(ret, "tmp", gIR->scopebb());
+        ret = DtoGEPi(e->ptr, 0, 1);
+        ret = DtoLoad(ret);
 
         size_t elembsz = getABITypeSize(ret->getType()->getContainedType(0));
         llvm::ConstantInt* elemsz = llvm::ConstantInt::get(DtoSize_t(), elembsz, false);
 
-        LLValue* len = DtoGEPi(e->ptr, 0, 0, "tmp", gIR->scopebb());
-        len = new llvm::LoadInst(len, "tmp", gIR->scopebb());
+        LLValue* len = DtoGEPi(e->ptr, 0, 0);
+        len = DtoLoad(len);
         sz = llvm::BinaryOperator::createMul(len,elemsz,"tmp",gIR->scopebb());
     }
     else {
@@ -420,63 +405,32 @@
 void DtoArrayCopySlices(DSliceValue* dst, DSliceValue* src)
 {
     Logger::println("ArrayCopySlices");
-    const LLType* arrty = getPtrToType(llvm::Type::Int8Ty);
-
-    LLValue* sz1;
-    LLValue* dstarr = DtoBitCast(get_slice_ptr(dst,sz1),arrty);
-
-    LLValue* sz2;
-    LLValue* srcarr = DtoBitCast(get_slice_ptr(src,sz2),arrty);
 
-    llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32();
-    LLSmallVector<LLValue*, 4> llargs(4);
-    llargs[0] = dstarr;
-    llargs[1] = srcarr;
-    llargs[2] = sz1;
-    llargs[3] = DtoConstInt(0);
+    LLValue *sz1,*sz2;
+    LLValue* dstarr = get_slice_ptr(dst,sz1);
+    LLValue* srcarr = get_slice_ptr(src,sz2);
 
-    llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
+    DtoMemCpy(dstarr, srcarr, sz1);
 }
 
 void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src)
 {
     Logger::println("ArrayCopyToSlice");
-    const LLType* arrty = getPtrToType(llvm::Type::Int8Ty);
 
     LLValue* sz1;
-    LLValue* dstarr = DtoBitCast(get_slice_ptr(dst,sz1),arrty);
-    LLValue* srcarr = DtoBitCast(DtoArrayPtr(src),arrty);
+    LLValue* dstarr = get_slice_ptr(dst,sz1);
+    LLValue* srcarr = DtoArrayPtr(src);
 
-    llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32();
-    LLSmallVector<LLValue*, 4> llargs(4);
-    llargs[0] = dstarr;
-    llargs[1] = srcarr;
-    llargs[2] = sz1;
-    llargs[3] = DtoConstInt(0);
-
-    llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
+    DtoMemCpy(dstarr, srcarr, sz1);
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
 void DtoStaticArrayCopy(LLValue* dst, LLValue* src)
 {
-    Logger::cout() << "static array copy: " << *dst << " from " << *src << '\n';
-    assert(dst->getType() == src->getType());
-    size_t arrsz = getABITypeSize(dst->getType()->getContainedType(0));
-    LLValue* n = llvm::ConstantInt::get(DtoSize_t(), arrsz, false);
-
-    const LLType* arrty = getPtrToType(llvm::Type::Int8Ty);
-    LLValue* dstarr = DtoBitCast(dst,arrty);
-    LLValue* srcarr = DtoBitCast(src,arrty);
+    Logger::println("StaticArrayCopy");
 
-    llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32();
-    LLSmallVector<LLValue*,4> llargs(4);
-    llargs[0] = dstarr;
-    llargs[1] = srcarr;
-    llargs[2] = n;
-    llargs[3] = DtoConstInt(0);
-
-    llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
+    size_t n = getABITypeSize(dst->getType()->getContainedType(0));
+    DtoMemCpy(dst, src, DtoConstSize_t(n));
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
@@ -501,7 +455,7 @@
 
     // get runtime function
     bool zeroInit = arrayType->toBasetype()->nextOf()->isZeroInit();
-    llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, zeroInit ? "_d_newarrayT" : "_d_newarrayiT" );
+    LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, zeroInit ? "_d_newarrayT" : "_d_newarrayiT" );
 
     // call allocator
     LLValue* newptr = gIR->ir->CreateCall2(fn, arrayTypeInfo, arrayLen, ".gc_mem");
@@ -538,7 +492,7 @@
     bool zeroInit = arrayType->toBasetype()->next->isZeroInit();
 
     // call runtime
-    llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, zeroInit ? "_d_arraysetlengthT" : "_d_arraysetlengthiT" );
+    LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, zeroInit ? "_d_arraysetlengthT" : "_d_arraysetlengthiT" );
 
     LLSmallVector<LLValue*,4> args;
     args.push_back(DtoTypeInfoOf(arrayType));
@@ -725,7 +679,7 @@
 static LLValue* DtoArrayEqCmp_impl(const char* func, DValue* l, DValue* r, bool useti)
 {
     Logger::println("comparing arrays");
-    llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, func);
+    LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, func);
     assert(fn);
 
     LLValue* lmem;
@@ -888,7 +842,7 @@
     args.push_back(llvm::ConstantInt::get(DtoSize_t(), esz, false));
     args.push_back(llvm::ConstantInt::get(DtoSize_t(), nsz, false));
 
-    llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_cast_len");
+    LLFunction* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_cast_len");
     return llvm::CallInst::Create(fn, args.begin(), args.end(), "tmp", gIR->scopebb());
 }
 
@@ -898,12 +852,12 @@
     llvm::ICmpInst::Predicate pred = (op == TOKidentity) ? llvm::ICmpInst::ICMP_EQ : llvm::ICmpInst::ICMP_NE;
 
     if (r == NULL) {
-        LLValue* ll = gIR->ir->CreateLoad(DtoGEPi(l, 0,0, "tmp"),"tmp");
+        LLValue* ll = gIR->ir->CreateLoad(DtoGEPi(l, 0,0),"tmp");
         LLValue* rl = llvm::Constant::getNullValue(ll->getType());//DtoConstSize_t(0);
         LLValue* b1 = gIR->ir->CreateICmp(pred,ll,rl,"tmp");
 
-        LLValue* lp = gIR->ir->CreateLoad(DtoGEPi(l, 0,1, "tmp"),"tmp");
-        const llvm::PointerType* pty = isaPointer(lp->getType());
+        LLValue* lp = gIR->ir->CreateLoad(DtoGEPi(l, 0,1),"tmp");
+        const LLPointerType* pty = isaPointer(lp->getType());
         LLValue* rp = llvm::ConstantPointerNull::get(pty);
         LLValue* b2 = gIR->ir->CreateICmp(pred,lp,rp,"tmp");
 
@@ -913,12 +867,12 @@
     else {
         assert(l->getType() == r->getType());
 
-        LLValue* ll = gIR->ir->CreateLoad(DtoGEPi(l, 0,0, "tmp"),"tmp");
-        LLValue* rl = gIR->ir->CreateLoad(DtoGEPi(r, 0,0, "tmp"),"tmp");
+        LLValue* ll = gIR->ir->CreateLoad(DtoGEPi(l, 0,0),"tmp");
+        LLValue* rl = gIR->ir->CreateLoad(DtoGEPi(r, 0,0),"tmp");
         LLValue* b1 = gIR->ir->CreateICmp(pred,ll,rl,"tmp");
 
-        LLValue* lp = gIR->ir->CreateLoad(DtoGEPi(l, 0,1, "tmp"),"tmp");
-        LLValue* rp = gIR->ir->CreateLoad(DtoGEPi(r, 0,1, "tmp"),"tmp");
+        LLValue* lp = gIR->ir->CreateLoad(DtoGEPi(l, 0,1),"tmp");
+        LLValue* rp = gIR->ir->CreateLoad(DtoGEPi(r, 0,1),"tmp");
         LLValue* b2 = gIR->ir->CreateICmp(pred,lp,rp,"tmp");
 
         LLValue* b = gIR->ir->CreateAnd(b1,b2,"tmp");
@@ -929,7 +883,7 @@
 //////////////////////////////////////////////////////////////////////////////////////////
 LLConstant* DtoConstStaticArray(const LLType* t, LLConstant* c)
 {
-    const llvm::ArrayType* at = isaArray(t);
+    const LLArrayType* at = isaArray(t);
     assert(at);
 
     if (isaArray(at->getElementType()))
@@ -956,19 +910,19 @@
             if (s->len) {
                 return s->len;
             }
-            const llvm::ArrayType* arrTy = isaArray(s->ptr->getType()->getContainedType(0));
+            const LLArrayType* arrTy = isaArray(s->ptr->getType()->getContainedType(0));
             if (arrTy)
                 return DtoConstSize_t(arrTy->getNumElements());
             else
-                return DtoLoad(DtoGEPi(s->ptr, 0,0, "tmp"));
+                return DtoLoad(DtoGEPi(s->ptr, 0,0));
         }
-        return DtoLoad(DtoGEPi(v->getRVal(), 0,0, "tmp"));
+        return DtoLoad(DtoGEPi(v->getRVal(), 0,0));
     }
     else if (t->ty == Tsarray) {
         assert(!v->isSlice());
         LLValue* rv = v->getRVal();
         Logger::cout() << "casting: " << *rv << '\n';
-        const llvm::ArrayType* t = isaArray(rv->getType()->getContainedType(0));
+        const LLArrayType* t = isaArray(rv->getType()->getContainedType(0));
         return DtoConstSize_t(t->getNumElements());
     }
     assert(0);
@@ -987,16 +941,16 @@
             if (s->len) return s->ptr;
             const LLType* t = s->ptr->getType()->getContainedType(0);
             Logger::cout() << "ptr of full slice: " << *s->ptr << '\n';
-            const llvm::ArrayType* arrTy = isaArray(s->ptr->getType()->getContainedType(0));
+            const LLArrayType* arrTy = isaArray(s->ptr->getType()->getContainedType(0));
             if (arrTy)
-                return DtoGEPi(s->ptr, 0,0, "tmp");
+                return DtoGEPi(s->ptr, 0,0);
             else
-                return DtoLoad(DtoGEPi(s->ptr, 0,1, "tmp"));
+                return DtoLoad(DtoGEPi(s->ptr, 0,1));
         }
-        return DtoLoad(DtoGEPi(v->getRVal(), 0,1, "tmp"));
+        return DtoLoad(DtoGEPi(v->getRVal(), 0,1));
     }
     else if (t->ty == Tsarray) {
-        return DtoGEPi(v->getRVal(), 0,0, "tmp");
+        return DtoGEPi(v->getRVal(), 0,0);
     }
     assert(0);
     return 0;
@@ -1028,13 +982,13 @@
     else if (totype->ty == Tarray) {
         Logger::cout() << "to array" << '\n';
         const LLType* ptrty = DtoType(totype->next);
-        if (ptrty == llvm::Type::VoidTy)
-            ptrty = llvm::Type::Int8Ty;
+        if (ptrty == LLType::VoidTy)
+            ptrty = LLType::Int8Ty;
         ptrty = getPtrToType(ptrty);
 
         const LLType* ety = DtoType(fromtype->next);
-        if (ety == llvm::Type::VoidTy)
-            ety = llvm::Type::Int8Ty;
+        if (ety == LLType::VoidTy)
+            ety = LLType::Int8Ty;
 
         if (DSliceValue* usl = u->isSlice()) {
             Logger::println("from slice");
@@ -1050,20 +1004,20 @@
             if (fromtype->ty == Tsarray) {
                 Logger::cout() << "uvalTy = " << *uval->getType() << '\n';
                 assert(isaPointer(uval->getType()));
-                const llvm::ArrayType* arrty = isaArray(uval->getType()->getContainedType(0));
+                const LLArrayType* arrty = isaArray(uval->getType()->getContainedType(0));
                 rval2 = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false);
                 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
                 rval = DtoBitCast(uval, ptrty);
             }
             else {
-                LLValue* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
-                LLValue* one = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1, false);
-                rval2 = DtoGEP(uval,zero,zero,"tmp",gIR->scopebb());
-                rval2 = new llvm::LoadInst(rval2, "tmp", gIR->scopebb());
+                LLValue* zero = llvm::ConstantInt::get(LLType::Int32Ty, 0, false);
+                LLValue* one = llvm::ConstantInt::get(LLType::Int32Ty, 1, false);
+                rval2 = DtoGEP(uval,zero,zero);
+                rval2 = DtoLoad(rval2);
                 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
 
-                rval = DtoGEP(uval,zero,one,"tmp",gIR->scopebb());
-                rval = new llvm::LoadInst(rval, "tmp", gIR->scopebb());
+                rval = DtoGEP(uval,zero,one);
+                rval = DtoLoad(rval);
                 //Logger::cout() << *e->mem->getType() << '|' << *ptrty << '\n';
                 rval = DtoBitCast(rval, ptrty);
             }