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

2016-06-20 Thread Bruno Cardoso Lopes via cfe-commits
Hi Andrey,

On Mon, Jun 20, 2016 at 3:31 AM, Andrey Turetskiy via cfe-commits
 wrote:
> Author: aturetsk
> Date: Mon Jun 20 05:31:39 2016
> New Revision: 273147
>
> URL: http://llvm.org/viewvc/llvm-project?rev=273147=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=273146=273147=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  def mabi_EQ : Joined<["-"], "mabi=">, Group;
>  def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
> CoreOption]>,
>HelpText<"Use Intel MCU ABI">;
> +def mno_iamcu : Flag<["-"], "mno-iamcu">, Group, 
> Flags<[DriverOption, CoreOption]>;
>  def malign_functions_EQ : Joined<["-"], "malign-functions=">, 
> Group;
>  def malign_loops_EQ : Joined<["-"], "malign-loops=">, 
> Group;
>  def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, 
> Group;
>
> Modified: cfe/trunk/lib/Driver/Driver.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=273147=273146=273147=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=273146=273147=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");
> +  

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

2016-06-20 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Mon Jun 20 05:31:39 2016
New Revision: 273147

URL: http://llvm.org/viewvc/llvm-project?rev=273147=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=273146=273147=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, Group, Flags<[DriverOption, 
CoreOption]>,
   HelpText<"Use Intel MCU ABI">;
+def mno_iamcu : Flag<["-"], "mno-iamcu">, Group, Flags<[DriverOption, 
CoreOption]>;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, 
Group;
 def malign_loops_EQ : Joined<["-"], "malign-loops=">, 
Group;
 def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, 
Group;

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=273147=273146=273147=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))
+  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)) {
+  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=273146=273147=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)) {
+  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=273146=273147=diff
==
---