mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-27 18:28:14 +00:00
Update Clang for LLVM rename AttributeSet -> AttributeList
llvm-svn: 298394
This commit is contained in:
parent
b518054b87
commit
de86482ce0
@ -598,9 +598,9 @@ Value *CodeGenFunction::EmitMSVCBuiltinExpr(MSVCIntrin BuiltinID,
|
||||
llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, {Int32Ty}, false);
|
||||
llvm::InlineAsm *IA =
|
||||
llvm::InlineAsm::get(FTy, Asm, Constraints, /*SideEffects=*/true);
|
||||
llvm::AttributeSet NoReturnAttr =
|
||||
AttributeSet::get(getLLVMContext(), llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoReturn);
|
||||
llvm::AttributeList NoReturnAttr = llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoReturn);
|
||||
CallSite CS = Builder.CreateCall(IA, EmitScalarExpr(E->getArg(0)));
|
||||
CS.setAttributes(NoReturnAttr);
|
||||
return CS.getInstruction();
|
||||
@ -2258,9 +2258,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
||||
case Builtin::BI_setjmpex: {
|
||||
if (getTarget().getTriple().isOSMSVCRT()) {
|
||||
llvm::Type *ArgTypes[] = {Int8PtrTy, Int8PtrTy};
|
||||
llvm::AttributeSet ReturnsTwiceAttr =
|
||||
AttributeSet::get(getLLVMContext(), llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::ReturnsTwice);
|
||||
llvm::AttributeList ReturnsTwiceAttr = llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::ReturnsTwice);
|
||||
llvm::Constant *SetJmpEx = CGM.CreateRuntimeFunction(
|
||||
llvm::FunctionType::get(IntTy, ArgTypes, /*isVarArg=*/false),
|
||||
"_setjmpex", ReturnsTwiceAttr, /*Local=*/true);
|
||||
@ -2278,9 +2278,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
||||
}
|
||||
case Builtin::BI_setjmp: {
|
||||
if (getTarget().getTriple().isOSMSVCRT()) {
|
||||
llvm::AttributeSet ReturnsTwiceAttr =
|
||||
AttributeSet::get(getLLVMContext(), llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::ReturnsTwice);
|
||||
llvm::AttributeList ReturnsTwiceAttr = llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::ReturnsTwice);
|
||||
llvm::Value *Buf = Builder.CreateBitOrPointerCast(
|
||||
EmitScalarExpr(E->getArg(0)), Int8PtrTy);
|
||||
llvm::CallSite CS;
|
||||
@ -2559,8 +2559,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
||||
|
||||
AttrBuilder B;
|
||||
B.addAttribute(Attribute::ByVal);
|
||||
AttributeSet ByValAttrSet =
|
||||
AttributeSet::get(CGM.getModule().getContext(), 3U, B);
|
||||
llvm::AttributeList ByValAttrSet =
|
||||
llvm::AttributeList::get(CGM.getModule().getContext(), 3U, B);
|
||||
|
||||
auto RTCall =
|
||||
Builder.CreateCall(CGM.CreateRuntimeFunction(FTy, Name, ByValAttrSet),
|
||||
@ -7995,9 +7995,9 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
|
||||
llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
|
||||
llvm::InlineAsm *IA =
|
||||
llvm::InlineAsm::get(FTy, "int $$0x2c", "", /*SideEffects=*/true);
|
||||
llvm::AttributeSet NoReturnAttr =
|
||||
AttributeSet::get(getLLVMContext(), llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoReturn);
|
||||
llvm::AttributeList NoReturnAttr = llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoReturn);
|
||||
CallSite CS = Builder.CreateCall(IA);
|
||||
CS.setAttributes(NoReturnAttr);
|
||||
return CS.getInstruction();
|
||||
|
@ -256,7 +256,7 @@ llvm::Constant *CodeGenModule::getAddrOfCXXStructor(
|
||||
|
||||
return GetOrCreateLLVMFunction(
|
||||
getMangledName(GD), FnType, GD, /*ForVTable=*/false, DontDefer,
|
||||
/*isThunk=*/false, /*ExtraAttrs=*/llvm::AttributeSet(), IsForDefinition);
|
||||
/*isThunk=*/false, /*ExtraAttrs=*/llvm::AttributeList(), IsForDefinition);
|
||||
}
|
||||
|
||||
static CGCallee BuildAppleKextVirtualCall(CodeGenFunction &CGF,
|
||||
|
@ -1754,9 +1754,9 @@ void CodeGenModule::AddDefaultFnAttrs(llvm::Function &F) {
|
||||
ConstructDefaultFnAttrList(F.getName(),
|
||||
F.hasFnAttribute(llvm::Attribute::OptimizeNone),
|
||||
/* AttrOnCallsite = */ false, FuncAttrs);
|
||||
llvm::AttributeSet AS = llvm::AttributeSet::get(
|
||||
getLLVMContext(), llvm::AttributeSet::FunctionIndex, FuncAttrs);
|
||||
F.addAttributes(llvm::AttributeSet::FunctionIndex, AS);
|
||||
llvm::AttributeList AS = llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex, FuncAttrs);
|
||||
F.addAttributes(llvm::AttributeList::FunctionIndex, AS);
|
||||
}
|
||||
|
||||
void CodeGenModule::ConstructAttributeList(
|
||||
@ -1932,8 +1932,8 @@ void CodeGenModule::ConstructAttributeList(
|
||||
|
||||
// Attach return attributes.
|
||||
if (RetAttrs.hasAttributes()) {
|
||||
PAL.push_back(llvm::AttributeSet::get(
|
||||
getLLVMContext(), llvm::AttributeSet::ReturnIndex, RetAttrs));
|
||||
PAL.push_back(llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::ReturnIndex, RetAttrs));
|
||||
}
|
||||
|
||||
bool hasUsedSRet = false;
|
||||
@ -1945,7 +1945,7 @@ void CodeGenModule::ConstructAttributeList(
|
||||
hasUsedSRet = true;
|
||||
if (RetAI.getInReg())
|
||||
SRETAttrs.addAttribute(llvm::Attribute::InReg);
|
||||
PAL.push_back(llvm::AttributeSet::get(
|
||||
PAL.push_back(llvm::AttributeList::get(
|
||||
getLLVMContext(), IRFunctionArgs.getSRetArgNo() + 1, SRETAttrs));
|
||||
}
|
||||
|
||||
@ -1953,7 +1953,7 @@ void CodeGenModule::ConstructAttributeList(
|
||||
if (IRFunctionArgs.hasInallocaArg()) {
|
||||
llvm::AttrBuilder Attrs;
|
||||
Attrs.addAttribute(llvm::Attribute::InAlloca);
|
||||
PAL.push_back(llvm::AttributeSet::get(
|
||||
PAL.push_back(llvm::AttributeList::get(
|
||||
getLLVMContext(), IRFunctionArgs.getInallocaArgNo() + 1, Attrs));
|
||||
}
|
||||
|
||||
@ -1968,7 +1968,7 @@ void CodeGenModule::ConstructAttributeList(
|
||||
// Add attribute for padding argument, if necessary.
|
||||
if (IRFunctionArgs.hasPaddingArg(ArgNo)) {
|
||||
if (AI.getPaddingInReg())
|
||||
PAL.push_back(llvm::AttributeSet::get(
|
||||
PAL.push_back(llvm::AttributeList::get(
|
||||
getLLVMContext(), IRFunctionArgs.getPaddingArgNo(ArgNo) + 1,
|
||||
llvm::Attribute::InReg));
|
||||
}
|
||||
@ -2085,17 +2085,15 @@ void CodeGenModule::ConstructAttributeList(
|
||||
unsigned FirstIRArg, NumIRArgs;
|
||||
std::tie(FirstIRArg, NumIRArgs) = IRFunctionArgs.getIRArgs(ArgNo);
|
||||
for (unsigned i = 0; i < NumIRArgs; i++)
|
||||
PAL.push_back(llvm::AttributeSet::get(getLLVMContext(),
|
||||
FirstIRArg + i + 1, Attrs));
|
||||
PAL.push_back(llvm::AttributeList::get(getLLVMContext(),
|
||||
FirstIRArg + i + 1, Attrs));
|
||||
}
|
||||
}
|
||||
assert(ArgNo == FI.arg_size());
|
||||
|
||||
if (FuncAttrs.hasAttributes())
|
||||
PAL.push_back(llvm::
|
||||
AttributeSet::get(getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
FuncAttrs));
|
||||
PAL.push_back(llvm::AttributeList::get(
|
||||
getLLVMContext(), llvm::AttributeList::FunctionIndex, FuncAttrs));
|
||||
}
|
||||
|
||||
/// An argument came in as a promoted argument; demote it back to its
|
||||
@ -2206,8 +2204,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
||||
if (IRFunctionArgs.hasSRetArg()) {
|
||||
auto AI = cast<llvm::Argument>(FnArgs[IRFunctionArgs.getSRetArgNo()]);
|
||||
AI->setName("agg.result");
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(), AI->getArgNo() + 1,
|
||||
llvm::Attribute::NoAlias));
|
||||
AI->addAttr(llvm::AttributeList::get(getLLVMContext(), AI->getArgNo() + 1,
|
||||
llvm::Attribute::NoAlias));
|
||||
}
|
||||
|
||||
// Track if we received the parameter as a pointer (indirect, byval, or
|
||||
@ -2298,9 +2296,9 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
||||
if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(Arg)) {
|
||||
if (getNonNullAttr(CurCodeDecl, PVD, PVD->getType(),
|
||||
PVD->getFunctionScopeIndex()))
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
AI->addAttr(llvm::AttributeList::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
|
||||
QualType OTy = PVD->getOriginalType();
|
||||
if (const auto *ArrTy =
|
||||
@ -2317,12 +2315,12 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
||||
llvm::AttrBuilder Attrs;
|
||||
Attrs.addDereferenceableAttr(
|
||||
getContext().getTypeSizeInChars(ETy).getQuantity()*ArrSize);
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1, Attrs));
|
||||
AI->addAttr(llvm::AttributeList::get(
|
||||
getLLVMContext(), AI->getArgNo() + 1, Attrs));
|
||||
} else if (getContext().getTargetAddressSpace(ETy) == 0) {
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
AI->addAttr(llvm::AttributeList::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
}
|
||||
}
|
||||
} else if (const auto *ArrTy =
|
||||
@ -2332,9 +2330,9 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
||||
// we know that it must be nonnull.
|
||||
if (ArrTy->getSizeModifier() == VariableArrayType::Static &&
|
||||
!getContext().getTargetAddressSpace(ArrTy->getElementType()))
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
AI->addAttr(llvm::AttributeList::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NonNull));
|
||||
}
|
||||
|
||||
const auto *AVAttr = PVD->getAttr<AlignValueAttr>();
|
||||
@ -2352,15 +2350,14 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
||||
|
||||
llvm::AttrBuilder Attrs;
|
||||
Attrs.addAlignmentAttr(Alignment);
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1, Attrs));
|
||||
AI->addAttr(llvm::AttributeList::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1, Attrs));
|
||||
}
|
||||
}
|
||||
|
||||
if (Arg->getType().isRestrictQualified())
|
||||
AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
|
||||
AI->getArgNo() + 1,
|
||||
llvm::Attribute::NoAlias));
|
||||
AI->addAttr(llvm::AttributeList::get(
|
||||
getLLVMContext(), AI->getArgNo() + 1, llvm::Attribute::NoAlias));
|
||||
|
||||
// LLVM expects swifterror parameters to be used in very restricted
|
||||
// ways. Copy the value into a less-restricted temporary.
|
||||
@ -4119,8 +4116,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
|
||||
Callee.getAbstractInfo(),
|
||||
AttributeList, CallingConv,
|
||||
/*AttrOnCallSite=*/true);
|
||||
llvm::AttributeSet Attrs = llvm::AttributeSet::get(getLLVMContext(),
|
||||
AttributeList);
|
||||
llvm::AttributeList Attrs =
|
||||
llvm::AttributeList::get(getLLVMContext(), AttributeList);
|
||||
|
||||
// Apply some call-site-specific attributes.
|
||||
// TODO: work this into building the attribute set.
|
||||
@ -4131,15 +4128,14 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
|
||||
!(Callee.getAbstractInfo().getCalleeDecl() &&
|
||||
Callee.getAbstractInfo().getCalleeDecl()->hasAttr<NoInlineAttr>())) {
|
||||
Attrs =
|
||||
Attrs.addAttribute(getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
Attrs.addAttribute(getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::AlwaysInline);
|
||||
}
|
||||
|
||||
// Disable inlining inside SEH __try blocks.
|
||||
if (isSEHTryScope()) {
|
||||
Attrs =
|
||||
Attrs.addAttribute(getLLVMContext(), llvm::AttributeSet::FunctionIndex,
|
||||
Attrs.addAttribute(getLLVMContext(), llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoInline);
|
||||
}
|
||||
|
||||
@ -4156,7 +4152,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
|
||||
CannotThrow = true;
|
||||
} else {
|
||||
// Otherwise, nounwind call sites will never throw.
|
||||
CannotThrow = Attrs.hasAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
CannotThrow = Attrs.hasAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind);
|
||||
}
|
||||
llvm::BasicBlock *InvokeDest = CannotThrow ? nullptr : getInvokeDest();
|
||||
|
@ -25,10 +25,10 @@
|
||||
#include "ABIInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
class AttributeSet;
|
||||
class Function;
|
||||
class Type;
|
||||
class Value;
|
||||
class AttributeList;
|
||||
class Function;
|
||||
class Type;
|
||||
class Value;
|
||||
}
|
||||
|
||||
namespace clang {
|
||||
@ -39,28 +39,28 @@ namespace clang {
|
||||
class VarDecl;
|
||||
|
||||
namespace CodeGen {
|
||||
typedef SmallVector<llvm::AttributeSet, 8> AttributeListType;
|
||||
typedef SmallVector<llvm::AttributeList, 8> AttributeListType;
|
||||
|
||||
/// Abstract information about a function or function prototype.
|
||||
class CGCalleeInfo {
|
||||
/// \brief The function prototype of the callee.
|
||||
const FunctionProtoType *CalleeProtoTy;
|
||||
/// \brief The function declaration of the callee.
|
||||
const Decl *CalleeDecl;
|
||||
/// Abstract information about a function or function prototype.
|
||||
class CGCalleeInfo {
|
||||
/// \brief The function prototype of the callee.
|
||||
const FunctionProtoType *CalleeProtoTy;
|
||||
/// \brief The function declaration of the callee.
|
||||
const Decl *CalleeDecl;
|
||||
|
||||
public:
|
||||
explicit CGCalleeInfo() : CalleeProtoTy(nullptr), CalleeDecl(nullptr) {}
|
||||
CGCalleeInfo(const FunctionProtoType *calleeProtoTy, const Decl *calleeDecl)
|
||||
: CalleeProtoTy(calleeProtoTy), CalleeDecl(calleeDecl) {}
|
||||
CGCalleeInfo(const FunctionProtoType *calleeProtoTy)
|
||||
: CalleeProtoTy(calleeProtoTy), CalleeDecl(nullptr) {}
|
||||
CGCalleeInfo(const Decl *calleeDecl)
|
||||
: CalleeProtoTy(nullptr), CalleeDecl(calleeDecl) {}
|
||||
public:
|
||||
explicit CGCalleeInfo() : CalleeProtoTy(nullptr), CalleeDecl(nullptr) {}
|
||||
CGCalleeInfo(const FunctionProtoType *calleeProtoTy, const Decl *calleeDecl)
|
||||
: CalleeProtoTy(calleeProtoTy), CalleeDecl(calleeDecl) {}
|
||||
CGCalleeInfo(const FunctionProtoType *calleeProtoTy)
|
||||
: CalleeProtoTy(calleeProtoTy), CalleeDecl(nullptr) {}
|
||||
CGCalleeInfo(const Decl *calleeDecl)
|
||||
: CalleeProtoTy(nullptr), CalleeDecl(calleeDecl) {}
|
||||
|
||||
const FunctionProtoType *getCalleeFunctionProtoType() const {
|
||||
return CalleeProtoTy;
|
||||
}
|
||||
const Decl *getCalleeDecl() const { return CalleeDecl; }
|
||||
const FunctionProtoType *getCalleeFunctionProtoType() const {
|
||||
return CalleeProtoTy;
|
||||
}
|
||||
const Decl *getCalleeDecl() const { return CalleeDecl; }
|
||||
};
|
||||
|
||||
/// All available information about a concrete callee.
|
||||
|
@ -237,7 +237,7 @@ void CodeGenFunction::registerGlobalDtorWithAtExit(const VarDecl &VD,
|
||||
llvm::FunctionType::get(IntTy, dtorStub->getType(), false);
|
||||
|
||||
llvm::Constant *atexit =
|
||||
CGM.CreateRuntimeFunction(atexitTy, "atexit", llvm::AttributeSet(),
|
||||
CGM.CreateRuntimeFunction(atexitTy, "atexit", llvm::AttributeList(),
|
||||
/*Local=*/true);
|
||||
if (llvm::Function *atexitFn = dyn_cast<llvm::Function>(atexit))
|
||||
atexitFn->setDoesNotThrow();
|
||||
|
@ -231,7 +231,7 @@ static llvm::Constant *getPersonalityFn(CodeGenModule &CGM,
|
||||
const EHPersonality &Personality) {
|
||||
return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.Int32Ty, true),
|
||||
Personality.PersonalityFn,
|
||||
llvm::AttributeSet(), /*Local=*/true);
|
||||
llvm::AttributeList(), /*Local=*/true);
|
||||
}
|
||||
|
||||
static llvm::Constant *getOpaquePersonalityFn(CodeGenModule &CGM,
|
||||
|
@ -2615,8 +2615,8 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
|
||||
|
||||
llvm::Value *Fn = CGF.CGM.CreateRuntimeFunction(
|
||||
FnType, FnName,
|
||||
llvm::AttributeSet::get(CGF.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex, B),
|
||||
llvm::AttributeList::get(CGF.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex, B),
|
||||
/*Local=*/true);
|
||||
llvm::CallInst *HandlerCall = CGF.EmitNounwindRuntimeCall(Fn, FnArgs);
|
||||
if (!MayReturn) {
|
||||
@ -2891,7 +2891,7 @@ llvm::CallInst *CodeGenFunction::EmitTrapCall(llvm::Intrinsic::ID IntrID) {
|
||||
if (!CGM.getCodeGenOpts().TrapFuncName.empty()) {
|
||||
auto A = llvm::Attribute::get(getLLVMContext(), "trap-func-name",
|
||||
CGM.getCodeGenOpts().TrapFuncName);
|
||||
TrapCall->addAttribute(llvm::AttributeSet::FunctionIndex, A);
|
||||
TrapCall->addAttribute(llvm::AttributeList::FunctionIndex, A);
|
||||
}
|
||||
|
||||
return TrapCall;
|
||||
|
@ -1275,10 +1275,10 @@ static RValue EmitNewDeleteCall(CodeGenFunction &CGF,
|
||||
Fn && Fn->hasFnAttribute(llvm::Attribute::NoBuiltin)) {
|
||||
// FIXME: Add addAttribute to CallSite.
|
||||
if (llvm::CallInst *CI = dyn_cast<llvm::CallInst>(CallOrInvoke))
|
||||
CI->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
CI->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::Builtin);
|
||||
else if (llvm::InvokeInst *II = dyn_cast<llvm::InvokeInst>(CallOrInvoke))
|
||||
II->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
II->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::Builtin);
|
||||
else
|
||||
llvm_unreachable("unexpected kind of call instruction");
|
||||
|
@ -1840,7 +1840,7 @@ static llvm::Constant *createARCRuntimeFunction(CodeGenModule &CGM,
|
||||
llvm::AttrBuilder B;
|
||||
B.addAttribute(llvm::Attribute::Returned);
|
||||
|
||||
F->arg_begin()->addAttr(llvm::AttributeSet::get(F->getContext(), 1, B));
|
||||
F->arg_begin()->addAttr(llvm::AttributeList::get(F->getContext(), 1, B));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,13 +64,11 @@ private:
|
||||
// Add the non-lazy-bind attribute, since objc_msgSend is likely to
|
||||
// be called a lot.
|
||||
llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
|
||||
return
|
||||
CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
|
||||
params, true),
|
||||
"objc_msgSend",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NonLazyBind));
|
||||
return CGM.CreateRuntimeFunction(
|
||||
llvm::FunctionType::get(ObjectPtrTy, params, true), "objc_msgSend",
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NonLazyBind));
|
||||
}
|
||||
|
||||
/// void objc_msgSend_stret (id, SEL, ...)
|
||||
@ -589,13 +587,11 @@ public:
|
||||
llvm::Constant *getSetJmpFn() {
|
||||
// This is specifically the prototype for x86.
|
||||
llvm::Type *params[] = { CGM.Int32Ty->getPointerTo() };
|
||||
return
|
||||
CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.Int32Ty,
|
||||
params, false),
|
||||
"_setjmp",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NonLazyBind));
|
||||
return CGM.CreateRuntimeFunction(
|
||||
llvm::FunctionType::get(CGM.Int32Ty, params, false), "_setjmp",
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NonLazyBind));
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -2127,16 +2127,16 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
|
||||
llvm::InlineAsm::get(FTy, AsmString, Constraints, HasSideEffect,
|
||||
/* IsAlignStack */ false, AsmDialect);
|
||||
llvm::CallInst *Result = Builder.CreateCall(IA, Args);
|
||||
Result->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
Result->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind);
|
||||
|
||||
// Attach readnone and readonly attributes.
|
||||
if (!HasSideEffect) {
|
||||
if (ReadNone)
|
||||
Result->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
Result->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::ReadNone);
|
||||
else if (ReadOnly)
|
||||
Result->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
Result->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::ReadOnly);
|
||||
}
|
||||
|
||||
@ -2157,7 +2157,7 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
|
||||
// Conservatively, mark all inline asm blocks in CUDA as convergent
|
||||
// (meaning, they may call an intrinsically convergent op, such as bar.sync,
|
||||
// and so can't have certain optimizations applied around them).
|
||||
Result->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
Result->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::Convergent);
|
||||
}
|
||||
|
||||
|
@ -383,8 +383,8 @@ void CodeGenFunction::EmitMustTailThunk(const CXXMethodDecl *MD,
|
||||
CGM.ConstructAttributeList(CalleePtr->getName(),
|
||||
*CurFnInfo, MD, AttributeList,
|
||||
CallingConv, /*AttrOnCallSite=*/true);
|
||||
llvm::AttributeSet Attrs =
|
||||
llvm::AttributeSet::get(getLLVMContext(), AttributeList);
|
||||
llvm::AttributeList Attrs =
|
||||
llvm::AttributeList::get(getLLVMContext(), AttributeList);
|
||||
Call->setAttributes(Attrs);
|
||||
Call->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
|
||||
|
||||
|
@ -840,7 +840,7 @@ void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
|
||||
AttributeListType AttributeList;
|
||||
ConstructAttributeList(F->getName(), Info, D, AttributeList, CallingConv,
|
||||
false);
|
||||
F->setAttributes(llvm::AttributeSet::get(getLLVMContext(), AttributeList));
|
||||
F->setAttributes(llvm::AttributeList::get(getLLVMContext(), AttributeList));
|
||||
F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
|
||||
}
|
||||
|
||||
@ -889,10 +889,10 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
|
||||
CodeGenOpts.getInlining() == CodeGenOptions::OnlyAlwaysInlining)
|
||||
B.addAttribute(llvm::Attribute::NoInline);
|
||||
|
||||
F->addAttributes(llvm::AttributeSet::FunctionIndex,
|
||||
llvm::AttributeSet::get(
|
||||
F->getContext(),
|
||||
llvm::AttributeSet::FunctionIndex, B));
|
||||
F->addAttributes(
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::AttributeList::get(F->getContext(),
|
||||
llvm::AttributeList::FunctionIndex, B));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -958,9 +958,9 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
|
||||
B.addAttribute(llvm::Attribute::MinSize);
|
||||
}
|
||||
|
||||
F->addAttributes(llvm::AttributeSet::FunctionIndex,
|
||||
llvm::AttributeSet::get(
|
||||
F->getContext(), llvm::AttributeSet::FunctionIndex, B));
|
||||
F->addAttributes(llvm::AttributeList::FunctionIndex,
|
||||
llvm::AttributeList::get(
|
||||
F->getContext(), llvm::AttributeList::FunctionIndex, B));
|
||||
|
||||
unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
|
||||
if (alignment)
|
||||
@ -1113,7 +1113,7 @@ void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
|
||||
if (FD->isReplaceableGlobalAllocationFunction()) {
|
||||
// A replaceable global allocation function does not act like a builtin by
|
||||
// default, only if it is invoked by a new-expression or delete-expression.
|
||||
F->addAttribute(llvm::AttributeSet::FunctionIndex,
|
||||
F->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoBuiltin);
|
||||
|
||||
// A sane operator new returns a non-aliasing pointer.
|
||||
@ -1122,7 +1122,7 @@ void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
|
||||
auto Kind = FD->getDeclName().getCXXOverloadedOperator();
|
||||
if (getCodeGenOpts().AssumeSaneOperatorNew &&
|
||||
(Kind == OO_New || Kind == OO_Array_New))
|
||||
F->addAttribute(llvm::AttributeSet::ReturnIndex,
|
||||
F->addAttribute(llvm::AttributeList::ReturnIndex,
|
||||
llvm::Attribute::NoAlias);
|
||||
}
|
||||
|
||||
@ -1910,13 +1910,10 @@ static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
|
||||
///
|
||||
/// If D is non-null, it specifies a decl that correspond to this. This is used
|
||||
/// to set the attributes on the function when it is first created.
|
||||
llvm::Constant *
|
||||
CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
|
||||
llvm::Type *Ty,
|
||||
GlobalDecl GD, bool ForVTable,
|
||||
bool DontDefer, bool IsThunk,
|
||||
llvm::AttributeSet ExtraAttrs,
|
||||
ForDefinition_t IsForDefinition) {
|
||||
llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(
|
||||
StringRef MangledName, llvm::Type *Ty, GlobalDecl GD, bool ForVTable,
|
||||
bool DontDefer, bool IsThunk, llvm::AttributeList ExtraAttrs,
|
||||
ForDefinition_t IsForDefinition) {
|
||||
const Decl *D = GD.getDecl();
|
||||
|
||||
// Lookup the entry, lazily creating it if necessary.
|
||||
@ -2006,12 +2003,11 @@ CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
|
||||
assert(F->getName() == MangledName && "name was uniqued!");
|
||||
if (D)
|
||||
SetFunctionAttributes(GD, F, IsIncompleteFunction, IsThunk);
|
||||
if (ExtraAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex)) {
|
||||
llvm::AttrBuilder B(ExtraAttrs, llvm::AttributeSet::FunctionIndex);
|
||||
F->addAttributes(llvm::AttributeSet::FunctionIndex,
|
||||
llvm::AttributeSet::get(VMContext,
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
B));
|
||||
if (ExtraAttrs.hasAttributes(llvm::AttributeList::FunctionIndex)) {
|
||||
llvm::AttrBuilder B(ExtraAttrs, llvm::AttributeList::FunctionIndex);
|
||||
F->addAttributes(llvm::AttributeList::FunctionIndex,
|
||||
llvm::AttributeList::get(
|
||||
VMContext, llvm::AttributeList::FunctionIndex, B));
|
||||
}
|
||||
|
||||
if (!DontDefer) {
|
||||
@ -2086,7 +2082,7 @@ llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
|
||||
|
||||
StringRef MangledName = getMangledName(GD);
|
||||
return GetOrCreateLLVMFunction(MangledName, Ty, GD, ForVTable, DontDefer,
|
||||
/*IsThunk=*/false, llvm::AttributeSet(),
|
||||
/*IsThunk=*/false, llvm::AttributeList(),
|
||||
IsForDefinition);
|
||||
}
|
||||
|
||||
@ -2132,7 +2128,7 @@ GetRuntimeFunctionDecl(ASTContext &C, StringRef Name) {
|
||||
/// type and name.
|
||||
llvm::Constant *
|
||||
CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy, StringRef Name,
|
||||
llvm::AttributeSet ExtraAttrs,
|
||||
llvm::AttributeList ExtraAttrs,
|
||||
bool Local) {
|
||||
llvm::Constant *C =
|
||||
GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
|
||||
@ -2160,9 +2156,8 @@ CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy, StringRef Name,
|
||||
/// CreateBuiltinFunction - Create a new builtin function with the specified
|
||||
/// type and name.
|
||||
llvm::Constant *
|
||||
CodeGenModule::CreateBuiltinFunction(llvm::FunctionType *FTy,
|
||||
StringRef Name,
|
||||
llvm::AttributeSet ExtraAttrs) {
|
||||
CodeGenModule::CreateBuiltinFunction(llvm::FunctionType *FTy, StringRef Name,
|
||||
llvm::AttributeList ExtraAttrs) {
|
||||
llvm::Constant *C =
|
||||
GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
|
||||
/*DontDefer=*/false, /*IsThunk=*/false, ExtraAttrs);
|
||||
@ -2914,14 +2909,13 @@ static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
|
||||
continue;
|
||||
|
||||
// Get the call site's attribute list.
|
||||
SmallVector<llvm::AttributeSet, 8> newAttrs;
|
||||
llvm::AttributeSet oldAttrs = callSite.getAttributes();
|
||||
SmallVector<llvm::AttributeList, 8> newAttrs;
|
||||
llvm::AttributeList oldAttrs = callSite.getAttributes();
|
||||
|
||||
// Collect any return attributes from the call.
|
||||
if (oldAttrs.hasAttributes(llvm::AttributeSet::ReturnIndex))
|
||||
newAttrs.push_back(
|
||||
llvm::AttributeSet::get(newFn->getContext(),
|
||||
oldAttrs.getRetAttributes()));
|
||||
if (oldAttrs.hasAttributes(llvm::AttributeList::ReturnIndex))
|
||||
newAttrs.push_back(llvm::AttributeList::get(newFn->getContext(),
|
||||
oldAttrs.getRetAttributes()));
|
||||
|
||||
// If the function was passed too few arguments, don't transform.
|
||||
unsigned newNumArgs = newFn->arg_size();
|
||||
@ -2940,17 +2934,15 @@ static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
|
||||
|
||||
// Add any parameter attributes.
|
||||
if (oldAttrs.hasAttributes(argNo + 1))
|
||||
newAttrs.
|
||||
push_back(llvm::
|
||||
AttributeSet::get(newFn->getContext(),
|
||||
oldAttrs.getParamAttributes(argNo + 1)));
|
||||
newAttrs.push_back(llvm::AttributeList::get(
|
||||
newFn->getContext(), oldAttrs.getParamAttributes(argNo + 1)));
|
||||
}
|
||||
if (dontTransform)
|
||||
continue;
|
||||
|
||||
if (oldAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex))
|
||||
newAttrs.push_back(llvm::AttributeSet::get(newFn->getContext(),
|
||||
oldAttrs.getFnAttributes()));
|
||||
if (oldAttrs.hasAttributes(llvm::AttributeList::FunctionIndex))
|
||||
newAttrs.push_back(llvm::AttributeList::get(newFn->getContext(),
|
||||
oldAttrs.getFnAttributes()));
|
||||
|
||||
// Okay, we can transform this. Create the new call instruction and copy
|
||||
// over the required information.
|
||||
@ -2976,7 +2968,7 @@ static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
|
||||
if (!newCall->getType()->isVoidTy())
|
||||
newCall->takeName(callSite.getInstruction());
|
||||
newCall.setAttributes(
|
||||
llvm::AttributeSet::get(newFn->getContext(), newAttrs));
|
||||
llvm::AttributeList::get(newFn->getContext(), newAttrs));
|
||||
newCall.setCallingConv(callSite.getCallingConv());
|
||||
|
||||
// Finally, remove the old call, replacing any uses with the new one.
|
||||
|
@ -910,14 +910,13 @@ public:
|
||||
/// Create a new runtime function with the specified type and name.
|
||||
llvm::Constant *
|
||||
CreateRuntimeFunction(llvm::FunctionType *Ty, StringRef Name,
|
||||
llvm::AttributeSet ExtraAttrs = llvm::AttributeSet(),
|
||||
llvm::AttributeList ExtraAttrs = llvm::AttributeList(),
|
||||
bool Local = false);
|
||||
|
||||
/// Create a new compiler builtin function with the specified type and name.
|
||||
llvm::Constant *CreateBuiltinFunction(llvm::FunctionType *Ty,
|
||||
StringRef Name,
|
||||
llvm::AttributeSet ExtraAttrs =
|
||||
llvm::AttributeSet());
|
||||
llvm::Constant *
|
||||
CreateBuiltinFunction(llvm::FunctionType *Ty, StringRef Name,
|
||||
llvm::AttributeList ExtraAttrs = llvm::AttributeList());
|
||||
/// Create a new runtime global variable with the specified type and name.
|
||||
llvm::Constant *CreateRuntimeVariable(llvm::Type *Ty,
|
||||
StringRef Name);
|
||||
@ -1213,12 +1212,11 @@ public:
|
||||
llvm::Constant *getNullPointer(llvm::PointerType *T, QualType QT);
|
||||
|
||||
private:
|
||||
llvm::Constant *
|
||||
GetOrCreateLLVMFunction(StringRef MangledName, llvm::Type *Ty, GlobalDecl D,
|
||||
bool ForVTable, bool DontDefer = false,
|
||||
bool IsThunk = false,
|
||||
llvm::AttributeSet ExtraAttrs = llvm::AttributeSet(),
|
||||
ForDefinition_t IsForDefinition = NotForDefinition);
|
||||
llvm::Constant *GetOrCreateLLVMFunction(
|
||||
StringRef MangledName, llvm::Type *Ty, GlobalDecl D, bool ForVTable,
|
||||
bool DontDefer = false, bool IsThunk = false,
|
||||
llvm::AttributeList ExtraAttrs = llvm::AttributeList(),
|
||||
ForDefinition_t IsForDefinition = NotForDefinition);
|
||||
|
||||
llvm::Constant *GetOrCreateLLVMGlobal(StringRef MangledName,
|
||||
llvm::PointerType *PTy,
|
||||
|
@ -1134,8 +1134,8 @@ static llvm::Constant *getItaniumDynamicCastFn(CodeGenFunction &CGF) {
|
||||
// Mark the function as nounwind readonly.
|
||||
llvm::Attribute::AttrKind FuncAttrs[] = { llvm::Attribute::NoUnwind,
|
||||
llvm::Attribute::ReadOnly };
|
||||
llvm::AttributeSet Attrs = llvm::AttributeSet::get(
|
||||
CGF.getLLVMContext(), llvm::AttributeSet::FunctionIndex, FuncAttrs);
|
||||
llvm::AttributeList Attrs = llvm::AttributeList::get(
|
||||
CGF.getLLVMContext(), llvm::AttributeList::FunctionIndex, FuncAttrs);
|
||||
|
||||
return CGF.CGM.CreateRuntimeFunction(FTy, "__dynamic_cast", Attrs);
|
||||
}
|
||||
@ -1910,10 +1910,11 @@ static llvm::Constant *getGuardAcquireFn(CodeGenModule &CGM,
|
||||
llvm::FunctionType *FTy =
|
||||
llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
|
||||
GuardPtrTy, /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_acquire",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "__cxa_guard_acquire",
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
}
|
||||
|
||||
static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
|
||||
@ -1921,10 +1922,11 @@ static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
|
||||
// void __cxa_guard_release(__guard *guard_object);
|
||||
llvm::FunctionType *FTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_release",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "__cxa_guard_release",
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
}
|
||||
|
||||
static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
|
||||
@ -1932,10 +1934,11 @@ static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
|
||||
// void __cxa_guard_abort(__guard *guard_object);
|
||||
llvm::FunctionType *FTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_abort",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "__cxa_guard_abort",
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind));
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -3927,9 +3930,8 @@ void ItaniumCXXABI::emitBeginCatch(CodeGenFunction &CGF,
|
||||
static llvm::Constant *getClangCallTerminateFn(CodeGenModule &CGM) {
|
||||
llvm::FunctionType *fnTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
|
||||
llvm::Constant *fnRef =
|
||||
CGM.CreateRuntimeFunction(fnTy, "__clang_call_terminate",
|
||||
llvm::AttributeSet(), /*Local=*/true);
|
||||
llvm::Constant *fnRef = CGM.CreateRuntimeFunction(
|
||||
fnTy, "__clang_call_terminate", llvm::AttributeList(), /*Local=*/true);
|
||||
|
||||
llvm::Function *fn = dyn_cast<llvm::Function>(fnRef);
|
||||
if (fn && fn->empty()) {
|
||||
|
@ -2210,9 +2210,8 @@ static void emitGlobalDtorWithTLRegDtor(CodeGenFunction &CGF, const VarDecl &VD,
|
||||
llvm::FunctionType *TLRegDtorTy = llvm::FunctionType::get(
|
||||
CGF.IntTy, DtorStub->getType(), /*IsVarArg=*/false);
|
||||
|
||||
llvm::Constant *TLRegDtor =
|
||||
CGF.CGM.CreateRuntimeFunction(TLRegDtorTy, "__tlregdtor",
|
||||
llvm::AttributeSet(), /*Local=*/true);
|
||||
llvm::Constant *TLRegDtor = CGF.CGM.CreateRuntimeFunction(
|
||||
TLRegDtorTy, "__tlregdtor", llvm::AttributeList(), /*Local=*/true);
|
||||
if (llvm::Function *TLRegDtorFn = dyn_cast<llvm::Function>(TLRegDtor))
|
||||
TLRegDtorFn->setDoesNotThrow();
|
||||
|
||||
@ -2308,9 +2307,9 @@ static llvm::Constant *getInitThreadHeaderFn(CodeGenModule &CGM) {
|
||||
CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "_Init_thread_header",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
/*Local=*/true);
|
||||
}
|
||||
|
||||
@ -2320,9 +2319,9 @@ static llvm::Constant *getInitThreadFooterFn(CodeGenModule &CGM) {
|
||||
CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "_Init_thread_footer",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
/*Local=*/true);
|
||||
}
|
||||
|
||||
@ -2332,9 +2331,9 @@ static llvm::Constant *getInitThreadAbortFn(CodeGenModule &CGM) {
|
||||
CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
|
||||
return CGM.CreateRuntimeFunction(
|
||||
FTy, "_Init_thread_abort",
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::Attribute::NoUnwind),
|
||||
/*Local=*/true);
|
||||
}
|
||||
|
||||
|
@ -1901,10 +1901,10 @@ void X86_32TargetCodeGenInfo::setTargetAttributes(const Decl *D,
|
||||
// Now add the 'alignstack' attribute with a value of 16.
|
||||
llvm::AttrBuilder B;
|
||||
B.addStackAlignmentAttr(16);
|
||||
Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
B));
|
||||
Fn->addAttributes(
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex, B));
|
||||
}
|
||||
if (FD->hasAttr<AnyX86InterruptAttr>()) {
|
||||
llvm::Function *Fn = cast<llvm::Function>(GV);
|
||||
@ -5449,10 +5449,10 @@ public:
|
||||
// the backend to perform a realignment as part of the function prologue.
|
||||
llvm::AttrBuilder B;
|
||||
B.addStackAlignmentAttr(8);
|
||||
Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
|
||||
llvm::AttributeSet::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeSet::FunctionIndex,
|
||||
B));
|
||||
Fn->addAttributes(
|
||||
llvm::AttributeList::FunctionIndex,
|
||||
llvm::AttributeList::get(CGM.getLLVMContext(),
|
||||
llvm::AttributeList::FunctionIndex, B));
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user