diff gen/tollvm.cpp @ 96:ce7ed8f59b99 trunk

[svn r100] Moved test/ray.d to demos/ray.d. Cleanups.
author lindquist
date Mon, 12 Nov 2007 07:58:44 +0100
parents 61615fa85940
children c4e161556a21
line wrap: on
line diff
--- a/gen/tollvm.cpp	Mon Nov 12 06:43:33 2007 +0100
+++ b/gen/tollvm.cpp	Mon Nov 12 07:58:44 2007 +0100
@@ -259,11 +259,11 @@
             arg->llvmCopy = true;
 
         const llvm::Type* at = DtoType(argT);
-        if (llvm::isa<llvm::StructType>(at)) {
+        if (isaStruct(at)) {
             Logger::println("struct param");
             paramvec.push_back(llvm::PointerType::get(at));
         }
-        else if (llvm::isa<llvm::ArrayType>(at)) {
+        else if (isaArray(at)) {
             Logger::println("sarray param");
             assert(argT->ty == Tsarray);
             //paramvec.push_back(llvm::PointerType::get(at->getContainedType(0)));
@@ -271,14 +271,9 @@
         }
         else if (llvm::isa<llvm::OpaqueType>(at)) {
             Logger::println("opaque param");
-            if (argT->ty == Tstruct || argT->ty == Tclass)
-                paramvec.push_back(llvm::PointerType::get(at));
-            else
-            assert(0);
+            assert(argT->ty == Tstruct || argT->ty == Tclass);
+            paramvec.push_back(llvm::PointerType::get(at));
         }
-        /*if (llvm::isa<llvm::StructType>(at) || argT->ty == Tstruct || argT->ty == Tsarray) {
-            paramvec.push_back(llvm::PointerType::get(at));
-        }*/
         else {
             if (!arg->llvmCopy) {
                 Logger::println("ref param");
@@ -346,7 +341,7 @@
             Logger::print("isMember = this is: %s\n", ad->type->toChars());
             thisty = DtoType(ad->type);
             Logger::cout() << "this llvm type: " << *thisty << '\n';
-            if (llvm::isa<llvm::StructType>(thisty) || thisty == gIR->topstruct().recty.get())
+            if (isaStruct(thisty) || thisty == gIR->topstruct().recty.get())
                 thisty = llvm::PointerType::get(thisty);
         }
         else
@@ -609,7 +604,7 @@
             return new llvm::ICmpInst(llvm::ICmpInst::ICMP_NE, val, zero, "tmp", gIR->scopebb());
         }
     }
-    else if (llvm::isa<llvm::PointerType>(t)) {
+    else if (isaPointer(t)) {
         const llvm::Type* st = DtoSize_t();
         llvm::Value* ptrasint = new llvm::PtrToIntInst(val,st,"tmp",gIR->scopebb());
         llvm::Value* zero = llvm::ConstantInt::get(st, 0, false);
@@ -880,7 +875,7 @@
     else
     assert(0);
 
-    llvm::Function* func = llvm::cast_or_null<llvm::Function>(fn);
+    llvm::Function* func = llvm::dyn_cast<llvm::Function>(fn);
     assert(func);
     assert(func->isIntrinsic());
     fdecl->llvmValue = func;
@@ -1099,7 +1094,7 @@
         else {
             llvm::Value* allocaInst = 0;
             llvm::BasicBlock* entryblock = &gIR->topfunc()->front();
-            //const llvm::PointerType* pty = llvm::cast<llvm::PointerType>(arg->mem->getType());
+
             const llvm::Type* realtypell = DtoType(realtype);
             const llvm::PointerType* pty = llvm::PointerType::get(realtypell);
             if (argty == Tstruct) {
@@ -1397,7 +1392,7 @@
 
 bool DtoCanLoad(llvm::Value* ptr)
 {
-    if (llvm::isa<llvm::PointerType>(ptr->getType())) {
+    if (isaPointer(ptr->getType())) {
         return ptr->getType()->getContainedType(0)->isFirstClassType();
     }
     return false;
@@ -1413,16 +1408,31 @@
     return llvm::dyn_cast<llvm::PointerType>(v->getType());
 }
 
+const llvm::PointerType* isaPointer(const llvm::Type* t)
+{
+    return llvm::dyn_cast<llvm::PointerType>(t);
+}
+
 const llvm::ArrayType* isaArray(llvm::Value* v)
 {
     return llvm::dyn_cast<llvm::ArrayType>(v->getType());
 }
 
+const llvm::ArrayType* isaArray(const llvm::Type* t)
+{
+    return llvm::dyn_cast<llvm::ArrayType>(t);
+}
+
 const llvm::StructType* isaStruct(llvm::Value* v)
 {
     return llvm::dyn_cast<llvm::StructType>(v->getType());
 }
 
+const llvm::StructType* isaStruct(const llvm::Type* t)
+{
+    return llvm::dyn_cast<llvm::StructType>(t);
+}
+
 llvm::Constant* isaConstant(llvm::Value* v)
 {
     return llvm::dyn_cast<llvm::Constant>(v);
@@ -1433,6 +1443,11 @@
     return llvm::dyn_cast<llvm::ConstantInt>(v);
 }
 
+llvm::Argument* isaArgument(llvm::Value* v)
+{
+    return llvm::dyn_cast<llvm::Argument>(v);
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 
 bool DtoIsTemplateInstance(Dsymbol* s)