diff gen/arrays.cpp @ 133:44a95ac7368a trunk

[svn r137] Many fixes towards tango.io.Console working, but not quite there yet... In particular, assertions has been fixed to include file/line info, and much more!
author lindquist
date Mon, 14 Jan 2008 05:11:54 +0100
parents 1700239cab2e
children 0e28624814e8
line wrap: on
line diff
--- a/gen/arrays.cpp	Fri Jan 11 17:57:40 2008 +0100
+++ b/gen/arrays.cpp	Mon Jan 14 05:11:54 2008 +0100
@@ -24,7 +24,7 @@
     if (at == llvm::Type::VoidTy) {
         at = llvm::Type::Int8Ty;
     }
-    arrty = llvm::PointerType::get(at);
+    arrty = getPtrToType(at);
 
     std::vector<const llvm::Type*> members;
     if (global.params.is64bit)
@@ -98,7 +98,7 @@
             Logger::cout() << "invalid: " << *src << '\n';
             assert(0);
         }
-        llvm::Type* dstty = llvm::PointerType::get(arrty->getElementType());
+        const llvm::Type* dstty = getPtrToType(arrty->getElementType());
 
         llvm::Value* dstlen = DtoGEPi(dst,0,0,"tmp",gIR->scopebb());
         llvm::Value* srclen = DtoConstSize_t(arrty->getNumElements());
@@ -161,10 +161,10 @@
         llvm::Constant* c = isaConstant(dim);
         assert(c);
         dim = llvm::ConstantExpr::getMul(c, DtoConstSize_t(arrsz));
-        ptr = gIR->ir->CreateBitCast(ptr, llvm::PointerType::get(finalTy), "tmp");
+        ptr = gIR->ir->CreateBitCast(ptr, getPtrToType(finalTy), "tmp");
     }
     else if (isaStruct(t)) {
-        aggrsz = gTargetData->getTypeSize(t);
+        aggrsz = getABITypeSize(t);
         llvm::Constant* c = isaConstant(val);
         if (c && c->isNullValue()) {
             llvm::Value* nbytes;
@@ -176,7 +176,7 @@
             return;
         }
         else {
-            ptr = gIR->ir->CreateBitCast(ptr, llvm::PointerType::get(llvm::Type::Int8Ty), "tmp");
+            ptr = gIR->ir->CreateBitCast(ptr, getPtrToType(llvm::Type::Int8Ty), "tmp");
         }
     }
     else {
@@ -199,11 +199,11 @@
     else if (isaPointer(t)) {
         funcname = "_d_array_init_pointer";
 
-        const llvm::Type* dstty = llvm::PointerType::get(llvm::PointerType::get(llvm::Type::Int8Ty));
+        const llvm::Type* dstty = getPtrToType(getPtrToType(llvm::Type::Int8Ty));
         if (args[0]->getType() != dstty)
             args[0] = new llvm::BitCastInst(args[0],dstty,"tmp",gIR->scopebb());
 
-        const llvm::Type* valty = llvm::PointerType::get(llvm::Type::Int8Ty);
+        const llvm::Type* valty = getPtrToType(llvm::Type::Int8Ty);
         if (args[2]->getType() != valty)
             args[2] = new llvm::BitCastInst(args[2],valty,"tmp",gIR->scopebb());
     }
@@ -365,7 +365,7 @@
         // this means it's a real slice
         ret = e->ptr;
 
-        size_t elembsz = gTargetData->getTypeSize(ret->getType());
+        size_t elembsz = getABITypeSize(ret->getType());
         llvm::ConstantInt* elemsz = llvm::ConstantInt::get(DtoSize_t(), elembsz, false);
 
         if (isaConstantInt(e->len)) {
@@ -378,7 +378,7 @@
     else if (isaArray(t)) {
         ret = DtoGEPi(e->ptr, 0, 0, "tmp", gIR->scopebb());
 
-        size_t elembsz = gTargetData->getTypeSize(ret->getType()->getContainedType(0));
+        size_t elembsz = getABITypeSize(ret->getType()->getContainedType(0));
         llvm::ConstantInt* elemsz = llvm::ConstantInt::get(DtoSize_t(), elembsz, false);
 
         size_t numelements = isaArray(t)->getNumElements();
@@ -390,7 +390,7 @@
         ret = DtoGEPi(e->ptr, 0, 1, "tmp", gIR->scopebb());
         ret = new llvm::LoadInst(ret, "tmp", gIR->scopebb());
 
-        size_t elembsz = gTargetData->getTypeSize(ret->getType()->getContainedType(0));
+        size_t elembsz = getABITypeSize(ret->getType()->getContainedType(0));
         llvm::ConstantInt* elemsz = llvm::ConstantInt::get(DtoSize_t(), elembsz, false);
 
         llvm::Value* len = DtoGEPi(e->ptr, 0, 0, "tmp", gIR->scopebb());
@@ -405,7 +405,7 @@
 
 void DtoArrayCopySlices(DSliceValue* dst, DSliceValue* src)
 {
-    llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty);
+    const llvm::Type* arrty = getPtrToType(llvm::Type::Int8Ty);
 
     llvm::Value* sz1;
     llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb());
@@ -426,7 +426,7 @@
 
 void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src)
 {
-    llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty);
+    const llvm::Type* arrty = getPtrToType(llvm::Type::Int8Ty);
 
     llvm::Value* sz1;
     llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb());
