Mercurial > projects > ldc
comparison gen/arrays.cpp @ 655:93433f4b6963
Added -version=Tango in default llvmdc.conf
Fixed problem with array casts, all DWT modules needed for HelloWorld1 samples now compile. Still some linking issues.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Mon, 06 Oct 2008 12:46:57 +0200 |
parents | df196c8dea26 |
children | b411c41a9716 |
comparison
equal
deleted
inserted
replaced
654:961221d5a49c | 655:93433f4b6963 |
---|---|
996 rval2 = DtoArrayLen(usl); | 996 rval2 = DtoArrayLen(usl); |
997 else | 997 else |
998 rval2 = DtoArrayCastLength(DtoArrayLen(usl), ety, ptrty->getContainedType(0)); | 998 rval2 = DtoArrayCastLength(DtoArrayLen(usl), ety, ptrty->getContainedType(0)); |
999 } | 999 } |
1000 else { | 1000 else { |
1001 LLValue* uval = u->getRVal(); | |
1002 if (fromtype->ty == Tsarray) { | 1001 if (fromtype->ty == Tsarray) { |
1002 LLValue* uval = u->getRVal(); | |
1003 | |
1003 if (Logger::enabled()) | 1004 if (Logger::enabled()) |
1004 Logger::cout() << "uvalTy = " << *uval->getType() << '\n'; | 1005 Logger::cout() << "uvalTy = " << *uval->getType() << '\n'; |
1006 | |
1005 assert(isaPointer(uval->getType())); | 1007 assert(isaPointer(uval->getType())); |
1006 const LLArrayType* arrty = isaArray(uval->getType()->getContainedType(0)); | 1008 const LLArrayType* arrty = isaArray(uval->getType()->getContainedType(0)); |
1007 | 1009 |
1008 if(arrty->getNumElements()*fromtype->next->size() % totype->next->size() != 0) | 1010 if(arrty->getNumElements()*fromtype->next->size() % totype->next->size() != 0) |
1009 { | 1011 { |
1014 rval2 = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false); | 1016 rval2 = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false); |
1015 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0)); | 1017 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0)); |
1016 rval = DtoBitCast(uval, ptrty); | 1018 rval = DtoBitCast(uval, ptrty); |
1017 } | 1019 } |
1018 else { | 1020 else { |
1019 LLValue* zero = llvm::ConstantInt::get(LLType::Int32Ty, 0, false); | 1021 rval2 = DtoArrayLen(u); |
1020 LLValue* one = llvm::ConstantInt::get(LLType::Int32Ty, 1, false); | |
1021 rval2 = DtoGEP(uval,zero,zero); | |
1022 rval2 = DtoLoad(rval2); | |
1023 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0)); | 1022 rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0)); |
1024 | 1023 |
1025 rval = DtoGEP(uval,zero,one); | 1024 rval = DtoArrayPtr(u); |
1026 rval = DtoLoad(rval); | |
1027 //Logger::cout() << *e->mem->getType() << '|' << *ptrty << '\n'; | |
1028 rval = DtoBitCast(rval, ptrty); | 1025 rval = DtoBitCast(rval, ptrty); |
1029 } | 1026 } |
1030 } | 1027 } |
1031 isslice = true; | 1028 isslice = true; |
1032 } | 1029 } |