Mercurial > projects > ldc
comparison gen/arrays.cpp @ 205:9d44ec83acd1 trunk
[svn r221] Update: Switched to the 2.3 LLVM svn branch, http://llvm.org/svn/llvm-project/llvm/branches/release_23 .
Fixed: Implemented volatile statements. Uses the LLVM memory barrier intrinsic, closes #21 .
author | lindquist |
---|---|
date | Tue, 13 May 2008 17:58:11 +0200 |
parents | e881c9b1c738 |
children | f66219e0d530 |
comparison
equal
deleted
inserted
replaced
204:11fe364b9a3e | 205:9d44ec83acd1 |
---|---|
246 } | 246 } |
247 | 247 |
248 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, funcname); | 248 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, funcname); |
249 assert(fn); | 249 assert(fn); |
250 Logger::cout() << "calling array init function: " << *fn <<'\n'; | 250 Logger::cout() << "calling array init function: " << *fn <<'\n'; |
251 llvm::CallInst* call = new llvm::CallInst(fn, args.begin(), args.end(), "", gIR->scopebb()); | 251 llvm::CallInst* call = llvm::CallInst::Create(fn, args.begin(), args.end(), "", gIR->scopebb()); |
252 call->setCallingConv(llvm::CallingConv::C); | 252 call->setCallingConv(llvm::CallingConv::C); |
253 } | 253 } |
254 | 254 |
255 ////////////////////////////////////////////////////////////////////////////////////////// | 255 ////////////////////////////////////////////////////////////////////////////////////////// |
256 | 256 |
442 llargs[0] = dstarr; | 442 llargs[0] = dstarr; |
443 llargs[1] = srcarr; | 443 llargs[1] = srcarr; |
444 llargs[2] = sz1; | 444 llargs[2] = sz1; |
445 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); | 445 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); |
446 | 446 |
447 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); | 447 llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); |
448 } | 448 } |
449 | 449 |
450 void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src) | 450 void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src) |
451 { | 451 { |
452 Logger::println("ArrayCopyToSlice"); | 452 Logger::println("ArrayCopyToSlice"); |
462 llargs[0] = dstarr; | 462 llargs[0] = dstarr; |
463 llargs[1] = srcarr; | 463 llargs[1] = srcarr; |
464 llargs[2] = sz1; | 464 llargs[2] = sz1; |
465 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); | 465 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); |
466 | 466 |
467 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); | 467 llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); |
468 } | 468 } |
469 | 469 |
470 ////////////////////////////////////////////////////////////////////////////////////////// | 470 ////////////////////////////////////////////////////////////////////////////////////////// |
471 void DtoStaticArrayCopy(llvm::Value* dst, llvm::Value* src) | 471 void DtoStaticArrayCopy(llvm::Value* dst, llvm::Value* src) |
472 { | 472 { |
485 llargs[0] = dstarr; | 485 llargs[0] = dstarr; |
486 llargs[1] = srcarr; | 486 llargs[1] = srcarr; |
487 llargs[2] = n; | 487 llargs[2] = n; |
488 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); | 488 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); |
489 | 489 |
490 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); | 490 llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); |
491 } | 491 } |
492 | 492 |
493 ////////////////////////////////////////////////////////////////////////////////////////// | 493 ////////////////////////////////////////////////////////////////////////////////////////// |
494 llvm::Constant* DtoConstSlice(llvm::Constant* dim, llvm::Constant* ptr) | 494 llvm::Constant* DtoConstSlice(llvm::Constant* dim, llvm::Constant* ptr) |
495 { | 495 { |
577 | 577 |
578 DValue* newdim = new DImValue(Type::tsize_t, len); | 578 DValue* newdim = new DImValue(Type::tsize_t, len); |
579 DSliceValue* slice = DtoResizeDynArray(array->getType(), array, newdim); | 579 DSliceValue* slice = DtoResizeDynArray(array->getType(), array, newdim); |
580 | 580 |
581 llvm::Value* ptr = slice->ptr; | 581 llvm::Value* ptr = slice->ptr; |
582 ptr = new llvm::GetElementPtrInst(ptr, idx, "tmp", gIR->scopebb()); | 582 ptr = llvm::GetElementPtrInst::Create(ptr, idx, "tmp", gIR->scopebb()); |
583 | 583 |
584 DValue* dptr = new DVarValue(exp->type, ptr, true); | 584 DValue* dptr = new DVarValue(exp->type, ptr, true); |
585 | 585 |
586 gIR->exps.push_back(IRExp(0,exp,dptr)); | 586 gIR->exps.push_back(IRExp(0,exp,dptr)); |
587 DValue* e = exp->toElem(gIR); | 587 DValue* e = exp->toElem(gIR); |
895 args.push_back(len); | 895 args.push_back(len); |
896 args.push_back(llvm::ConstantInt::get(DtoSize_t(), esz, false)); | 896 args.push_back(llvm::ConstantInt::get(DtoSize_t(), esz, false)); |
897 args.push_back(llvm::ConstantInt::get(DtoSize_t(), nsz, false)); | 897 args.push_back(llvm::ConstantInt::get(DtoSize_t(), nsz, false)); |
898 | 898 |
899 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_cast_len"); | 899 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_cast_len"); |
900 return new llvm::CallInst(fn, args.begin(), args.end(), "tmp", gIR->scopebb()); | 900 return llvm::CallInst::Create(fn, args.begin(), args.end(), "tmp", gIR->scopebb()); |
901 } | 901 } |
902 | 902 |
903 ////////////////////////////////////////////////////////////////////////////////////////// | 903 ////////////////////////////////////////////////////////////////////////////////////////// |
904 llvm::Value* DtoDynArrayIs(TOK op, llvm::Value* l, llvm::Value* r) | 904 llvm::Value* DtoDynArrayIs(TOK op, llvm::Value* l, llvm::Value* r) |
905 { | 905 { |