Mercurial > projects > ldc
comparison gen/toir.c @ 36:c0967c4b2a74 trunk
[svn r40] Cleaned up some of the array routines to use gep/load/store instead of memcpy/memset.
Resizing arrays did not allocate enough memory for types bigger than 1 byte.
author | lindquist |
---|---|
date | Tue, 09 Oct 2007 07:51:13 +0200 |
parents | 4648206ca213 |
children | 77cdca8c210f |
comparison
equal
deleted
inserted
replaced
35:3cfcb944304e | 36:c0967c4b2a74 |
---|---|
2156 elem* HaltExp::toElem(IRState* p) | 2156 elem* HaltExp::toElem(IRState* p) |
2157 { | 2157 { |
2158 Logger::print("HaltExp::toElem: %s | %s\n", toChars(), type->toChars()); | 2158 Logger::print("HaltExp::toElem: %s | %s\n", toChars(), type->toChars()); |
2159 LOG_SCOPE; | 2159 LOG_SCOPE; |
2160 | 2160 |
2161 std::vector<llvm::Value*> llargs; | 2161 llvm::Value* loca = llvm::ConstantInt::get(llvm::Type::Int32Ty, loc.linnum, false); |
2162 llargs.resize(3); | 2162 LLVM_DtoAssert(llvm::ConstantInt::getFalse(), loca, NULL); |
2163 llargs[0] = llvm::ConstantInt::get(llvm::Type::Int1Ty, 0, false); | 2163 |
2164 llargs[1] = llvm::ConstantInt::get(llvm::Type::Int32Ty, loc.linnum, false); | |
2165 llargs[2] = llvm::ConstantPointerNull::get(llvm::PointerType::get(llvm::Type::Int8Ty)); | |
2166 | |
2167 //Logger::cout() << *llargs[0] << '|' << *llargs[1] << '\n'; | |
2168 | |
2169 llvm::Function* fn = LLVM_D_GetRuntimeFunction(p->module, "_d_assert"); | |
2170 assert(fn); | |
2171 llvm::CallInst* call = new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", p->scopebb()); | |
2172 call->setCallingConv(llvm::CallingConv::C); | |
2173 | |
2174 //new llvm::UnreachableInst(p->scopebb()); | 2164 //new llvm::UnreachableInst(p->scopebb()); |
2175 | |
2176 return 0; | 2165 return 0; |
2177 } | 2166 } |
2178 | 2167 |
2179 ////////////////////////////////////////////////////////////////////////////////////////// | 2168 ////////////////////////////////////////////////////////////////////////////////////////// |
2180 | 2169 |
2342 | 2331 |
2343 e->val = llvm::BinaryOperator::createSub(zero,val,"tmp",p->scopebb()); | 2332 e->val = llvm::BinaryOperator::createSub(zero,val,"tmp",p->scopebb()); |
2344 e->type = elem::VAL; | 2333 e->type = elem::VAL; |
2345 | 2334 |
2346 return e; | 2335 return e; |
2336 } | |
2337 | |
2338 ////////////////////////////////////////////////////////////////////////////////////////// | |
2339 | |
2340 elem* CatExp::toElem(IRState* p) | |
2341 { | |
2342 Logger::print("CatExp::toElem: %s | %s\n", toChars(), type->toChars()); | |
2343 LOG_SCOPE; | |
2344 | |
2345 assert(0 && "array concatenation is not yet implemented"); | |
2346 | |
2347 elem* lhs = e1->toElem(p); | |
2348 elem* rhs = e2->toElem(p); | |
2349 | |
2350 // determine new size | |
2351 | |
2352 delete lhs; | |
2353 delete rhs; | |
2354 | |
2355 return 0; | |
2347 } | 2356 } |
2348 | 2357 |
2349 ////////////////////////////////////////////////////////////////////////////////////////// | 2358 ////////////////////////////////////////////////////////////////////////////////////////// |
2350 | 2359 |
2351 #define STUB(x) elem *x::toElem(IRState * p) {error("Exp type "#x" not implemented: %s", toChars()); fatal(); return 0; } | 2360 #define STUB(x) elem *x::toElem(IRState * p) {error("Exp type "#x" not implemented: %s", toChars()); fatal(); return 0; } |
2372 //STUB(DivAssignExp); | 2381 //STUB(DivAssignExp); |
2373 //STUB(MulExp); | 2382 //STUB(MulExp); |
2374 //STUB(MulAssignExp); | 2383 //STUB(MulAssignExp); |
2375 //STUB(ModExp); | 2384 //STUB(ModExp); |
2376 //STUB(ModAssignExp); | 2385 //STUB(ModAssignExp); |
2377 STUB(CatExp); | 2386 //STUB(CatExp); |
2378 STUB(CatAssignExp); | 2387 STUB(CatAssignExp); |
2379 //STUB(AddExp); | 2388 //STUB(AddExp); |
2380 //STUB(AddAssignExp); | 2389 //STUB(AddAssignExp); |
2381 STUB(Expression); | 2390 STUB(Expression); |
2382 //STUB(MinExp); | 2391 //STUB(MinExp); |