diff options
author | Doug Gregor <dgregor@apple.com> | 2021-09-15 13:35:08 -0700 |
---|---|---|
committer | Arnold Schwaighofer <aschwaighofer@apple.com> | 2021-09-16 06:57:45 -0700 |
commit | a773db7d76222ccf4365979e01dd582fd2b5b3df (patch) | |
tree | 7091b4cd91761e1212b209f176e6239068638926 /llvm/lib/CodeGen/CommandFlags.cpp | |
parent | baa18ee63e83ee534a5844e6219665ce42b57707 (diff) | |
download | llvm-a773db7d76222ccf4365979e01dd582fd2b5b3df.zip llvm-a773db7d76222ccf4365979e01dd582fd2b5b3df.tar.gz llvm-a773db7d76222ccf4365979e01dd582fd2b5b3df.tar.bz2 |
Add a command-line flag to control the Swift extended async frame info.
Introduce a new command-line flag `-swift-async-fp={auto|always|never}`
that controls how code generation sets the Swift extended async frame
info bit. There are three possibilities:
* `auto`: which determines how to set the bit based on deployment target, either
statically or dynamically via `swift_async_extendedFramePointerFlags`.
* `always`: the default, always set the bit statically, regardless of deployment
target.
* `never`: never set the bit, regardless of deployment target.
Patch by Doug Gregor <dgregor@apple.com>
Reviewed By: doug.gregor
Differential Revision: https://reviews.llvm.org/D109392
Diffstat (limited to 'llvm/lib/CodeGen/CommandFlags.cpp')
-rw-r--r-- | llvm/lib/CodeGen/CommandFlags.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index c30e1c3..8f31630 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -65,6 +65,7 @@ CGOPT(DenormalMode::DenormalModeKind, DenormalFP32Math) CGOPT(bool, EnableHonorSignDependentRoundingFPMath) CGOPT(FloatABI::ABIType, FloatABIForCalls) CGOPT(FPOpFusion::FPOpFusionMode, FuseFPOps) +CGOPT(SwiftAsyncFramePointerMode, SwiftAsyncFramePointer) CGOPT(bool, DontPlaceZerosInBSS) CGOPT(bool, EnableGuaranteedTailCallOpt) CGOPT(bool, DisableTailCalls) @@ -278,6 +279,18 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() { "Only fuse FP ops when the result won't be affected."))); CGBINDOPT(FuseFPOps); + static cl::opt<SwiftAsyncFramePointerMode> SwiftAsyncFramePointer( + "swift-async-fp", + cl::desc("Determine when the Swift async frame pointer should be set"), + cl::init(SwiftAsyncFramePointerMode::Always), + cl::values(clEnumValN(SwiftAsyncFramePointerMode::DeploymentBased, "auto", + "Determine based on deployment target"), + clEnumValN(SwiftAsyncFramePointerMode::Always, "always", + "Always set the bit"), + clEnumValN(SwiftAsyncFramePointerMode::Never, "never", + "Never set the bit"))); + CGBINDOPT(SwiftAsyncFramePointer); + static cl::opt<bool> DontPlaceZerosInBSS( "nozero-initialized-in-bss", cl::desc("Don't place zero-initialized symbols into bss section"), @@ -539,7 +552,7 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) { Options.ThreadModel = getThreadModel(); Options.EABIVersion = getEABIVersion(); Options.DebuggerTuning = getDebuggerTuningOpt(); - + Options.SwiftAsyncFramePointer = getSwiftAsyncFramePointer(); return Options; } |