forked from OSchip/llvm-project
Record function attribute "stackrealign" instead of using backend option
-force-align-stack. Also, make changes to the driver so that -mno-stack-realign is no longer an option exposed to the end-user that disallows stack realignment in the backend. Differential Revision: http://reviews.llvm.org/D11815 llvm-svn: 247451
This commit is contained in:
parent
bc497c93f5
commit
aecca041c9
|
@ -150,7 +150,7 @@ CODEGENOPT(UseRegisterSizedBitfieldAccess , 1, 0)
|
|||
CODEGENOPT(VerifyModule , 1, 1) ///< Control whether the module should be run
|
||||
///< through the LLVM Verifier.
|
||||
|
||||
CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to permit stack
|
||||
CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to force stack
|
||||
///< realignment.
|
||||
CODEGENOPT(UseInitArray , 1, 0) ///< Control whether to use .init_array or
|
||||
///< .ctors.
|
||||
|
|
|
@ -1494,8 +1494,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
|||
FuncAttrs.addAttribute("stack-protector-buffer-size",
|
||||
llvm::utostr(CodeGenOpts.SSPBufferSize));
|
||||
|
||||
if (!CodeGenOpts.StackRealignment)
|
||||
FuncAttrs.addAttribute("no-realign-stack");
|
||||
if (CodeGenOpts.StackRealignment)
|
||||
FuncAttrs.addAttribute("stackrealign");
|
||||
|
||||
// Add target-cpu and target-features attributes to functions. If
|
||||
// we have a decl for the function and it has a target attribute then
|
||||
|
|
|
@ -4326,14 +4326,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
// Translate -mstackrealign
|
||||
if (Args.hasFlag(options::OPT_mstackrealign, options::OPT_mno_stackrealign,
|
||||
false)) {
|
||||
CmdArgs.push_back("-backend-option");
|
||||
CmdArgs.push_back("-force-align-stack");
|
||||
}
|
||||
if (!Args.hasFlag(options::OPT_mno_stackrealign, options::OPT_mstackrealign,
|
||||
false)) {
|
||||
false))
|
||||
CmdArgs.push_back(Args.MakeArgString("-mstackrealign"));
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_mstack_alignment)) {
|
||||
StringRef alignment = Args.getLastArgValue(options::OPT_mstack_alignment);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: %clang_cc1 %s -emit-llvm -o - -mstackrealign | FileCheck %s -check-prefix=REALIGN
|
||||
// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s -check-prefix=NO-REALIGN
|
||||
|
||||
// REALIGN: attributes #{{[0-9]+}} = {{{.*}} "stackrealign"
|
||||
// NO-REALIGN-NOT: attributes #{{[0-9]+}} = {{{.*}} "stackrealign"
|
||||
|
||||
void test1() {
|
||||
}
|
|
@ -3,11 +3,11 @@
|
|||
// TEST0: clang{{.*}}" "-cc1"
|
||||
// TEST0: "-rewrite-objc"
|
||||
// FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead.
|
||||
// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST0: rewrite-legacy-objc.m"
|
||||
// RUN: %clang -no-canonical-prefixes -target i386-apple-macosx10.9.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=TEST1 %s
|
||||
// RUN: %clang -no-canonical-prefixes -target i386-apple-macosx10.6.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=TEST2 %s
|
||||
// TEST1: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST2: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST1: "-fmessage-length" "0" "-stack-protector" "1" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST2: "-fmessage-length" "0" "-stack-protector" "1" "-fblocks" "-fobjc-runtime=macosx-fragile" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
// TEST0: clang{{.*}}" "-cc1"
|
||||
// TEST0: "-rewrite-objc"
|
||||
// FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead.
|
||||
// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-fblocks" "-fobjc-runtime=macosx" "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
// RUN: %clang -### %s 2>&1 | FileCheck %s -check-prefix=NORMAL
|
||||
// NORMAL-NOT: -force-align-stack
|
||||
// NORMAL: -mstackrealign
|
||||
// RUN: %clang -### %s 2>&1 | FileCheck %s -check-prefix=NO-REALIGN
|
||||
// RUN: %clang -### -mno-stackrealign -mstackrealign %s 2>&1 | FileCheck %s -check-prefix=REALIGN
|
||||
// RUN: %clang -### -mstackrealign -mno-stackrealign %s 2>&1 | FileCheck %s -check-prefix=NO-REALIGN
|
||||
|
||||
// RUN: %clang -### -mstackrealign %s 2>&1 | FileCheck %s -check-prefix=MREALIGN
|
||||
// MREALIGN: -force-align-stack
|
||||
// MREALIGN: -mstackrealign
|
||||
|
||||
// RUN: %clang -### -mno-stackrealign %s 2>&1 | \
|
||||
// RUN: FileCheck %s -check-prefix=MNOREALIGN
|
||||
// MNOREALIGN-NOT: -force-align-stack
|
||||
// MNOREALIGN-NOT: -mstackrealign
|
||||
// REALIGN: -mstackrealign
|
||||
// NO-REALIGN-NOT: -mstackrealign
|
||||
|
|
Loading…
Reference in New Issue