mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-07 11:26:02 +03:00
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!
This commit is contained in:
parent
e7ad7296d0
commit
bce9368514
12 changed files with 119 additions and 134 deletions
|
@ -758,10 +758,10 @@ static LLValue* DtoArrayEqCmp_impl(Loc& loc, const char* func, DValue* l, DValue
|
||||||
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end(), "tmp");
|
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end(), "tmp");
|
||||||
|
|
||||||
// set param attrs
|
// set param attrs
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
return call->get();
|
return call->get();
|
||||||
}
|
}
|
||||||
|
@ -1072,7 +1072,7 @@ void DtoArrayBoundsCheck(Loc& loc, DValue* arr, DValue* index, bool isslice)
|
||||||
gIR->scope() = IRScope(failbb, okbb);
|
gIR->scope() = IRScope(failbb, okbb);
|
||||||
|
|
||||||
std::vector<LLValue*> args;
|
std::vector<LLValue*> args;
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
|
|
||||||
// file param
|
// file param
|
||||||
// FIXME: every array bounds check creates a global for the filename !!!
|
// FIXME: every array bounds check creates a global for the filename !!!
|
||||||
|
@ -1090,7 +1090,7 @@ void DtoArrayBoundsCheck(Loc& loc, DValue* arr, DValue* index, bool isslice)
|
||||||
DtoStore(c->getOperand(1), ptr);
|
DtoStore(c->getOperand(1), ptr);
|
||||||
|
|
||||||
args.push_back(alloc);
|
args.push_back(alloc);
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
|
|
||||||
// line param
|
// line param
|
||||||
c = DtoConstUint(loc.linnum);
|
c = DtoConstUint(loc.linnum);
|
||||||
|
@ -1099,7 +1099,7 @@ void DtoArrayBoundsCheck(Loc& loc, DValue* arr, DValue* index, bool isslice)
|
||||||
// call
|
// call
|
||||||
llvm::Function* errorfn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_bounds");
|
llvm::Function* errorfn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_array_bounds");
|
||||||
CallOrInvoke* call = gIR->CreateCallOrInvoke(errorfn, args.begin(), args.end());
|
CallOrInvoke* call = gIR->CreateCallOrInvoke(errorfn, args.begin(), args.end());
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
// the function does not return
|
// the function does not return
|
||||||
gIR->ir->CreateUnreachable();
|
gIR->ir->CreateUnreachable();
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include <llvm/BasicBlock.h>
|
#include <llvm/BasicBlock.h>
|
||||||
#include <llvm/Instructions.h>
|
#include <llvm/Instructions.h>
|
||||||
#include <llvm/InlineAsm.h>
|
#include <llvm/InlineAsm.h>
|
||||||
#include <llvm/ParameterAttributes.h>
|
#include <llvm/Attributes.h>
|
||||||
#include <llvm/Support/MathExtras.h>
|
#include <llvm/Support/MathExtras.h>
|
||||||
#include <llvm/Pass.h>
|
#include <llvm/Pass.h>
|
||||||
#include <llvm/PassManager.h>
|
#include <llvm/PassManager.h>
|
||||||
|
|
|
@ -132,7 +132,7 @@ const llvm::FunctionType* DtoFunctionType(Type* type, const LLType* thistype, co
|
||||||
Logger::println("struct param");
|
Logger::println("struct param");
|
||||||
paramvec.push_back(getPtrToType(at));
|
paramvec.push_back(getPtrToType(at));
|
||||||
if (!refOrOut)
|
if (!refOrOut)
|
||||||
arg->llvmAttrs |= llvm::ParamAttr::ByVal;
|
arg->llvmAttrs |= llvm::Attribute::ByVal;
|
||||||
}
|
}
|
||||||
else if (isaArray(at)) {
|
else if (isaArray(at)) {
|
||||||
// static array are passed by reference
|
// static array are passed by reference
|
||||||
|
@ -341,10 +341,10 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
|
||||||
llidx += 2;
|
llidx += 2;
|
||||||
|
|
||||||
int funcNumArgs = func->getArgumentList().size();
|
int funcNumArgs = func->getArgumentList().size();
|
||||||
std::vector<llvm::ParamAttrsWithIndex> attrs;
|
std::vector<llvm::AttributeWithIndex> attrs;
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|
||||||
llvm::ParamAttrsWithIndex PAWI;
|
llvm::AttributeWithIndex PAWI;
|
||||||
|
|
||||||
// set return value attrs if any
|
// set return value attrs if any
|
||||||
if (f->retAttrs)
|
if (f->retAttrs)
|
||||||
|
@ -358,7 +358,7 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
|
||||||
if (f->retInPtr)
|
if (f->retInPtr)
|
||||||
{
|
{
|
||||||
PAWI.Index = 1;
|
PAWI.Index = 1;
|
||||||
PAWI.Attrs = llvm::ParamAttr::StructRet;
|
PAWI.Attrs = llvm::Attribute::StructRet;
|
||||||
attrs.push_back(PAWI);
|
attrs.push_back(PAWI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,7 +366,7 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
|
||||||
if (fdecl->isMain() && Argument::dim(f->parameters) == 0)
|
if (fdecl->isMain() && Argument::dim(f->parameters) == 0)
|
||||||
{
|
{
|
||||||
PAWI.Index = llidx;
|
PAWI.Index = llidx;
|
||||||
PAWI.Attrs = llvm::ParamAttr::ByVal;
|
PAWI.Attrs = llvm::Attribute::ByVal;
|
||||||
attrs.push_back(PAWI);
|
attrs.push_back(PAWI);
|
||||||
llidx++;
|
llidx++;
|
||||||
}
|
}
|
||||||
|
@ -384,8 +384,8 @@ static void set_param_attrs(TypeFunction* f, llvm::Function* func, FuncDeclarati
|
||||||
attrs.push_back(PAWI);
|
attrs.push_back(PAWI);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::PAListPtr palist = llvm::PAListPtr::get(attrs.begin(), attrs.end());
|
llvm::AttrListPtr palist = llvm::AttrListPtr::get(attrs.begin(), attrs.end());
|
||||||
func->setParamAttrs(palist);
|
func->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -88,7 +88,7 @@ struct IRAsmBlock
|
||||||
// adjusting these common properties these structs are made
|
// adjusting these common properties these structs are made
|
||||||
struct CallOrInvoke
|
struct CallOrInvoke
|
||||||
{
|
{
|
||||||
virtual void setParamAttrs(const llvm::PAListPtr& Attrs) = 0;
|
virtual void setAttributes(const llvm::AttrListPtr& Attrs) = 0;
|
||||||
virtual void setCallingConv(unsigned CC) = 0;
|
virtual void setCallingConv(unsigned CC) = 0;
|
||||||
virtual llvm::Instruction* get() = 0;
|
virtual llvm::Instruction* get() = 0;
|
||||||
};
|
};
|
||||||
|
@ -98,8 +98,8 @@ struct CallOrInvoke_Call : public CallOrInvoke
|
||||||
llvm::CallInst* inst;
|
llvm::CallInst* inst;
|
||||||
CallOrInvoke_Call(llvm::CallInst* call) : inst(call) {}
|
CallOrInvoke_Call(llvm::CallInst* call) : inst(call) {}
|
||||||
|
|
||||||
virtual void setParamAttrs(const llvm::PAListPtr& Attrs)
|
virtual void setAttributes(const llvm::AttrListPtr& Attrs)
|
||||||
{ inst->setParamAttrs(Attrs); }
|
{ inst->setAttributes(Attrs); }
|
||||||
virtual void setCallingConv(unsigned CC)
|
virtual void setCallingConv(unsigned CC)
|
||||||
{ inst->setCallingConv(CC); }
|
{ inst->setCallingConv(CC); }
|
||||||
virtual llvm::Instruction* get()
|
virtual llvm::Instruction* get()
|
||||||
|
@ -111,8 +111,8 @@ struct CallOrInvoke_Invoke : public CallOrInvoke
|
||||||
llvm::InvokeInst* inst;
|
llvm::InvokeInst* inst;
|
||||||
CallOrInvoke_Invoke(llvm::InvokeInst* invoke) : inst(invoke) {}
|
CallOrInvoke_Invoke(llvm::InvokeInst* invoke) : inst(invoke) {}
|
||||||
|
|
||||||
virtual void setParamAttrs(const llvm::PAListPtr& Attrs)
|
virtual void setAttributes(const llvm::AttrListPtr& Attrs)
|
||||||
{ inst->setParamAttrs(Attrs); }
|
{ inst->setAttributes(Attrs); }
|
||||||
virtual void setCallingConv(unsigned CC)
|
virtual void setCallingConv(unsigned CC)
|
||||||
{ inst->setCallingConv(CC); }
|
{ inst->setCallingConv(CC); }
|
||||||
virtual llvm::Instruction* get()
|
virtual llvm::Instruction* get()
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "llvm/Function.h"
|
#include "llvm/Function.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/Value.h"
|
#include "llvm/Value.h"
|
||||||
#include "llvm/ParameterAttributes.h"
|
#include "llvm/Attributes.h"
|
||||||
|
|
||||||
#include "llvm/Target/TargetData.h"
|
#include "llvm/Target/TargetData.h"
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ void DtoAssert(Loc* loc, DValue* msg)
|
||||||
llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, fname);
|
llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, fname);
|
||||||
|
|
||||||
// param attrs
|
// param attrs
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
int idx = 1;
|
int idx = 1;
|
||||||
|
|
||||||
// FIXME: every assert creates a global for the filename !!!
|
// FIXME: every assert creates a global for the filename !!!
|
||||||
|
@ -141,7 +141,7 @@ void DtoAssert(Loc* loc, DValue* msg)
|
||||||
{
|
{
|
||||||
args.push_back(msg->getRVal());
|
args.push_back(msg->getRVal());
|
||||||
}
|
}
|
||||||
palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(idx++, llvm::Attribute::ByVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
// file param
|
// file param
|
||||||
|
@ -157,7 +157,7 @@ void DtoAssert(Loc* loc, DValue* msg)
|
||||||
DtoStore(c->getOperand(1), ptr);
|
DtoStore(c->getOperand(1), ptr);
|
||||||
|
|
||||||
args.push_back(alloc);
|
args.push_back(alloc);
|
||||||
palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(idx++, llvm::Attribute::ByVal);
|
||||||
|
|
||||||
|
|
||||||
// line param
|
// line param
|
||||||
|
@ -166,7 +166,7 @@ void DtoAssert(Loc* loc, DValue* msg)
|
||||||
|
|
||||||
// call
|
// call
|
||||||
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end());
|
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end());
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
// after assert is always unreachable
|
// after assert is always unreachable
|
||||||
gIR->ir->CreateUnreachable();
|
gIR->ir->CreateUnreachable();
|
||||||
|
|
|
@ -133,7 +133,7 @@ LLValue* DtoCallableValue(DValue* fn);
|
||||||
const LLFunctionType* DtoExtractFunctionType(const LLType* type);
|
const LLFunctionType* DtoExtractFunctionType(const LLType* type);
|
||||||
|
|
||||||
///
|
///
|
||||||
void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::PAListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx);
|
void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::AttrListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx);
|
||||||
|
|
||||||
///
|
///
|
||||||
DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions* arguments);
|
DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions* arguments);
|
||||||
|
|
148
gen/runtime.cpp
148
gen/runtime.cpp
|
@ -69,7 +69,7 @@ llvm::Function* LLVM_D_GetRuntimeFunction(llvm::Module* target, const char* name
|
||||||
|
|
||||||
const llvm::FunctionType* fnty = fn->getFunctionType();
|
const llvm::FunctionType* fnty = fn->getFunctionType();
|
||||||
llvm::Function* resfn = llvm::cast<llvm::Function>(target->getOrInsertFunction(name, fnty));
|
llvm::Function* resfn = llvm::cast<llvm::Function>(target->getOrInsertFunction(name, fnty));
|
||||||
resfn->setParamAttrs(fn->getParamAttrs());
|
resfn->setAttributes(fn->getAttributes());
|
||||||
return resfn;
|
return resfn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,11 +201,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(stringTy);
|
types.push_back(stringTy);
|
||||||
types.push_back(intTy);
|
types.push_back(intTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname3, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname3, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void _d_assert_msg( char[] msg, char[] file, uint line )
|
// void _d_assert_msg( char[] msg, char[] file, uint line )
|
||||||
|
@ -216,10 +216,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(stringTy);
|
types.push_back(stringTy);
|
||||||
types.push_back(intTy);
|
types.push_back(intTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidPtrTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidPtrTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -383,11 +383,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(TY); \
|
types.push_back(TY); \
|
||||||
types.push_back(rt_dg1()); \
|
types.push_back(rt_dg1()); \
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
||||||
llvm::PAListPtr palist; \
|
llvm::AttrListPtr palist; \
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(1, llvm::Attribute::ByVal); \
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(2, llvm::Attribute::ByVal); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \
|
||||||
}
|
}
|
||||||
STR_APPLY1(stringTy, "_aApplycw1", "_aApplycd1")
|
STR_APPLY1(stringTy, "_aApplycw1", "_aApplycd1")
|
||||||
STR_APPLY1(wstringTy, "_aApplywc1", "_aApplywd1")
|
STR_APPLY1(wstringTy, "_aApplywc1", "_aApplywd1")
|
||||||
|
@ -403,11 +403,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(TY); \
|
types.push_back(TY); \
|
||||||
types.push_back(rt_dg2()); \
|
types.push_back(rt_dg2()); \
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
||||||
llvm::PAListPtr palist; \
|
llvm::AttrListPtr palist; \
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(1, llvm::Attribute::ByVal); \
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(2, llvm::Attribute::ByVal); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \
|
||||||
}
|
}
|
||||||
STR_APPLY2(stringTy, "_aApplycw2", "_aApplycd2")
|
STR_APPLY2(stringTy, "_aApplycw2", "_aApplycd2")
|
||||||
STR_APPLY2(wstringTy, "_aApplywc2", "_aApplywd2")
|
STR_APPLY2(wstringTy, "_aApplywc2", "_aApplywd2")
|
||||||
|
@ -422,11 +422,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(TY); \
|
types.push_back(TY); \
|
||||||
types.push_back(rt_dg1()); \
|
types.push_back(rt_dg1()); \
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
||||||
llvm::PAListPtr palist; \
|
llvm::AttrListPtr palist; \
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(1, llvm::Attribute::ByVal); \
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(2, llvm::Attribute::ByVal); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \
|
||||||
}
|
}
|
||||||
STR_APPLY_R1(stringTy, "_aApplyRcw1", "_aApplyRcd1")
|
STR_APPLY_R1(stringTy, "_aApplyRcw1", "_aApplyRcd1")
|
||||||
STR_APPLY_R1(wstringTy, "_aApplyRwc1", "_aApplyRwd1")
|
STR_APPLY_R1(wstringTy, "_aApplyRwc1", "_aApplyRwd1")
|
||||||
|
@ -441,11 +441,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(TY); \
|
types.push_back(TY); \
|
||||||
types.push_back(rt_dg2()); \
|
types.push_back(rt_dg2()); \
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); \
|
||||||
llvm::PAListPtr palist; \
|
llvm::AttrListPtr palist; \
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(1, llvm::Attribute::ByVal); \
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal); \
|
palist = palist.addAttr(2, llvm::Attribute::ByVal); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist); \
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist); \
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist); \
|
||||||
}
|
}
|
||||||
STR_APPLY_R2(stringTy, "_aApplyRcw2", "_aApplyRcd2")
|
STR_APPLY_R2(stringTy, "_aApplyRcw2", "_aApplyRcd2")
|
||||||
STR_APPLY_R2(wstringTy, "_aApplyRwc2", "_aApplyRwd2")
|
STR_APPLY_R2(wstringTy, "_aApplyRwc2", "_aApplyRwd2")
|
||||||
|
@ -533,10 +533,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(stringTy);
|
types.push_back(stringTy);
|
||||||
types.push_back(stringTy);
|
types.push_back(stringTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// wchar[] _adReverseWchar(wchar[] a)
|
// wchar[] _adReverseWchar(wchar[] a)
|
||||||
|
@ -548,10 +548,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(wstringTy);
|
types.push_back(wstringTy);
|
||||||
types.push_back(wstringTy);
|
types.push_back(wstringTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Array _adReverse(Array a, size_t szelem)
|
// Array _adReverse(Array a, size_t szelem)
|
||||||
|
@ -562,9 +562,9 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
types.push_back(sizeTy);
|
types.push_back(sizeTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Array _adDupT(TypeInfo ti, Array a)
|
// Array _adDupT(TypeInfo ti, Array a)
|
||||||
|
@ -575,9 +575,9 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(typeInfoTy);
|
types.push_back(typeInfoTy);
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(3, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(3, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int _adEq(Array a1, Array a2, TypeInfo ti)
|
// int _adEq(Array a1, Array a2, TypeInfo ti)
|
||||||
|
@ -590,11 +590,11 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
types.push_back(typeInfoTy);
|
types.push_back(typeInfoTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int _adCmpChar(Array a1, Array a2)
|
// int _adCmpChar(Array a1, Array a2)
|
||||||
|
@ -604,10 +604,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Array _adSort(Array a, TypeInfo ti)
|
// Array _adSort(Array a, TypeInfo ti)
|
||||||
|
@ -618,9 +618,9 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(byteTy));
|
types.push_back(rt_array(byteTy));
|
||||||
types.push_back(typeInfoTy);
|
types.push_back(typeInfoTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -723,9 +723,9 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(sizeTy);
|
types.push_back(sizeTy);
|
||||||
types.push_back(rt_dg1());
|
types.push_back(rt_dg1());
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(3, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(3, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int _aaApply2(AA aa, size_t keysize, dg2_t dg)
|
// int _aaApply2(AA aa, size_t keysize, dg2_t dg)
|
||||||
|
@ -736,9 +736,9 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(sizeTy);
|
types.push_back(sizeTy);
|
||||||
types.push_back(rt_dg1());
|
types.push_back(rt_dg1());
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(3, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(3, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -813,10 +813,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(rt_array2(byteTy)));
|
types.push_back(rt_array(rt_array2(byteTy)));
|
||||||
types.push_back(stringTy);
|
types.push_back(stringTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int _d_switch_ustring(wchar[][] table, wchar[] ca)
|
// int _d_switch_ustring(wchar[][] table, wchar[] ca)
|
||||||
|
@ -826,10 +826,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(rt_array2(shortTy)));
|
types.push_back(rt_array(rt_array2(shortTy)));
|
||||||
types.push_back(wstringTy);
|
types.push_back(wstringTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int _d_switch_dstring(dchar[][] table, dchar[] ca)
|
// int _d_switch_dstring(dchar[][] table, dchar[] ca)
|
||||||
|
@ -839,10 +839,10 @@ static void LLVM_D_BuildRuntimeModule()
|
||||||
types.push_back(rt_array(rt_array2(intTy)));
|
types.push_back(rt_array(rt_array2(intTy)));
|
||||||
types.push_back(dstringTy);
|
types.push_back(dstringTy);
|
||||||
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false);
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setParamAttrs(palist);
|
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)->setAttributes(palist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -705,10 +705,10 @@ static LLValue* call_string_switch_runtime(llvm::GlobalVariable* table, Expressi
|
||||||
|
|
||||||
CallOrInvoke* call = gIR->CreateCallOrInvoke2(fn, table, llval, "tmp");
|
CallOrInvoke* call = gIR->CreateCallOrInvoke2(fn, table, llval, "tmp");
|
||||||
|
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(1, llvm::Attribute::ByVal);
|
||||||
palist = palist.addAttr(2, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(2, llvm::Attribute::ByVal);
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
return call->get();
|
return call->get();
|
||||||
}
|
}
|
||||||
|
@ -1255,7 +1255,7 @@ void SwitchErrorStatement::toIR(IRState* p)
|
||||||
llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_switch_error");
|
llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_switch_error");
|
||||||
|
|
||||||
// param attrs
|
// param attrs
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
int idx = 1;
|
int idx = 1;
|
||||||
|
|
||||||
std::vector<LLValue*> args;
|
std::vector<LLValue*> args;
|
||||||
|
@ -1276,7 +1276,7 @@ void SwitchErrorStatement::toIR(IRState* p)
|
||||||
DtoStore(c->getOperand(1), ptr);
|
DtoStore(c->getOperand(1), ptr);
|
||||||
|
|
||||||
args.push_back(alloc);
|
args.push_back(alloc);
|
||||||
palist = palist.addAttr(idx++, llvm::ParamAttr::ByVal);
|
palist = palist.addAttr(idx++, llvm::Attribute::ByVal);
|
||||||
|
|
||||||
// line param
|
// line param
|
||||||
c = DtoConstUint(loc.linnum);
|
c = DtoConstUint(loc.linnum);
|
||||||
|
@ -1284,7 +1284,7 @@ void SwitchErrorStatement::toIR(IRState* p)
|
||||||
|
|
||||||
// call
|
// call
|
||||||
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end());
|
CallOrInvoke* call = gIR->CreateCallOrInvoke(fn, args.begin(), args.end());
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
gIR->ir->CreateUnreachable();
|
gIR->ir->CreateUnreachable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ const LLFunctionType* DtoExtractFunctionType(const LLType* type)
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::PAListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx)
|
void DtoBuildDVarArgList(std::vector<LLValue*>& args, llvm::AttrListPtr& palist, TypeFunction* tf, Expressions* arguments, size_t argidx)
|
||||||
{
|
{
|
||||||
Logger::println("doing d-style variadic arguments");
|
Logger::println("doing d-style variadic arguments");
|
||||||
|
|
||||||
|
@ -235,7 +235,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
|
||||||
LLFunctionType::param_iterator argiter = argbegin;
|
LLFunctionType::param_iterator argiter = argbegin;
|
||||||
|
|
||||||
// parameter attributes
|
// parameter attributes
|
||||||
llvm::PAListPtr palist;
|
llvm::AttrListPtr palist;
|
||||||
|
|
||||||
// return attrs
|
// return attrs
|
||||||
if (tf->retAttrs)
|
if (tf->retAttrs)
|
||||||
|
@ -250,7 +250,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
|
||||||
LLValue* retvar = DtoAlloca(argiter->get()->getContainedType(0), ".rettmp");
|
LLValue* retvar = DtoAlloca(argiter->get()->getContainedType(0), ".rettmp");
|
||||||
++argiter;
|
++argiter;
|
||||||
args.push_back(retvar);
|
args.push_back(retvar);
|
||||||
palist = palist.addAttr(1, llvm::ParamAttr::StructRet);
|
palist = palist.addAttr(1, llvm::Attribute::StructRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
// then comes a context argument...
|
// then comes a context argument...
|
||||||
|
@ -364,26 +364,13 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
|
||||||
{
|
{
|
||||||
LLFunction* llfunc = llvm::dyn_cast<LLFunction>(dfnval->val);
|
LLFunction* llfunc = llvm::dyn_cast<LLFunction>(dfnval->val);
|
||||||
if (llfunc && llfunc->isIntrinsic())
|
if (llfunc && llfunc->isIntrinsic())
|
||||||
palist = llvm::Intrinsic::getParamAttrs((llvm::Intrinsic::ID)llfunc->getIntrinsicID());
|
palist = llvm::Intrinsic::getAttributes((llvm::Intrinsic::ID)llfunc->getIntrinsicID());
|
||||||
else
|
else
|
||||||
call->setCallingConv(callconv);
|
call->setCallingConv(callconv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
call->setCallingConv(callconv);
|
call->setCallingConv(callconv);
|
||||||
call->setParamAttrs(palist);
|
call->setAttributes(palist);
|
||||||
|
|
||||||
return new DImValue(resulttype, retllval);
|
return new DImValue(resulttype, retllval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,14 +44,14 @@ unsigned DtoShouldExtend(Type* type)
|
||||||
{
|
{
|
||||||
case Tint8:
|
case Tint8:
|
||||||
case Tint16:
|
case Tint16:
|
||||||
return llvm::ParamAttr::SExt;
|
return llvm::Attribute::SExt;
|
||||||
|
|
||||||
case Tuns8:
|
case Tuns8:
|
||||||
case Tuns16:
|
case Tuns16:
|
||||||
return llvm::ParamAttr::ZExt;
|
return llvm::Attribute::ZExt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return llvm::ParamAttr::None;
|
return llvm::Attribute::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LLType* DtoType(Type* t)
|
const LLType* DtoType(Type* t)
|
||||||
|
|
|
@ -66,14 +66,12 @@ void IrFunction::popLabelScope()
|
||||||
|
|
||||||
void IrFunction::setNeverInline()
|
void IrFunction::setNeverInline()
|
||||||
{
|
{
|
||||||
llvm::FunctionNotes cur = func->getNotes();
|
assert(!func->hasFnAttr(llvm::Attribute::AlwaysInline) && "function can't be never- and always-inline at the same time");
|
||||||
assert(!(cur & llvm::FN_NOTE_AlwaysInline) && "function can't be never- and always-inline at the same time");
|
func->addFnAttr(llvm::Attribute::NoInline);
|
||||||
func->setNotes(cur | llvm::FN_NOTE_NoInline);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IrFunction::setAlwaysInline()
|
void IrFunction::setAlwaysInline()
|
||||||
{
|
{
|
||||||
llvm::FunctionNotes cur = func->getNotes();
|
assert(!func->hasFnAttr(llvm::Attribute::NoInline) && "function can't be never- and always-inline at the same time");
|
||||||
assert(!(cur & llvm::FN_NOTE_NoInline) && "function can't be never- and always-inline at the same time");
|
func->addFnAttr(llvm::Attribute::AlwaysInline);
|
||||||
func->setNotes(cur | llvm::FN_NOTE_AlwaysInline);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue