Mercurial > projects > ldc
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)