@@ -447,10 +447,10 @@
 void DtoStaticArrayCopy(llvm::Value* dst, llvm::Value* src)
 {
     assert(dst->getType() == src->getType());
-    size_t arrsz = gTargetData->getTypeSize(dst->getType()->getContainedType(0));
+    size_t arrsz = getABITypeSize(dst->getType()->getContainedType(0));
     llvm::Value* n = llvm::ConstantInt::get(DtoSize_t(), arrsz, false);
 
-    llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty);
+    const llvm::Type* arrty = getPtrToType(llvm::Type::Int8Ty);
     llvm::Value* dstarr = new llvm::BitCastInst(dst,arrty,"tmp",gIR->scopebb());
     llvm::Value* srcarr = new llvm::BitCastInst(src,arrty,"tmp",gIR->scopebb());
 
@@ -483,11 +483,11 @@
 {
     const llvm::Type* ty = DtoType(dty);
     assert(ty != llvm::Type::VoidTy);
-    size_t sz = gTargetData->getTypeSize(ty);
+    size_t sz = getABITypeSize(ty);
     llvm::ConstantInt* n = llvm::ConstantInt::get(DtoSize_t(), sz, false);
     llvm::Value* bytesize = (sz == 1) ? dim : llvm::BinaryOperator::createMul(n,dim,"tmp",gIR->scopebb());
 
-    llvm::Value* nullptr = llvm::ConstantPointerNull::get(llvm::PointerType::get(ty));
+    llvm::Value* nullptr = llvm::ConstantPointerNull::get(getPtrToType(ty));
 
     llvm::Value* newptr = DtoRealloc(nullptr, bytesize);
 
@@ -510,7 +510,7 @@
     llvm::Value* ptr = DtoGEPi(arr, 0, 1, "tmp", gIR->scopebb());
     llvm::Value* ptrld = new llvm::LoadInst(ptr,"tmp",gIR->scopebb());
 
-    size_t isz = gTargetData->getTypeSize(ptrld->getType()->getContainedType(0));
+    size_t isz = getABITypeSize(ptrld->getType()->getContainedType(0));
     llvm::ConstantInt* n = llvm::ConstantInt::get(DtoSize_t(), isz, false);
     llvm::Value* bytesz = (isz == 1) ? sz : llvm::BinaryOperator::createMul(n,sz,"tmp",gIR->scopebb());
 
@@ -758,8 +758,8 @@
 //////////////////////////////////////////////////////////////////////////////////////////
 llvm::Value* DtoArrayCastLength(llvm::Value* len, const llvm::Type* elemty, const llvm::Type* newelemty)
 {
-    size_t esz = gTargetData->getTypeSize(elemty);
-    size_t nsz = gTargetData->getTypeSize(newelemty);
+    size_t esz = getABITypeSize(elemty);
+    size_t nsz = getABITypeSize(newelemty);
     if (esz == nsz)
         return len;
 
@@ -898,14 +898,14 @@
         llvm::Value* ptr = DtoGEPi(u->getRVal(),0,1,"tmp",gIR->scopebb());
         rval = new llvm::LoadInst(ptr, "tmp", gIR->scopebb());
         if (fromtype->next != totype->next)
-            rval = gIR->ir->CreateBitCast(rval, llvm::PointerType::get(llvm::Type::Int8Ty), "tmp");
+            rval = gIR->ir->CreateBitCast(rval, getPtrToType(llvm::Type::Int8Ty), "tmp");
     }
     else if (totype->ty == Tarray) {
         Logger::cout() << "to array" << '\n';
         const llvm::Type* ptrty = DtoType(totype->next);
         if (ptrty == llvm::Type::VoidTy)
             ptrty = llvm::Type::Int8Ty;
-        ptrty = llvm::PointerType::get(ptrty);
+        ptrty = getPtrToType(ptrty);
 
         const llvm::Type* ety = DtoType(fromtype->next);
         if (ety == llvm::Type::VoidTy)