r234668 - [Driver] Properly support -mglobal-merge using explicit options.

Eric Christopher echristo at gmail.com
Tue Apr 14 05:40:59 PDT 2015


So, this is fine for now as a workaround, but using backend options is
pretty terrible. What we really need is a way of describing to the backend
the particular options we'd like to communicate on and off programmatically
without relying on cl::ParseCommandLineOptions. Currently I'm thinking of a
target dependent struct that's passed along to TargetMachine creation.
Other thoughts? I think Akira had mentioned a possibility of a
string/string map as well.

-eric

On Sat, Apr 11, 2015 at 1:16 AM Ahmed Bougacha <ahmed.bougacha at gmail.com>
wrote:

> Author: ab
> Date: Fri Apr 10 19:10:44 2015
> New Revision: 234668
>
> URL: http://llvm.org/viewvc/llvm-project?rev=234668&view=rev
> Log:
> [Driver] Properly support -mglobal-merge using explicit options.
>
> Follow-up to r234666.  With this, the -m[no-]global-merge options
> have the expected behavior. Previously, -mglobal-merge was ignored,
> and there was no way of enabling the optimization.
>
> Added:
>     cfe/trunk/test/Driver/mglobal-merge.c
>       - copied, changed from r234656,
> cfe/trunk/test/Driver/mno-global-merge.c
> Removed:
>     cfe/trunk/test/Driver/mno-global-merge.c
> Modified:
>     cfe/trunk/include/clang/Driver/Options.td
>     cfe/trunk/include/clang/Frontend/CodeGenOptions.def
>     cfe/trunk/lib/CodeGen/BackendUtil.cpp
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=234668&r1=234667&r2=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Fri Apr 10 19:10:44 2015
> @@ -1146,7 +1146,8 @@ def mfloat_abi_EQ : Joined<["-"], "mfloa
>  def mfpmath_EQ : Joined<["-"], "mfpmath=">, Group<m_Group>;
>  def mfpu_EQ : Joined<["-"], "mfpu=">, Group<m_Group>;
>  def mhwdiv_EQ : Joined<["-"], "mhwdiv=">, Group<m_Group>;
> -def mglobal_merge : Flag<["-"], "mglobal-merge">, Group<m_Group>;
> +def mglobal_merge : Flag<["-"], "mglobal-merge">, Group<m_Group>,
> Flags<[CC1Option]>,
> +  HelpText<"Enable merging of globals">;
>  def mhard_float : Flag<["-"], "mhard-float">, Group<m_Group>;
>  def miphoneos_version_min_EQ : Joined<["-"], "miphoneos-version-min=">,
> Group<m_Group>;
>  def mios_version_min_EQ : Joined<["-"], "mios-version-min=">,
>
> Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=234668&r1=234667&r2=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
> +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Fri Apr 10
> 19:10:44 2015
> @@ -77,7 +77,6 @@ CODEGENOPT(NoExecStack       , 1, 0) ///
>  CODEGENOPT(FatalWarnings     , 1, 0) ///< Set when -Wa,--fatal-warnings is
>                                       ///< enabled.
>  CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is
> enabled.
> -CODEGENOPT(NoGlobalMerge     , 1, 0) ///< Set when -mno-global-merge is
> enabled.
>  CODEGENOPT(NoImplicitFloat   , 1, 0) ///< Set when -mno-implicit-float is
> enabled.
>  CODEGENOPT(NoInfsFPMath      , 1, 0) ///< Assume FP arguments, results
> not +-Inf.
>  CODEGENOPT(NoSignedZeros     , 1, 0) ///< Allow ignoring the signedness
> of FP zero
>
> Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=234668&r1=234667&r2=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
> +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Fri Apr 10 19:10:44 2015
> @@ -436,8 +436,6 @@ TargetMachine *EmitAssemblyHelper::Creat
>      BackendArgs.push_back("-time-passes");
>    for (unsigned i = 0, e = CodeGenOpts.BackendOptions.size(); i != e; ++i)
>      BackendArgs.push_back(CodeGenOpts.BackendOptions[i].c_str());
> -  if (CodeGenOpts.NoGlobalMerge)
> -    BackendArgs.push_back("-enable-global-merge=false");
>    BackendArgs.push_back(nullptr);
>    llvm::cl::ParseCommandLineOptions(BackendArgs.size() - 1,
>                                      BackendArgs.data());
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=234668&r1=234667&r2=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Apr 10 19:10:44 2015
> @@ -861,12 +861,14 @@ void Clang::AddARMTargetArgs(const ArgLi
>      }
>    }
>
> -  // Setting -mno-global-merge disables the codegen global merge pass.
> Setting
> -  // -mglobal-merge has no effect as the pass is enabled by default.
> +  // Forward the -mglobal-merge option for explicit control over the pass.
>    if (Arg *A = Args.getLastArg(options::OPT_mglobal_merge,
>                                 options::OPT_mno_global_merge)) {
> +    CmdArgs.push_back("-backend-option");
>      if (A->getOption().matches(options::OPT_mno_global_merge))
> -      CmdArgs.push_back("-mno-global-merge");
> +      CmdArgs.push_back("-arm-global-merge=false");
> +    else
> +      CmdArgs.push_back("-arm-global-merge=true");
>    }
>
>    if (!Args.hasFlag(options::OPT_mimplicit_float,
> @@ -957,12 +959,14 @@ void Clang::AddAArch64TargetArgs(const A
>      CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=1");
>    }
>
> -  // Setting -mno-global-merge disables the codegen global merge pass.
> Setting
> -  // -mglobal-merge has no effect as the pass is enabled by default.
> +  // Forward the -mglobal-merge option for explicit control over the pass.
>    if (Arg *A = Args.getLastArg(options::OPT_mglobal_merge,
>                                 options::OPT_mno_global_merge)) {
> +    CmdArgs.push_back("-backend-option");
>      if (A->getOption().matches(options::OPT_mno_global_merge))
> -      CmdArgs.push_back("-mno-global-merge");
> +      CmdArgs.push_back("-aarch64-global-merge=false");
> +    else
> +      CmdArgs.push_back("-aarch64-global-merge=true");
>    }
>
>    if (Args.hasArg(options::OPT_ffixed_x18)) {
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=234668&r1=234667&r2=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Apr 10 19:10:44 2015
> @@ -455,7 +455,6 @@ static bool ParseCodeGenArgs(CodeGenOpti
>    Opts.NoZeroInitializedInBSS =
> Args.hasArg(OPT_mno_zero_initialized_in_bss);
>    Opts.BackendOptions = Args.getAllArgValues(OPT_backend_option);
>    Opts.NumRegisterParameters = getLastArgIntValue(Args, OPT_mregparm, 0,
> Diags);
> -  Opts.NoGlobalMerge = Args.hasArg(OPT_mno_global_merge);
>    Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
>    Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
>    Opts.EnableSegmentedStacks = Args.hasArg(OPT_split_stacks);
>
> Copied: cfe/trunk/test/Driver/mglobal-merge.c (from r234656,
> cfe/trunk/test/Driver/mno-global-merge.c)
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mglobal-merge.c?p2=cfe/trunk/test/Driver/mglobal-merge.c&p1=cfe/trunk/test/Driver/mno-global-merge.c&r1=234656&r2=234668&rev=234668&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Driver/mno-global-merge.c (original)
> +++ cfe/trunk/test/Driver/mglobal-merge.c Fri Apr 10 19:10:44 2015
> @@ -1,20 +1,40 @@
> -// RUN: %clang -target armv7-apple-darwin10 \
> -// RUN:   -mno-global-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-NGM < %t %s
> +// RUN: %clang -target armv7-unknown-unknown -### -fsyntax-only %s 2> %t \
> +// RUN:   -mno-global-merge
> +// RUN: FileCheck --check-prefix=CHECK-NGM-ARM < %t %s
>
> -// RUN: %clang -target arm64-apple-ios7 \
> -// RUN:   -mno-global-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-NGM < %t %s
> +// RUN: %clang -target aarch64-unknown-unknown -### -fsyntax-only %s 2>
> %t \
> +// RUN:   -mno-global-merge
> +// RUN: FileCheck --check-prefix=CHECK-NGM-AARCH64 < %t %s
>
> -// CHECK-NGM: "-mno-global-merge"
> +// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t
> \
> +// RUN:   -mno-global-merge
> +// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
>
> -// RUN: %clang -target armv7-apple-darwin10 \
> -// RUN:   -mglobal-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-GM < %t %s
> +// CHECK-NGM-ARM: "-backend-option" "-arm-global-merge=false"
> +// CHECK-NGM-AARCH64: "-backend-option" "-aarch64-global-merge=false"
>
> -// RUN: %clang -target arm64-apple-ios7 \
> -// RUN:   -mglobal-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-GM < %t %s
> +// RUN: %clang -target armv7-unknown-unknown -### -fsyntax-only %s 2> %t \
> +// RUN:   -mglobal-merge
> +// RUN: FileCheck --check-prefix=CHECK-GM-ARM < %t %s
>
> -// CHECK-GM-NOT: "-mglobal-merge"
> +// RUN: %clang -target aarch64-unknown-unknown -### -fsyntax-only %s 2>
> %t \
> +// RUN:   -mglobal-merge
> +// RUN: FileCheck --check-prefix=CHECK-GM-AARCH64 < %t %s
>
> +// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t
> \
> +// RUN:   -mglobal-merge
> +// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
> +
> +// CHECK-GM-ARM: "-backend-option" "-arm-global-merge=true"
> +// CHECK-GM-AARCH64: "-backend-option" "-aarch64-global-merge=true"
> +
> +// RUN: %clang -target armv7-unknown-unknown -### -fsyntax-only %s 2> %t
> +// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
> +
> +// RUN: %clang -target aarch64-unknown-unknown -### -fsyntax-only %s 2> %t
> +// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
> +
> +// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t
> +// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
> +
> +// CHECK-NONE-NOT: -global-merge=
>
> Removed: cfe/trunk/test/Driver/mno-global-merge.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mno-global-merge.c?rev=234667&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Driver/mno-global-merge.c (original)
> +++ cfe/trunk/test/Driver/mno-global-merge.c (removed)
> @@ -1,20 +0,0 @@
> -// RUN: %clang -target armv7-apple-darwin10 \
> -// RUN:   -mno-global-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-NGM < %t %s
> -
> -// RUN: %clang -target arm64-apple-ios7 \
> -// RUN:   -mno-global-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-NGM < %t %s
> -
> -// CHECK-NGM: "-mno-global-merge"
> -
> -// RUN: %clang -target armv7-apple-darwin10 \
> -// RUN:   -mglobal-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-GM < %t %s
> -
> -// RUN: %clang -target arm64-apple-ios7 \
> -// RUN:   -mglobal-merge -### -fsyntax-only %s 2> %t
> -// RUN: FileCheck --check-prefix=CHECK-GM < %t %s
> -
> -// CHECK-GM-NOT: "-mglobal-merge"
> -
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150414/2a244c47/attachment.html>


More information about the cfe-commits mailing list