Changeset 632:df196c8dea26
- Timestamp:
- 10/01/08 17:17:14
(2 months ago)
- Author:
- Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
- branch:
- default
- Message:
Updated to latest LLVM trunk, function notes have been removed and merged with parameter attributes, which have been renamed to just attributes. Nothing seems to have broke!
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r622 |
r632 |
|
| 759 | 759 | |
|---|
| 760 | 760 | // set param attrs |
|---|
| 761 | | llvm::PAListPtr palist; |
|---|
| 762 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 763 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 764 | | call->setParamAttrs(palist); |
|---|
| | 761 | llvm::AttrListPtr palist; |
|---|
| | 762 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 763 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 764 | call->setAttributes(palist); |
|---|
| 765 | 765 | |
|---|
| 766 | 766 | return call->get(); |
|---|
| … | … | |
| 1073 | 1073 | |
|---|
| 1074 | 1074 | std::vector<LLValue*> args; |
|---|
| 1075 | | llvm::PAListPtr palist; |
|---|
| | 1075 | llvm::AttrListPtr palist; |
|---|
| 1076 | 1076 | |
|---|
| 1077 | 1077 | // file param |
|---|
| … | … | |
| 1091 | 1091 | |
|---|
| 1092 | 1092 | args.push_back(alloc); |
|---|
| 1093 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| | 1093 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| 1094 | 1094 | |
|---|
| 1095 | 1095 | // line param |
|---|
| … | … | |
| 1100 | 1100 | llvm::Function* errorfn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_bounds"); |
|---|
| 1101 | 1101 | CallOrInvoke* call = gIR->CreateCallOrInvoke(errorfn, args.begin(), args.end()); |
|---|
| 1102 | | call->setParamAttrs(palist); |
|---|
| | 1102 | call->setAttributes(palist); |
|---|
| 1103 | 1103 | |
|---|
| 1104 | 1104 | // the function does not return |
|---|
| r205 |
r632 |
|
| 10 | 10 | #include <llvm/Instructions.h> |
|---|
| 11 | 11 | #include <llvm/InlineAsm.h> |
|---|
| 12 | | #include <llvm/ParameterAttributes.h> |
|---|
| | 12 | #include <llvm/Attributes.h> |
|---|
| 13 | 13 | #include <llvm/Support/MathExtras.h> |
|---|
| 14 | 14 | #include <llvm/Pass.h> |
|---|
| r622 |
r632 |
|
| 133 | 133 | paramvec.push_back(getPtrToType(at)); |
|---|
| 134 | 134 | if (!refOrOut) |
|---|
| 135 | | arg->llvmAttrs |= llvm::ParamAttr::ByVal; |
|---|
| | 135 | arg->llvmAttrs |= llvm::Attribute::ByVal; |
|---|
| 136 | 136 | } |
|---|
| 137 | 137 | else if (isaArray(at)) { |
|---|
| … | … | |
| 342 | 342 | |
|---|
| 343 | 343 | int funcNumArgs = func->getArgumentList().size(); |
|---|
| 344 | | std::vector<llvm::ParamAttrsWithIndex> attrs; |
|---|
| | 344 | std::vector<llvm::AttributeWithIndex> attrs; |
|---|
| 345 | 345 | int k = 0; |
|---|
| 346 | 346 | |
|---|
| 347 | | llvm::ParamAttrsWithIndex PAWI; |
|---|
| | 347 | llvm::AttributeWithIndex PAWI; |
|---|
| 348 | 348 | |
|---|
| 349 | 349 | // set return value attrs if any |
|---|
| … | … | |
| 359 | 359 | { |
|---|
| 360 | 360 | PAWI.Index = 1; |
|---|
| 361 | | PAWI.Attrs = llvm::ParamAttr::StructRet; |
|---|
| | 361 | PAWI.Attrs = llvm::Attribute::StructRet; |
|---|
| 362 | 362 | attrs.push_back(PAWI); |
|---|
| 363 | 363 | } |
|---|
| … | … | |
| 367 | 367 | { |
|---|
| 368 | 368 | PAWI.Index = llidx; |
|---|
| 369 | | PAWI.Attrs = llvm::ParamAttr::ByVal; |
|---|
| | 369 | PAWI.Attrs = llvm::Attribute::ByVal; |
|---|
| 370 | 370 | attrs.push_back(PAWI); |
|---|
| 371 | 371 | llidx++; |
|---|
| … | … | |
| 385 | 385 | } |
|---|
| 386 | 386 | |
|---|
| 387 | | llvm::PAListPtr palist = llvm::PAListPtr::get(attrs.begin(), attrs.end()); |
|---|
| 388 | | func->setParamAttrs(palist); |
|---|
| | 387 | llvm::AttrListPtr palist = llvm::AttrListPtr::get(attrs.begin(), attrs.end()); |
|---|
| | 388 | func->setAttributes(palist); |
|---|
| 389 | 389 | } |
|---|
| 390 | 390 | |
|---|
| r493 |
r632 |
|
| 89 | 89 | struct CallOrInvoke |
|---|
| 90 | 90 | { |
|---|
| 91 | | virtual void setParamAttrs(const llvm::PAListPtr& Attrs) = 0; |
|---|
| | 91 | virtual void setAttributes(const llvm::AttrListPtr& Attrs) = 0; |
|---|
| 92 | 92 | virtual void setCallingConv(unsigned CC) = 0; |
|---|
| 93 | 93 | virtual llvm::Instruction* get() = 0; |
|---|
| … | … | |
| 99 | 99 | CallOrInvoke_Call(llvm::CallInst* call) : inst(call) {} |
|---|
| 100 | 100 | |
|---|
| 101 | | virtual void setParamAttrs(const llvm::PAListPtr& Attrs) |
|---|
| 102 | | { inst->setParamAttrs(Attrs); } |
|---|
| | 101 | virtual void setAttributes(const llvm::AttrListPtr& Attrs) |
|---|
| | 102 | { inst->setAttributes(Attrs); } |
|---|
| 103 | 103 | virtual void setCallingConv(unsigned CC) |
|---|
| 104 | 104 | { inst->setCallingConv(CC); } |
|---|
| … | … | |
| 112 | 112 | CallOrInvoke_Invoke(llvm::InvokeInst* invoke) : inst(invoke) {} |
|---|
| 113 | 113 | |
|---|
| 114 | | virtual void setParamAttrs(const llvm::PAListPtr& Attrs) |
|---|
| 115 | | { inst->setParamAttrs(Attrs); } |
|---|
| | 114 | virtual void setAttributes(const llvm::AttrListPtr& Attrs) |
|---|
| | 115 | { inst->setAttributes(Attrs); } |
|---|
| 116 | 116 | virtual void setCallingConv(unsigned CC) |
|---|
| 117 | 117 | { inst->setCallingConv(CC); } |
|---|
| r629 |
r632 |
|
| 11 | 11 | #include "llvm/Module.h" |
|---|
| 12 | 12 | #include "llvm/Value.h" |
|---|
| 13 | | #include "llvm/ParameterAttributes.h" |
|---|
| | 13 | #include "llvm/Attributes.h" |
|---|
| 14 | 14 | |
|---|
| 15 | 15 | #include "llvm/Target/TargetData.h" |
|---|
| r622 |
r632 |
|
| 118 | 118 | |
|---|
| 119 | 119 | // param attrs |
|---|
| 120 | | llvm::PAListPtr palist; |
|---|
| | 120 | llvm::AttrListPtr palist; |
|---|
| 121 | 121 | int idx = 1; |
|---|
| 122 | 122 | |
|---|
| … | … | |
| 142 | 142 | args.push_back(msg->getRVal()); |
|---|
| 143 | 143 | } |
|---|
| 144 | | palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal); |
|---|
| | 144 | palist = palist.addAttr(idx++, llvm::Attribute::ByVal); |
|---|
| 145 | 145 | } |
|---|
| 146 | 146 | |
|---|
| … | … | |
| 158 | 158 | |
|---|
| 159 | 159 | args.push_back(alloc); |
|---|
| 160 | | palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal); |
|---|
| | 160 | palist = palist.addAttr(idx++, llvm::Attribute::ByVal); |
|---|
| 161 | 161 | |
|---|
| 162 | 162 | |
|---|
| … | … | |
| 167 | 167 | // call |
|---|
| 168 | 168 | CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end()); |
|---|
| 169 | | call->setParamAttrs(palist); |
|---|
| | 169 | call->setAttributes(palist); |
|---|
| 170 | 170 | |
|---|
| 171 | 171 | // after assert is always unreachable |
|---|
| r527 |
r632 |
|
| 134 | 134 | |
|---|
| 135 | 135 | /// |
|---|
| 136 | | void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::PAListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx); |
|---|
| | 136 | void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::AttrListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx); |
|---|
| 137 | 137 | |
|---|
| 138 | 138 | /// |
|---|
| r591 |
r632 |
|
| 70 | 70 | const llvm::FunctionType* fnty = fn->getFunctionType(); |
|---|
| 71 | 71 | llvm::Function* resfn = llvm::cast<llvm::Function>(target->getOrInsertFunction(name, fnty)); |
|---|
| 72 | | resfn->setParamAttrs(fn->getParamAttrs()); |
|---|
| | 72 | resfn->setAttributes(fn->getAttributes()); |
|---|
| 73 | 73 | return resfn; |
|---|
| 74 | 74 | } |
|---|
| … | … | |
| 202 | 202 | types.push_back(intTy); |
|---|
| 203 | 203 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 204 | | llvm::PAListPtr palist; |
|---|
| 205 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 206 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| 207 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); |
|---|
| 208 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname3, M)->setParamAttrs(palist); |
|---|
| | 204 | llvm::AttrListPtr palist; |
|---|
| | 205 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 206 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| | 207 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); |
|---|
| | 208 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname3, M)->setAttributes(palist); |
|---|
| 209 | 209 | } |
|---|
| 210 | 210 | |
|---|
| … | … | |
| 217 | 217 | types.push_back(intTy); |
|---|
| 218 | 218 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidPtrTy, types, false); |
|---|
| 219 | | llvm::PAListPtr palist; |
|---|
| 220 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 221 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 222 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 219 | llvm::AttrListPtr palist; |
|---|
| | 220 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 221 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 222 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 223 | 223 | } |
|---|
| 224 | 224 | |
|---|
| … | … | |
| 384 | 384 | types.push_back(rt_dg1()); \ |
|---|
| 385 | 385 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \ |
|---|
| 386 | | llvm::PAListPtr palist; \ |
|---|
| 387 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \ |
|---|
| 388 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \ |
|---|
| 389 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \ |
|---|
| 390 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \ |
|---|
| | 386 | llvm::AttrListPtr palist; \ |
|---|
| | 387 | palist = palist.addAttr(1, llvm::Attribute::ByVal); \ |
|---|
| | 388 | palist = palist.addAttr(2, llvm::Attribute::ByVal); \ |
|---|
| | 389 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \ |
|---|
| | 390 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \ |
|---|
| 391 | 391 | } |
|---|
| 392 | 392 | STR_APPLY1(stringTy, "_aApplycw1", "_aApplycd1") |
|---|
| … | … | |
| 404 | 404 | types.push_back(rt_dg2()); \ |
|---|
| 405 | 405 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \ |
|---|
| 406 | | llvm::PAListPtr palist; \ |
|---|
| 407 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \ |
|---|
| 408 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \ |
|---|
| 409 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \ |
|---|
| 410 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \ |
|---|
| | 406 | llvm::AttrListPtr palist; \ |
|---|
| | 407 | palist = palist.addAttr(1, llvm::Attribute::ByVal); \ |
|---|
| | 408 | palist = palist.addAttr(2, llvm::Attribute::ByVal); \ |
|---|
| | 409 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \ |
|---|
| | 410 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \ |
|---|
| 411 | 411 | } |
|---|
| 412 | 412 | STR_APPLY2(stringTy, "_aApplycw2", "_aApplycd2") |
|---|
| … | … | |
| 423 | 423 | types.push_back(rt_dg1()); \ |
|---|
| 424 | 424 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \ |
|---|
| 425 | | llvm::PAListPtr palist; \ |
|---|
| 426 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \ |
|---|
| 427 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \ |
|---|
| 428 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \ |
|---|
| 429 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \ |
|---|
| | 425 | llvm::AttrListPtr palist; \ |
|---|
| | 426 | palist = palist.addAttr(1, llvm::Attribute::ByVal); \ |
|---|
| | 427 | palist = palist.addAttr(2, llvm::Attribute::ByVal); \ |
|---|
| | 428 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \ |
|---|
| | 429 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \ |
|---|
| 430 | 430 | } |
|---|
| 431 | 431 | STR_APPLY_R1(stringTy, "_aApplyRcw1", "_aApplyRcd1") |
|---|
| … | … | |
| 442 | 442 | types.push_back(rt_dg2()); \ |
|---|
| 443 | 443 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \ |
|---|
| 444 | | llvm::PAListPtr palist; \ |
|---|
| 445 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \ |
|---|
| 446 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \ |
|---|
| 447 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \ |
|---|
| 448 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \ |
|---|
| | 444 | llvm::AttrListPtr palist; \ |
|---|
| | 445 | palist = palist.addAttr(1, llvm::Attribute::ByVal); \ |
|---|
| | 446 | palist = palist.addAttr(2, llvm::Attribute::ByVal); \ |
|---|
| | 447 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \ |
|---|
| | 448 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \ |
|---|
| 449 | 449 | } |
|---|
| 450 | 450 | STR_APPLY_R2(stringTy, "_aApplyRcw2", "_aApplyRcd2") |
|---|
| … | … | |
| 534 | 534 | types.push_back(stringTy); |
|---|
| 535 | 535 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 536 | | llvm::PAListPtr palist; |
|---|
| 537 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 538 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| 539 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); |
|---|
| | 536 | llvm::AttrListPtr palist; |
|---|
| | 537 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 538 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| | 539 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); |
|---|
| 540 | 540 | } |
|---|
| 541 | 541 | |
|---|
| … | … | |
| 549 | 549 | types.push_back(wstringTy); |
|---|
| 550 | 550 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 551 | | llvm::PAListPtr palist; |
|---|
| 552 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 553 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| 554 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); |
|---|
| | 551 | llvm::AttrListPtr palist; |
|---|
| | 552 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 553 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| | 554 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); |
|---|
| 555 | 555 | } |
|---|
| 556 | 556 | |
|---|
| … | … | |
| 563 | 563 | types.push_back(sizeTy); |
|---|
| 564 | 564 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 565 | | llvm::PAListPtr palist; |
|---|
| 566 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 567 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 565 | llvm::AttrListPtr palist; |
|---|
| | 566 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 567 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 568 | 568 | } |
|---|
| 569 | 569 | |
|---|
| … | … | |
| 576 | 576 | types.push_back(rt_array(byteTy)); |
|---|
| 577 | 577 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 578 | | llvm::PAListPtr palist; |
|---|
| 579 | | palist = palist.addAttr(3, llvm::ParamAttr::ByVal); |
|---|
| 580 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 578 | llvm::AttrListPtr palist; |
|---|
| | 579 | palist = palist.addAttr(3, llvm::Attribute::ByVal); |
|---|
| | 580 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 581 | 581 | } |
|---|
| 582 | 582 | |
|---|
| … | … | |
| 591 | 591 | types.push_back(typeInfoTy); |
|---|
| 592 | 592 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 593 | | llvm::PAListPtr palist; |
|---|
| 594 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 595 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 596 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| 597 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); |
|---|
| | 593 | llvm::AttrListPtr palist; |
|---|
| | 594 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 595 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 596 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| | 597 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); |
|---|
| 598 | 598 | } |
|---|
| 599 | 599 | |
|---|
| … | … | |
| 605 | 605 | types.push_back(rt_array(byteTy)); |
|---|
| 606 | 606 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 607 | | llvm::PAListPtr palist; |
|---|
| 608 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 609 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 610 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 607 | llvm::AttrListPtr palist; |
|---|
| | 608 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 609 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 610 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 611 | 611 | } |
|---|
| 612 | 612 | |
|---|
| … | … | |
| 619 | 619 | types.push_back(typeInfoTy); |
|---|
| 620 | 620 | const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); |
|---|
| 621 | | llvm::PAListPtr palist; |
|---|
| 622 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 623 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 621 | llvm::AttrListPtr palist; |
|---|
| | 622 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 623 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 624 | 624 | } |
|---|
| 625 | 625 | |
|---|
| … | … | |
| 724 | 724 | types.push_back(rt_dg1()); |
|---|
| 725 | 725 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 726 | | llvm::PAListPtr palist; |
|---|
| 727 | | palist = palist.addAttr(3, llvm::ParamAttr::ByVal); |
|---|
| 728 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 726 | llvm::AttrListPtr palist; |
|---|
| | 727 | palist = palist.addAttr(3, llvm::Attribute::ByVal); |
|---|
| | 728 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 729 | 729 | } |
|---|
| 730 | 730 | |
|---|
| … | … | |
| 737 | 737 | types.push_back(rt_dg1()); |
|---|
| 738 | 738 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 739 | | llvm::PAListPtr palist; |
|---|
| 740 | | palist = palist.addAttr(3, llvm::ParamAttr::ByVal); |
|---|
| 741 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 739 | llvm::AttrListPtr palist; |
|---|
| | 740 | palist = palist.addAttr(3, llvm::Attribute::ByVal); |
|---|
| | 741 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 742 | 742 | } |
|---|
| 743 | 743 | |
|---|
| … | … | |
| 814 | 814 | types.push_back(stringTy); |
|---|
| 815 | 815 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 816 | | llvm::PAListPtr palist; |
|---|
| 817 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 818 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 819 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 816 | llvm::AttrListPtr palist; |
|---|
| | 817 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 818 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 819 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 820 | 820 | } |
|---|
| 821 | 821 | |
|---|
| … | … | |
| 827 | 827 | types.push_back(wstringTy); |
|---|
| 828 | 828 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 829 | | llvm::PAListPtr palist; |
|---|
| 830 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 831 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 832 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 829 | llvm::AttrListPtr palist; |
|---|
| | 830 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 831 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 832 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 833 | 833 | } |
|---|
| 834 | 834 | |
|---|
| … | … | |
| 840 | 840 | types.push_back(dstringTy); |
|---|
| 841 | 841 | const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); |
|---|
| 842 | | llvm::PAListPtr palist; |
|---|
| 843 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 844 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 845 | | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); |
|---|
| | 842 | llvm::AttrListPtr palist; |
|---|
| | 843 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 844 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 845 | llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); |
|---|
| 846 | 846 | } |
|---|
| 847 | 847 | |
|---|
| r622 |
r632 |
|
| 706 | 706 | CallOrInvoke* call = gIR->CreateCallOrInvoke2(fn, table, llval, "tmp"); |
|---|
| 707 | 707 | |
|---|
| 708 | | llvm::PAListPtr palist; |
|---|
| 709 | | palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
|---|
| 710 | | palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
|---|
| 711 | | call->setParamAttrs(palist); |
|---|
| | 708 | llvm::AttrListPtr palist; |
|---|
| | 709 | palist = palist.addAttr(1, llvm::Attribute::ByVal); |
|---|
| | 710 | palist = palist.addAttr(2, llvm::Attribute::ByVal); |
|---|
| | 711 | call->setAttributes(palist); |
|---|
| 712 | 712 | |
|---|
| 713 | 713 | return call->get(); |
|---|
| … | … | |
| 1256 | 1256 | |
|---|
| 1257 | 1257 | // param attrs |
|---|
| 1258 | | llvm::PAListPtr palist; |
|---|
| | 1258 | llvm::AttrListPtr palist; |
|---|
| 1259 | 1259 | int idx = 1; |
|---|
| 1260 | 1260 | |
|---|
| … | … | |
| 1277 | 1277 | |
|---|
| 1278 | 1278 | args.push_back(alloc); |
|---|
| 1279 | | palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal); |
|---|
| | 1279 | palist = palist.addAttr(idx++, llvm::Attribute::ByVal); |
|---|
| 1280 | 1280 | |
|---|
| 1281 | 1281 | // line param |
|---|
| … | … | |
| 1285 | 1285 | // call |
|---|
| 1286 | 1286 | CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end()); |
|---|
| 1287 | | call->setParamAttrs(palist); |
|---|
| | 1287 | call->setAttributes(palist); |
|---|
| 1288 | 1288 | |
|---|
| 1289 | 1289 | gIR->ir->CreateUnreachable(); |
|---|
| r622 |
r632 |
|
| 105 | 105 | ////////////////////////////////////////////////////////////////////////////////////////// |
|---|
| 106 | 106 | |
|---|
| 107 | | void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::PAListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx) |
|---|
| | 107 | void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::AttrListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx) |
|---|
| 108 | 108 | { |
|---|
| 109 | 109 | Logger::println("doing d-style variadic arguments"); |
|---|
| … | … | |
| 236 | 236 | |
|---|
| 237 | 237 | // parameter attributes |
|---|
| 238 | | llvm::PAListPtr palist; |
|---|
| | 238 | llvm::AttrListPtr palist; |
|---|
| 239 | 239 | |
|---|
| 240 | 240 | // return attrs |
|---|
| … | … | |
| 251 | 251 | ++argiter; |
|---|
| 252 | 252 | args.push_back(retvar); |
|---|
| 253 | | palist = palist.addAttr(1, llvm::ParamAttr::StructRet); |
|---|
| | 253 | palist = palist.addAttr(1, llvm::Attribute::StructRet); |
|---|
| 254 | 254 | } |
|---|
| 255 | 255 | |
|---|
| … | … | |
| 365 | 365 | LLFunction* llfunc = llvm::dyn_cast<LLFunction>(dfnval->val); |
|---|
| 366 | 366 | if (llfunc && llfunc->isIntrinsic()) |
|---|
| 367 | | palist = llvm::Intrinsic::getParamAttrs((llvm::Intrinsic::ID)llfunc->getIntrinsicID()); |
|---|
| | 367 | palist = llvm::Intrinsic::getAttributes((llvm::Intrinsic::ID)llfunc->getIntrinsicID()); |
|---|
| 368 | 368 | else |
|---|
| 369 | 369 | call->setCallingConv(callconv); |
|---|
| … | … | |
| 371 | 371 | else |
|---|
| 372 | 372 | call->setCallingConv(callconv); |
|---|
| 373 | | call->setParamAttrs(palist); |
|---|
| | 373 | call->setAttributes(palist); |
|---|
| 374 | 374 | |
|---|
| 375 | 375 | return new DImValue(resulttype, retllval); |
|---|
| 376 | 376 | } |
|---|
| 377 | | |
|---|
| 378 | | |
|---|
| 379 | | |
|---|
| 380 | | |
|---|
| 381 | | |
|---|
| 382 | | |
|---|
| 383 | | |
|---|
| 384 | | |
|---|
| 385 | | |
|---|
| 386 | | |
|---|
| 387 | | |
|---|
| 388 | | |
|---|
| 389 | | |
|---|
| r622 |
r632 |
|
| 45 | 45 | case Tint8: |
|---|
| 46 | 46 | case Tint16: |
|---|
| 47 | | return llvm::ParamAttr::SExt; |
|---|
| | 47 | return llvm::Attribute::SExt; |
|---|
| 48 | 48 | |
|---|
| 49 | 49 | case Tuns8: |
|---|
| 50 | 50 | case Tuns16: |
|---|
| 51 | | return llvm::ParamAttr::ZExt; |
|---|
| | 51 | return llvm::Attribute::ZExt; |
|---|
| 52 | 52 | } |
|---|
| 53 | 53 | } |
|---|
| 54 | | return llvm::ParamAttr::None; |
|---|
| | 54 | return llvm::Attribute::None; |
|---|
| 55 | 55 | } |
|---|
| 56 | 56 | |
|---|
| r584 |
r632 |
|
| 67 | 67 | void IrFunction::setNeverInline() |
|---|
| 68 | 68 | { |
|---|
| 69 | | llvm::FunctionNotes cur = func->getNotes(); |
|---|
| 70 | | assert(!(cur & llvm::FN_NOTE_AlwaysInline) && "function can't be never- and always-inline at the same time"); |
|---|
| 71 | | func->setNotes(cur | llvm::FN_NOTE_NoInline); |
|---|
| | 69 | assert(!func->hasFnAttr(llvm::Attribute::AlwaysInline) && "function can't be never- and always-inline at the same time"); |
|---|
| | 70 | func->addFnAttr(llvm::Attribute::NoInline); |
|---|
| 72 | 71 | } |
|---|
| 73 | 72 | |
|---|
| 74 | 73 | void IrFunction::setAlwaysInline() |
|---|
| 75 | 74 | { |
|---|
| 76 | | llvm::FunctionNotes cur = func->getNotes(); |
|---|
| 77 | | assert(!(cur & llvm::FN_NOTE_NoInline) && "function can't be never- and always-inline at the same time"); |
|---|
| 78 | | func->setNotes(cur | llvm::FN_NOTE_AlwaysInline); |
|---|
| | 75 | assert(!func->hasFnAttr(llvm::Attribute::NoInline) && "function can't be never- and always-inline at the same time"); |
|---|
| | 76 | func->addFnAttr(llvm::Attribute::AlwaysInline); |
|---|
| 79 | 77 | } |
|---|