r273147 - [X86] Add -mno-iamcu option.

Bruno Cardoso Lopes via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 20 10:52:23 PDT 2016


Hi Andrey,

On Mon, Jun 20, 2016 at 3:31 AM, Andrey Turetskiy via cfe-commits
<cfe-commits at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc


More information about the cfe-commits mailing list