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 }