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 {