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 <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
