[PATCH] CFE Knob for: Add a thread-model knob for lowering atomics on baremetal & single threaded systems

Aaron Ballman aaron at aaronballman.com
Wed Aug 20 11:31:10 PDT 2014


On Wed, Aug 20, 2014 at 11:39 AM, Jon Roelofs <jonathan at codesourcery.com> wrote:
> Hi rengolin,
>
> Depends on: http://reviews.llvm.org/D4984
>
> http://reviews.llvm.org/D4985
>
> Files:
>   include/clang/Driver/CC1Options.td
>   include/clang/Driver/ToolChain.h
>   include/clang/Frontend/CodeGenOptions.h
>   lib/CodeGen/BackendUtil.cpp
>   lib/Driver/Tools.cpp
>   lib/Frontend/CompilerInvocation.cpp
>
> Index: lib/CodeGen/BackendUtil.cpp
> ===================================================================
> --- lib/CodeGen/BackendUtil.cpp
> +++ lib/CodeGen/BackendUtil.cpp
> @@ -419,6 +419,16 @@
>
>    llvm::TargetOptions Options;
>
> +  Options.ThreadModel = llvm::ThreadModel::POSIX;
> +  if (CodeGenOpts.ThreadModel == "POSIX") {
> +    Options.ThreadModel = llvm::ThreadModel::POSIX;
> +  } else if (CodeGenOpts.ThreadModel == "Single") {
> +    Options.ThreadModel = llvm::ThreadModel::Single;

The braces should be elided for the if and else if.

> +  } else {
> +    assert(false && "Invalid Thread model!");
> +    Options.ThreadModel = llvm::ThreadModel::POSIX;

This assignment is redundant with the original initialization.

> +  }



> +
>    if (CodeGenOpts.DisableIntegratedAS)
>      Options.DisableIntegratedAS = true;
>
> Index: lib/Frontend/CompilerInvocation.cpp
> ===================================================================
> --- lib/Frontend/CompilerInvocation.cpp
> +++ lib/Frontend/CompilerInvocation.cpp
> @@ -437,6 +437,7 @@
>                        Args.hasArg(OPT_cl_fast_relaxed_math);
>    Opts.UnwindTables = Args.hasArg(OPT_munwind_tables);
>    Opts.RelocationModel = Args.getLastArgValue(OPT_mrelocation_model, "pic");
> +  Opts.ThreadModel = Args.getLastArgValue(OPT_mthread_model, "POSIX");
>    Opts.TrapFuncName = Args.getLastArgValue(OPT_ftrap_function_EQ);
>    Opts.UseInitArray = Args.hasArg(OPT_fuse_init_array);
>
> Index: lib/Driver/Tools.cpp
> ===================================================================
> --- lib/Driver/Tools.cpp
> +++ lib/Driver/Tools.cpp
> @@ -2776,6 +2776,9 @@
>      }
>    }
>
> +  CmdArgs.push_back("-mthread-model");
> +  CmdArgs.push_back(Args.MakeArgString(getToolChain().getThreadModel()));
> +
>    if (!Args.hasFlag(options::OPT_fmerge_all_constants,
>                      options::OPT_fno_merge_all_constants))
>      CmdArgs.push_back("-fno-merge-all-constants");
> Index: include/clang/Frontend/CodeGenOptions.h
> ===================================================================
> --- include/clang/Frontend/CodeGenOptions.h
> +++ include/clang/Frontend/CodeGenOptions.h
> @@ -134,6 +134,9 @@
>    /// The name of the relocation model to use.
>    std::string RelocationModel;
>
> +  /// The thread model to use
> +  std::string ThreadModel;
> +
>    /// Path to blacklist file for sanitizers.
>    std::string SanitizerBlacklistFile;
>
> Index: include/clang/Driver/ToolChain.h
> ===================================================================
> --- include/clang/Driver/ToolChain.h
> +++ include/clang/Driver/ToolChain.h
> @@ -248,6 +248,9 @@
>    /// UseSjLjExceptions - Does this tool chain use SjLj exceptions.
>    virtual bool UseSjLjExceptions() const { return false; }
>
> +  /// getThreadModel() - Which thread model does this target use?
> +  virtual std::string getThreadModel() const { return "POSIX"; }

Why is this virtual? I don't see any overrides.

> +
>    /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
>    /// command line arguments into account.
>    virtual std::string
> Index: include/clang/Driver/CC1Options.td
> ===================================================================
> --- include/clang/Driver/CC1Options.td
> +++ include/clang/Driver/CC1Options.td
> @@ -218,6 +218,8 @@
>    HelpText<"Limit the number of registers available for integer arguments">;
>  def mrelocation_model : Separate<["-"], "mrelocation-model">,
>    HelpText<"The relocation model to use">;
> +def mthread_model : Separate<["-"], "mthread-model">,
> +  HelpText<"The thread model to use">;

The help text could be a bit more helpful, like what thread models are
possible values.

>  def munwind_tables : Flag<["-"], "munwind-tables">,
>    HelpText<"Generate unwinding tables for all functions">;
>  def mconstructor_aliases : Flag<["-"], "mconstructor-aliases">,
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>

~Aaron



More information about the cfe-commits mailing list