Hi Andrey, On Mon, Jun 20, 2016 at 3:31 AM, Andrey Turetskiy via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: aturetsk > Date: Mon Jun 20 05:31:39 2016 > New Revision: 273147 > > URL: http://llvm.org/viewvc/llvm-project?rev=273147&view=rev > Log: > [X86] Add -mno-iamcu option. > > Add -mno-iamcu option to: > 1) Countervail -miamcu option easily > 2) Be compatible with GCC which supports this option > > Differential Revision: http://reviews.llvm.org/D21469 > > Modified: > cfe/trunk/include/clang/Driver/Options.td > cfe/trunk/lib/Driver/Driver.cpp > cfe/trunk/lib/Driver/Tools.cpp > cfe/trunk/test/Driver/miamcu-opt.c > > Modified: cfe/trunk/include/clang/Driver/Options.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=273147&r1=273146&r2=273147&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Driver/Options.td (original) > +++ cfe/trunk/include/clang/Driver/Options.td Mon Jun 20 05:31:39 2016 > @@ -1311,6 +1311,7 @@ def mx32 : Flag<["-"], "mx32">, Group<m_ > def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>; > def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[DriverOption, > CoreOption]>, > HelpText<"Use Intel MCU ABI">; > +def mno_iamcu : Flag<["-"], "mno-iamcu">, Group<m_Group>, > Flags<[DriverOption, CoreOption]>; > def malign_functions_EQ : Joined<["-"], "malign-functions=">, > Group<clang_ignored_m_Group>; > def malign_loops_EQ : Joined<["-"], "malign-loops=">, > Group<clang_ignored_m_Group>; > def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, > Group<clang_ignored_m_Group>; > > Modified: cfe/trunk/lib/Driver/Driver.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=273147&r1=273146&r2=273147&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/Driver.cpp (original) > +++ cfe/trunk/lib/Driver/Driver.cpp Mon Jun 20 05:31:39 2016 > @@ -280,8 +280,9 @@ DerivedArgList *Driver::TranslateInputAr > } > > // Enforce -static if -miamcu is present. > - if (Args.hasArg(options::OPT_miamcu)) > - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); > + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) > + if (Ar->getOption().matches(options::OPT_miamcu))
Looks like you could use `hasFlag(OptSpecifier Pos, OptSpecifier Neg, bool Default=...)` here instead? > + DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); > > // Add a default value of -mlinker-version=, if one was given and the user > // didn't specify one. > @@ -375,22 +376,24 @@ static llvm::Triple computeTargetTriple( > } > > // Handle -miamcu flag. > - if (Args.hasArg(options::OPT_miamcu)) { > - if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) > - D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" > - << Target.str(); > - > - if (A && !A->getOption().matches(options::OPT_m32)) > - D.Diag(diag::err_drv_argument_not_allowed_with) > - << "-miamcu" << A->getBaseArg().getAsString(Args); > - > - Target.setArch(llvm::Triple::x86); > - Target.setArchName("i586"); > - Target.setEnvironment(llvm::Triple::UnknownEnvironment); > - Target.setEnvironmentName(""); > - Target.setOS(llvm::Triple::ELFIAMCU); > - Target.setVendor(llvm::Triple::UnknownVendor); > - Target.setVendorName("intel"); > + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, > options::OPT_mno_iamcu)) { > + if (Ar->getOption().matches(options::OPT_miamcu)) { and here > + if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) > + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" > + << Target.str(); > + > + if (A && !A->getOption().matches(options::OPT_m32)) > + D.Diag(diag::err_drv_argument_not_allowed_with) > + << "-miamcu" << A->getBaseArg().getAsString(Args); > + > + Target.setArch(llvm::Triple::x86); > + Target.setArchName("i586"); > + Target.setEnvironment(llvm::Triple::UnknownEnvironment); > + Target.setEnvironmentName(""); > + Target.setOS(llvm::Triple::ELFIAMCU); > + Target.setVendor(llvm::Triple::UnknownVendor); > + Target.setVendorName("intel"); > + } > } > > return Target; > > Modified: cfe/trunk/lib/Driver/Tools.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=273147&r1=273146&r2=273147&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/Tools.cpp (original) > +++ cfe/trunk/lib/Driver/Tools.cpp Mon Jun 20 05:31:39 2016 > @@ -2243,10 +2243,12 @@ void Clang::AddX86TargetArgs(const ArgLi > } > > // Set flags to support MCU ABI. > - if (Args.hasArg(options::OPT_miamcu)) { > - CmdArgs.push_back("-mfloat-abi"); > - CmdArgs.push_back("soft"); > - CmdArgs.push_back("-mstack-alignment=4"); > + if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) > { > + if (A->getOption().matches(options::OPT_miamcu)) { ditto > + CmdArgs.push_back("-mfloat-abi"); > + CmdArgs.push_back("soft"); > + CmdArgs.push_back("-mstack-alignment=4"); > + } > } > } > > > Modified: cfe/trunk/test/Driver/miamcu-opt.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/miamcu-opt.c?rev=273147&r1=273146&r2=273147&view=diff > ============================================================================== > --- cfe/trunk/test/Driver/miamcu-opt.c (original) > +++ cfe/trunk/test/Driver/miamcu-opt.c Mon Jun 20 05:31:39 2016 > @@ -4,9 +4,11 @@ > // RUN: %clang -miamcu -no-canonical-prefixes %s -### -o %t.o 2>&1 | > FileCheck %s > // RUN: %clang -miamcu -no-canonical-prefixes -m32 %s -### -o %t.o 2>&1 | > FileCheck %s > // RUN: %clang -miamcu -no-canonical-prefixes -target > x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s > +// RUN: %clang -mno-iamcu -miamcu -no-canonical-prefixes %s -### -o %t.o > 2>&1 | FileCheck %s > // RUN: %clang -miamcu -no-canonical-prefixes -m64 %s -### -o %t.o 2>&1 | > FileCheck %s -check-prefix=M64 > // RUN: %clang -miamcu -no-canonical-prefixes -dynamic %s -### -o %t.o 2>&1 > | FileCheck %s -check-prefix=DYNAMIC > // RUN: %clang -miamcu -no-canonical-prefixes -target armv8-eabi %s -### -o > %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86 > +// RUN: %clang -miamcu -mno-iamcu -no-canonical-prefixes -target > x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s > -check-prefix=MNOIAMCU > > // M64: error: invalid argument '-miamcu' not allowed with '-m64' > > @@ -14,6 +16,8 @@ > > // NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' > > +// MNOIAMCU-NOT: "-triple" "i586-intel-elfiamcu" > + > // CHECK: "{{.*}}clang{{.*}}" "-cc1" > // CHECK: "-triple" "i586-intel-elfiamcu" > // CHECK: "-static-define" > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits -- Bruno Cardoso Lopes http://www.brunocardoso.cc _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits