Emit the 'alignstack' LLVM function attribute when we encounter a function
marked 'force_align_arg_pointer'. Almost there; now all I need to do is finish up the backend. llvm-svn: 96100
This commit is contained in:
@@ -325,6 +325,9 @@ class X86_32TargetCodeGenInfo : public TargetCodeGenInfo {
|
||||
public:
|
||||
X86_32TargetCodeGenInfo(ASTContext &Context, bool d, bool p)
|
||||
:TargetCodeGenInfo(new X86_32ABIInfo(Context, d, p)) {}
|
||||
|
||||
void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
|
||||
CodeGen::CodeGenModule &CGM) const;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -551,6 +554,20 @@ llvm::Value *X86_32ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
|
||||
return AddrTyped;
|
||||
}
|
||||
|
||||
void X86_32TargetCodeGenInfo::SetTargetAttributes(const Decl *D,
|
||||
llvm::GlobalValue *GV,
|
||||
CodeGen::CodeGenModule &CGM) const {
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
|
||||
if (FD->hasAttr<X86ForceAlignArgPointerAttr>()) {
|
||||
// Get the LLVM function.
|
||||
llvm::Function *Fn = cast<llvm::Function>(GV);
|
||||
|
||||
// Now add the 'alignstack' attribute with a value of 16.
|
||||
Fn->addFnAttr(llvm::Attribute::constructStackAlignmentFromInt(16));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
/// X86_64ABIInfo - The X86_64 ABI information.
|
||||
class X86_64ABIInfo : public ABIInfo {
|
||||
|
||||
Reference in New Issue
Block a user