forked from OSchip/llvm-project
[clang] Explicitly set the EmulatedTLS codegen option. NFC.
Set the EmulatedTLS option based on `Triple::hasDefaultEmulatedTLS()` if the user didn't specify it; set `ExplicitEmulatedTLS` to true in `llvm::TargetOptions` and set `EmulatedTLS` to Clang's opinion of what the default or preference is. This avoids any risk of deviance between the two. This affects one check of `getCodeGenOpts().EmulatedTLS` in `shouldAssumeDSOLocal` in CodeGenModule, but as that check only is done for `TT.isWindowsGNUEnvironment()`, and `hasDefaultEmulatedTLS()` returns false for such environments it doesn't make any current testable difference - thus NFC. Some mingw distributions carry a downstream patch, that enables emulated TLS by default for mingw targets in `hasDefaultEmulatedTLS()` - and for such cases, this patch does make a difference and fixes the detection of emulated TLS, if it is implicitly enabled. Differential Revision: https://reviews.llvm.org/D132916
This commit is contained in:
parent
6bf1b4e8e0
commit
fbfe1db4a9
|
@ -88,7 +88,6 @@ CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. GCDA.
|
|||
CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka GCNO.
|
||||
CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.
|
||||
CODEGENOPT(EmulatedTLS , 1, 0) ///< Set by default or -f[no-]emulated-tls.
|
||||
CODEGENOPT(ExplicitEmulatedTLS , 1, 0) ///< Set if -f[no-]emulated-tls is used.
|
||||
/// Embed Bitcode mode (off/all/bitcode/marker).
|
||||
ENUM_CODEGENOPT(EmbedBitcode, EmbedBitcodeKind, 2, Embed_Off)
|
||||
/// Inline asm dialect, -masm=(att|intel)
|
||||
|
|
|
@ -440,7 +440,7 @@ static bool initTargetOptions(DiagnosticsEngine &Diags,
|
|||
CodeGenOpts.UniqueBasicBlockSectionNames;
|
||||
Options.TLSSize = CodeGenOpts.TLSSize;
|
||||
Options.EmulatedTLS = CodeGenOpts.EmulatedTLS;
|
||||
Options.ExplicitEmulatedTLS = CodeGenOpts.ExplicitEmulatedTLS;
|
||||
Options.ExplicitEmulatedTLS = true;
|
||||
Options.DebuggerTuning = CodeGenOpts.getDebuggerTuning();
|
||||
Options.EmitStackSizeSection = CodeGenOpts.StackSizeSection;
|
||||
Options.StackUsageOutput = CodeGenOpts.StackUsageOutput;
|
||||
|
|
|
@ -1492,13 +1492,8 @@ void CompilerInvocation::GenerateCodeGenArgs(
|
|||
F.Filename, SA);
|
||||
}
|
||||
|
||||
// TODO: Consider removing marshalling annotations from f[no_]emulated_tls.
|
||||
// That would make it easy to generate the option only **once** if it was
|
||||
// explicitly set to non-default value.
|
||||
if (Opts.ExplicitEmulatedTLS) {
|
||||
GenerateArg(
|
||||
Args, Opts.EmulatedTLS ? OPT_femulated_tls : OPT_fno_emulated_tls, SA);
|
||||
}
|
||||
GenerateArg(
|
||||
Args, Opts.EmulatedTLS ? OPT_femulated_tls : OPT_fno_emulated_tls, SA);
|
||||
|
||||
if (Opts.FPDenormalMode != llvm::DenormalMode::getIEEE())
|
||||
GenerateArg(Args, OPT_fdenormal_fp_math_EQ, Opts.FPDenormalMode.str(), SA);
|
||||
|
@ -1862,9 +1857,9 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
|
|||
Opts.LinkBitcodeFiles.push_back(F);
|
||||
}
|
||||
|
||||
if (Args.getLastArg(OPT_femulated_tls) ||
|
||||
Args.getLastArg(OPT_fno_emulated_tls)) {
|
||||
Opts.ExplicitEmulatedTLS = true;
|
||||
if (!Args.getLastArg(OPT_femulated_tls) &&
|
||||
!Args.getLastArg(OPT_fno_emulated_tls)) {
|
||||
Opts.EmulatedTLS = T.hasDefaultEmulatedTLS();
|
||||
}
|
||||
|
||||
if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {
|
||||
|
|
Loading…
Reference in New Issue