Re: [PATCH] D21066: Pass MCSubtargetInfo instead of CPU and Triple to createMCAsmBackend

2016-09-23 Thread Andrey Turetskiy via cfe-commits
aturetsk abandoned this revision.
aturetsk added a comment.

New version in https://reviews.llvm.org/D21374


https://reviews.llvm.org/D21066



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r274119 - Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

2016-06-29 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Wed Jun 29 05:57:17 2016
New Revision: 274119

URL: http://llvm.org/viewvc/llvm-project?rev=274119=rev
Log:
Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

Differential Revision: http://reviews.llvm.org/D21641

Modified:
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=274119=274118=274119=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Wed Jun 29 05:57:17 2016
@@ -280,9 +280,8 @@ DerivedArgList *Driver::TranslateInputAr
   }
 
   // Enforce -static if -miamcu is present.
-  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));
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
+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.
@@ -376,24 +375,22 @@ static llvm::Triple computeTargetTriple(
   }
 
   // Handle -miamcu flag.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+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=274119=274118=274119=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jun 29 05:57:17 2016
@@ -2247,12 +2247,10 @@ void Clang::AddX86TargetArgs(const ArgLi
   }
 
   // Set flags to support MCU ABI.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
   }
 }
 


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

2016-06-29 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL274119: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu 
is passed. NFC. (authored by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D21641?vs=61662=62203#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D21641

Files:
  cfe/trunk/lib/Driver/Driver.cpp
  cfe/trunk/lib/Driver/Tools.cpp

Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ cfe/trunk/lib/Driver/Tools.cpp
@@ -2247,12 +2247,10 @@
   }
 
   // Set flags to support MCU ABI.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
   }
 }
 
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -280,9 +280,8 @@
   }
 
   // Enforce -static if -miamcu is present.
-  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));
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
+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.
@@ -376,24 +375,22 @@
   }
 
   // Handle -miamcu flag.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+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;


Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ cfe/trunk/lib/Driver/Tools.cpp
@@ -2247,12 +2247,10 @@
   }
 
   // Set flags to support MCU ABI.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
   }
 }
 
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -280,9 +280,8 @@
   }
 
   // Enforce -static if -miamcu is present.
-  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));
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
+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.
@@ -376,24 +375,22 @@
   }
 
   // Handle -miamcu flag.
-  if (Arg *Ar = 

Re: [PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

2016-06-23 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi Bruno,
As you suggested I changed -miamcu/-mno-iamcu handling code to use hasFlag.


http://reviews.llvm.org/D21641



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

2016-06-23 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added a reviewer: bruno.
aturetsk added a subscriber: cfe-commits.

Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.

http://reviews.llvm.org/D21641

Files:
  lib/Driver/Driver.cpp
  lib/Driver/Tools.cpp

Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2243,12 +2243,10 @@
   }
 
   // Set flags to support MCU ABI.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
   }
 }
 
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -280,9 +280,8 @@
   }
 
   // Enforce -static if -miamcu is present.
-  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));
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
+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.
@@ -376,24 +375,22 @@
   }
 
   // Handle -miamcu flag.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+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;


Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2243,12 +2243,10 @@
   }
 
   // Set flags to support MCU ABI.
-  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");
-}
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
   }
 }
 
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -280,9 +280,8 @@
   }
 
   // Enforce -static if -miamcu is present.
-  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));
+  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
+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.
@@ -376,24 +375,22 @@
   }
 
   // Handle -miamcu flag.
-  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"
- 

Re: [PATCH] D21469: Add -mno-iamcu option

2016-06-20 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL273147: [X86] Add -mno-iamcu option. (authored by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D21469?vs=61088=61245#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D21469

Files:
  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

Index: cfe/trunk/include/clang/Driver/Options.td
===
--- cfe/trunk/include/clang/Driver/Options.td
+++ cfe/trunk/include/clang/Driver/Options.td
@@ -1311,6 +1311,7 @@
 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;
Index: cfe/trunk/test/Driver/miamcu-opt.c
===
--- cfe/trunk/test/Driver/miamcu-opt.c
+++ cfe/trunk/test/Driver/miamcu-opt.c
@@ -4,16 +4,20 @@
 // 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'
 
 // DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static'
 
 // 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"
Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ cfe/trunk/lib/Driver/Tools.cpp
@@ -2243,10 +2243,12 @@
   }
 
   // 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");
+}
   }
 }
 
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -280,8 +280,9 @@
   }
 
   // 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 @@
   }
 
   // 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"
+

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
==
--- 

[PATCH] D21469: Add -mno-iamcu option

2016-06-17 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: bruno, echristo.
aturetsk added subscribers: cfe-commits, zinovy.nis.
Herald added a subscriber: mehdi_amini.

Add -mno-iamcu option to:
1) Countervail -miamcu option easily
2) Be compatible with GCC which supports this option

http://reviews.llvm.org/D21469

Files:
  include/clang/Driver/Options.td
  lib/Driver/Driver.cpp
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c

Index: test/Driver/miamcu-opt.c
===
--- test/Driver/miamcu-opt.c
+++ test/Driver/miamcu-opt.c
@@ -4,16 +4,20 @@
 // 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'
 
 // DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static'
 
 // 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"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2236,10 +2236,12 @@
   }
 
   // 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");
+}
   }
 }
 
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -280,8 +280,9 @@
   }
 
   // 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 @@
   }
 
   // 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;
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ 

r272887 - Patch "Compilation for Intel MCU (Part 2/3)" caused the clang-x64-ninja-win7

2016-06-16 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Thu Jun 16 07:26:20 2016
New Revision: 272887

URL: http://llvm.org/viewvc/llvm-project?rev=272887=rev
Log:
Patch "Compilation for Intel MCU (Part 2/3)" caused the clang-x64-ninja-win7
buildbot to fail because of inaccurate CHECK in the test. This is a quick fix
for the test to make it platform independent.


Modified:
cfe/trunk/test/Driver/miamcu-opt.c

Modified: cfe/trunk/test/Driver/miamcu-opt.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/miamcu-opt.c?rev=272887=272886=272887=diff
==
--- cfe/trunk/test/Driver/miamcu-opt.c (original)
+++ cfe/trunk/test/Driver/miamcu-opt.c Thu Jun 16 07:26:20 2016
@@ -11,13 +11,13 @@
 
 // NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi'
 
-// CHECK: "-cc1"
+// CHECK: "{{.*}}clang{{.*}}" "-cc1"
 // CHECK: "-triple" "i586-intel-elfiamcu"
 // CHECK: "-static-define"
 // CHECK: "-mfloat-abi" "soft"
 // CHECK: "-mstack-alignment=4"
 
-// CHECK: bin/ld
+// CHECK: "{{.*}}ld{{(.exe)?}}"
 // CHECK: "-m" "elf_iamcu"
 // CHECK: "-static"
 // CHECK-NOT: crt1


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r272885 - Compilation for Intel MCU (Part 3/3)

2016-06-16 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Thu Jun 16 05:49:27 2016
New Revision: 272885

URL: http://llvm.org/viewvc/llvm-project?rev=272885=rev
Log:
Compilation for Intel MCU (Part 3/3)

This is the last patch required to support compilation for Intel MCU target 
(e.g. Intel(R) Quark(TM) micro controller D 2000).

When IAMCU triple is used:
 * Use IAMCU linker output format
 * Link with IAMCU crt objects
 * Link with IAMCU libraries

Differential Revision: http://reviews.llvm.org/D20675

Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/miamcu-opt.c

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=272885=272884=272885=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Thu Jun 16 05:49:27 2016
@@ -9065,6 +9065,7 @@ static void AddLibgcc(const llvm::Triple
   ArgStringList , const ArgList ) {
   bool isAndroid = Triple.isAndroid();
   bool isCygMing = Triple.isOSCygMing();
+  bool IsIAMCU = Triple.isOSIAMCU();
   bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) ||
   Args.hasArg(options::OPT_static);
   if (!D.CCCIsCXX())
@@ -9081,7 +9082,7 @@ static void AddLibgcc(const llvm::Triple
   CmdArgs.push_back("--no-as-needed");
   }
 
-  if (StaticLibgcc && !isAndroid)
+  if (StaticLibgcc && !isAndroid && !IsIAMCU)
 CmdArgs.push_back("-lgcc_eh");
   else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX())
 CmdArgs.push_back("-lgcc");
@@ -9129,6 +9130,8 @@ static void AddRunTimeLibs(const ToolCha
 static const char *getLDMOption(const llvm::Triple , const ArgList ) {
   switch (T.getArch()) {
   case llvm::Triple::x86:
+if (T.isOSIAMCU())
+  return "elf_iamcu";
 return "elf_i386";
   case llvm::Triple::aarch64:
 return "aarch64linux";
@@ -9188,6 +9191,7 @@ void gnutools::Linker::ConstructJob(Comp
 
   const llvm::Triple::ArchType Arch = ToolChain.getArch();
   const bool isAndroid = ToolChain.getTriple().isAndroid();
+  const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU();
   const bool IsPIE =
   !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) &&
   (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault());
@@ -9264,7 +9268,7 @@ void gnutools::Linker::ConstructJob(Comp
   CmdArgs.push_back(Output.getFilename());
 
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
-if (!isAndroid) {
+if (!isAndroid && !IsIAMCU) {
   const char *crt1 = nullptr;
   if (!Args.hasArg(options::OPT_shared)) {
 if (Args.hasArg(options::OPT_pg))
@@ -9280,18 +9284,22 @@ void gnutools::Linker::ConstructJob(Comp
   CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
 }
 
-const char *crtbegin;
-if (Args.hasArg(options::OPT_static))
-  crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o";
-else if (Args.hasArg(options::OPT_shared))
-  crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o";
-else if (IsPIE)
-  crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o";
-else
-  crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o";
+if (IsIAMCU)
+  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
+else {
+  const char *crtbegin;
+  if (Args.hasArg(options::OPT_static))
+crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o";
+  else if (Args.hasArg(options::OPT_shared))
+crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o";
+  else if (IsPIE)
+crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o";
+  else
+crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o";
 
-if (HasCRTBeginEndFiles)
-  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
+  if (HasCRTBeginEndFiles)
+CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
+}
 
 // Add crtfastmath.o if available and fast math is enabled.
 ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs);
@@ -9375,13 +9383,24 @@ void gnutools::Linker::ConstructJob(Comp
 
   CmdArgs.push_back("-lc");
 
+  // Add IAMCU specific libs, if needed.
+  if (IsIAMCU)
+CmdArgs.push_back("-lgloss");
+
   if (Args.hasArg(options::OPT_static))
 CmdArgs.push_back("--end-group");
   else
 AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
+
+  // Add IAMCU specific libs (outside the group), if needed.
+  if (IsIAMCU) {
+CmdArgs.push_back("--as-needed");
+CmdArgs.push_back("-lsoftfp");
+CmdArgs.push_back("--no-as-needed");
+  }
 }
 
-if (!Args.hasArg(options::OPT_nostartfiles)) {
+if (!Args.hasArg(options::OPT_nostartfiles) && !IsIAMCU) {
   const char *crtend;
   if (Args.hasArg(options::OPT_shared))
 crtend = isAndroid ? 

r272883 - Compilation for Intel MCU (Part 2/3)

2016-06-16 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Thu Jun 16 05:36:09 2016
New Revision: 272883

URL: http://llvm.org/viewvc/llvm-project?rev=272883=rev
Log:
Compilation for Intel MCU (Part 2/3)

This is the second patch required to support compilation for Intel MCU target 
(e.g. Intel(R) Quark(TM) micro controller D 2000).
When IAMCU triple is used:
 * Recognize and use IAMCU GCC toolchain
 * Set up include paths
 * Forbid C++

Differential Revision: http://reviews.llvm.org/D19274

Added:
cfe/trunk/test/Driver/miamcu-opt.cpp   (with props)
Modified:
cfe/trunk/include/clang/Driver/ToolChain.h
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/ToolChain.cpp
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/miamcu-opt.c

Modified: cfe/trunk/include/clang/Driver/ToolChain.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=272883=272882=272883=diff
==
--- cfe/trunk/include/clang/Driver/ToolChain.h (original)
+++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Jun 16 05:36:09 2016
@@ -418,6 +418,10 @@ public:
   virtual void AddCudaIncludeArgs(const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const;
 
+  /// \brief Add arguments to use MCU GCC toolchain includes.
+  virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const;
+
   /// \brief Return sanitizers which are available in this toolchain.
   virtual SanitizerMask getSupportedSanitizers() const;
 

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=272883=272882=272883=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Thu Jun 16 05:36:09 2016
@@ -2482,6 +2482,7 @@ const ToolChain ::getToolChain(co
   TC = new toolchains::Minix(*this, Target, Args);
   break;
 case llvm::Triple::Linux:
+case llvm::Triple::ELFIAMCU:
   if (Target.getArch() == llvm::Triple::hexagon)
 TC = new toolchains::HexagonToolChain(*this, Target, Args);
   else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) &&

Modified: cfe/trunk/lib/Driver/ToolChain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=272883=272882=272883=diff
==
--- cfe/trunk/lib/Driver/ToolChain.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChain.cpp Thu Jun 16 05:36:09 2016
@@ -696,3 +696,6 @@ SanitizerMask ToolChain::getSupportedSan
 
 void ToolChain::AddCudaIncludeArgs(const ArgList ,
ArgStringList ) const {}
+
+void ToolChain::AddIAMCUIncludeArgs(const ArgList ,
+ArgStringList ) const {}

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=272883=272882=272883=diff
==
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Jun 16 05:36:09 2016
@@ -1618,9 +1618,13 @@ bool Generic_GCC::GCCInstallationDetecto
 break;
   case llvm::Triple::x86:
 LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-TripleAliases.append(begin(X86Triples), end(X86Triples));
-BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+// MCU toolchain is 32 bit only and its triple alias is TargetTriple
+// itself, which will be appended below.
+if (!TargetTriple.isOSIAMCU()) {
+  TripleAliases.append(begin(X86Triples), end(X86Triples));
+  BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
+  BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+}
 break;
   case llvm::Triple::mips:
 LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
@@ -1770,14 +1774,14 @@ void Generic_GCC::CudaInstallationDetect
 namespace {
 // Filter to remove Multilibs that don't exist as a suffix to Path
 class FilterNonExistent {
-  StringRef Base;
+  StringRef Base, File;
   vfs::FileSystem 
 
 public:
-  FilterNonExistent(StringRef Base, vfs::FileSystem )
-  : Base(Base), VFS(VFS) {}
+  FilterNonExistent(StringRef Base, StringRef File, vfs::FileSystem )
+  : Base(Base), File(File), VFS(VFS) {}
   bool operator()(const Multilib ) {
-return !VFS.exists(Base + M.gccSuffix() + "/crtbegin.o");
+return !VFS.exists(Base + M.gccSuffix() + File);
   }
 };
 } // end anonymous namespace
@@ -1867,7 +1871,7 @@ static bool findMIPSMultilibs(const Driv
   // /usr
   //   /lib  <= crt*.o files compiled 

Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-06-16 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL272883: Compilation for Intel MCU (Part 2/3) (authored by 
aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D19274?vs=57017=60958#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D19274

Files:
  cfe/trunk/include/clang/Driver/ToolChain.h
  cfe/trunk/lib/Driver/Driver.cpp
  cfe/trunk/lib/Driver/ToolChain.cpp
  cfe/trunk/lib/Driver/ToolChains.cpp
  cfe/trunk/lib/Driver/ToolChains.h
  cfe/trunk/lib/Driver/Tools.cpp
  cfe/trunk/test/Driver/miamcu-opt.c
  cfe/trunk/test/Driver/miamcu-opt.cpp

Index: cfe/trunk/include/clang/Driver/ToolChain.h
===
--- cfe/trunk/include/clang/Driver/ToolChain.h
+++ cfe/trunk/include/clang/Driver/ToolChain.h
@@ -418,6 +418,10 @@
   virtual void AddCudaIncludeArgs(const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const;
 
+  /// \brief Add arguments to use MCU GCC toolchain includes.
+  virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const;
+
   /// \brief Return sanitizers which are available in this toolchain.
   virtual SanitizerMask getSupportedSanitizers() const;
 
Index: cfe/trunk/test/Driver/miamcu-opt.c
===
--- cfe/trunk/test/Driver/miamcu-opt.c
+++ cfe/trunk/test/Driver/miamcu-opt.c
@@ -16,3 +16,6 @@
 // CHECK: "-static-define"
 // CHECK: "-mfloat-abi" "soft"
 // CHECK: "-mstack-alignment=4"
+
+// CHECK: bin/ld
+// CHECK: "-static"
Index: cfe/trunk/test/Driver/miamcu-opt.cpp
===
--- cfe/trunk/test/Driver/miamcu-opt.cpp
+++ cfe/trunk/test/Driver/miamcu-opt.cpp
@@ -0,0 +1,3 @@
+// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s
+
+// CHECK: error: the clang compiler does not support 'C++ for IAMCU'
Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ cfe/trunk/lib/Driver/Tools.cpp
@@ -295,6 +295,7 @@
 const InputInfoList ,
 const ToolChain *AuxToolChain) const {
   Arg *A;
+  const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
 
   CheckPreprocessingOptions(D, Args);
 
@@ -562,10 +563,15 @@
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
   }
 
-  // Add system include arguments.
-  getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
-  if (AuxToolChain)
+  // Add system include arguments for all targets but IAMCU.
+  if (!IsIAMCU) {
+getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
+if (AuxToolChain)
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
+  } else {
+// For IAMCU add special include arguments.
+getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs);
+  }
 
   // Add CUDA include arguments, if needed.
   if (types::isCuda(Inputs[0].getType()))
@@ -3742,6 +3748,7 @@
   getToolChain().getTriple().isWindowsCygwinEnvironment();
   bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();
   bool IsPS4CPU = getToolChain().getTriple().isPS4CPU();
+  bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
 
   // Check number of inputs for sanity. We need at least one input.
   assert(Inputs.size() >= 1 && "Must have at least one input.");
@@ -3752,6 +3759,10 @@
   bool IsCuda = types::isCuda(Input.getType());
   assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs.");
 
+  // C++ is not supported for IAMCU.
+  if (IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU";
+
   // Invoke ourselves in -cc1 mode.
   //
   // FIXME: Implement custom jobs for internal actions.
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -2482,6 +2482,7 @@
   TC = new toolchains::Minix(*this, Target, Args);
   break;
 case llvm::Triple::Linux:
+case llvm::Triple::ELFIAMCU:
   if (Target.getArch() == llvm::Triple::hexagon)
 TC = new toolchains::HexagonToolChain(*this, Target, Args);
   else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) &&
Index: cfe/trunk/lib/Driver/ToolChain.cpp
===
--- cfe/trunk/lib/Driver/ToolChain.cpp
+++ cfe/trunk/lib/Driver/ToolChain.cpp
@@ -696,3 +696,6 @@
 
 void ToolChain::AddCudaIncludeArgs(const ArgList ,
ArgStringList ) const {}
+
+void ToolChain::AddIAMCUIncludeArgs(const ArgList ,
+ArgStringList ) const {}
Index: cfe/trunk/lib/Driver/ToolChains.h
===
--- 

Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-06-15 Thread Andrey Turetskiy via cfe-commits
aturetsk added inline comments.


Comment at: lib/Driver/Tools.cpp:3657
@@ +3656,3 @@
+  if (IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_cxx_not_supported) << 
getToolChain().getTriple().str();
+

aturetsk wrote:
> bruno wrote:
> > aturetsk wrote:
> > > bruno wrote:
> > > > Taking a look at this again I don't think there's a real need for a new 
> > > > diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you 
> > > > can do something similar to:
> > > > 
> > > > D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with 
> > > > -miamcu"
> > > > 
> > > > Otherwise, LGTM!
> > > The best thing I could come up with is this:
> > > ```
> > > D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU";
> > > ```
> > > This code makes the error message look like this:
> > > ```
> > > error: the clang compiler does not support 'C++ for IAMCU'
> > > ```
> > > As you can see the message is a bit crooked. Do you thinks it's better to 
> > > keep it this way?
> > Sorry, but I didn't mean you should change the message. My only point here 
> > is that I don't see the need for adding a new diagnostic, you can still 
> > keep something more similar with your old intent, example:
> > 
> >   D.Diag(diag::err_drv_clang_unsupported) << "C++ for target" << 
> > getToolChain().getTriple().str();
> My concern is not the change in the message :) My concern is redundant 
> quotation marks which look a bit ugly and out of place.
> But if you're OK with them, so would I.
Bruno, are you ok if the message will be:
```
error: the clang compiler does not support 'C++ for IAMCU'
```
If so I'll proceed with committing the changes.


http://reviews.llvm.org/D19274



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D21066: Pass MCSubtargetInfo instead of CPU and Triple to createMCAsmBackend

2016-06-07 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: bruno, echristo, ahatanak, RKSimon.
aturetsk added a subscriber: cfe-commits.
Herald added a subscriber: mehdi_amini.

Pass MCSubtargetInfo instead of CPU and Triple to AsmBackend in order to be 
able to reach feature bits there (e.g. for ckecking of long nop support).
CPU and Triple are taken from MCSubtargetInfo.

http://reviews.llvm.org/D21066

Files:
  tools/driver/cc1as_main.cpp

Index: tools/driver/cc1as_main.cpp
===
--- tools/driver/cc1as_main.cpp
+++ tools/driver/cc1as_main.cpp
@@ -381,7 +381,7 @@
 MCAsmBackend *MAB = nullptr;
 if (Opts.ShowEncoding) {
   CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-  MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, Opts.CPU);
+  MAB = TheTarget->createMCAsmBackend(*STI, *MRI);
 }
 auto FOut = llvm::make_unique(*Out);
 Str.reset(TheTarget->createAsmStreamer(
@@ -398,8 +398,8 @@
 }
 
 MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple,
-  Opts.CPU);
+MCAsmBackend *MAB =
+TheTarget->createMCAsmBackend(*STI, *MRI);
 Triple T(Opts.Triple);
 Str.reset(TheTarget->createMCObjectStreamer(
 T, Ctx, *MAB, *Out, CE, *STI, Opts.RelaxAll,


Index: tools/driver/cc1as_main.cpp
===
--- tools/driver/cc1as_main.cpp
+++ tools/driver/cc1as_main.cpp
@@ -381,7 +381,7 @@
 MCAsmBackend *MAB = nullptr;
 if (Opts.ShowEncoding) {
   CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-  MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, Opts.CPU);
+  MAB = TheTarget->createMCAsmBackend(*STI, *MRI);
 }
 auto FOut = llvm::make_unique(*Out);
 Str.reset(TheTarget->createAsmStreamer(
@@ -398,8 +398,8 @@
 }
 
 MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple,
-  Opts.CPU);
+MCAsmBackend *MAB =
+TheTarget->createMCAsmBackend(*STI, *MRI);
 Triple T(Opts.Triple);
 Str.reset(TheTarget->createMCObjectStreamer(
 T, Ctx, *MAB, *Out, CE, *STI, Opts.RelaxAll,
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-05-26 Thread Andrey Turetskiy via cfe-commits
aturetsk added inline comments.


Comment at: lib/Driver/Tools.cpp:3657
@@ +3656,3 @@
+  if (IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_cxx_not_supported) << 
getToolChain().getTriple().str();
+

bruno wrote:
> aturetsk wrote:
> > bruno wrote:
> > > Taking a look at this again I don't think there's a real need for a new 
> > > diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you 
> > > can do something similar to:
> > > 
> > > D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with 
> > > -miamcu"
> > > 
> > > Otherwise, LGTM!
> > The best thing I could come up with is this:
> > ```
> > D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU";
> > ```
> > This code makes the error message look like this:
> > ```
> > error: the clang compiler does not support 'C++ for IAMCU'
> > ```
> > As you can see the message is a bit crooked. Do you thinks it's better to 
> > keep it this way?
> Sorry, but I didn't mean you should change the message. My only point here is 
> that I don't see the need for adding a new diagnostic, you can still keep 
> something more similar with your old intent, example:
> 
>   D.Diag(diag::err_drv_clang_unsupported) << "C++ for target" << 
> getToolChain().getTriple().str();
My concern is not the change in the message :) My concern is redundant 
quotation marks which look a bit ugly and out of place.
But if you're OK with them, so would I.


http://reviews.llvm.org/D19274



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D20675: Compilation for Intel MCU (Part 3/3)

2016-05-26 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: rsmith, bruno.
aturetsk added subscribers: cfe-commits, zinovy.nis, DavidKreitzer.
Herald added subscribers: srhines, danalbert, tberghammer.

This is the last patch required to support compilation for Intel MCU target 
(e.g. Intel(R) Quark(TM) micro controller D 2000).

When IAMCU triple is used:
* Use IAMCU linker output format
* Link with IAMCU crt objects
* Link with IAMCU libraries

http://reviews.llvm.org/D20675

Files:
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c

Index: test/Driver/miamcu-opt.c
===
--- test/Driver/miamcu-opt.c
+++ test/Driver/miamcu-opt.c
@@ -18,4 +18,12 @@
 // CHECK: "-mstack-alignment=4"
 
 // CHECK: bin/ld
+// CHECK: "-m" "elf_iamcu"
 // CHECK: "-static"
+// CHECK-NOT: crt1
+// CHECK-NOT: crti
+// CHECK-NOT: ctrbegin
+// CHECK: crt0
+// CHECK: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group" "--as-needed" "-lsoftfp" "--no-as-needed"
+// CHECK-NOT: crtend
+// CHECK-NOT: ctrn
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -9011,6 +9011,7 @@
   ArgStringList , const ArgList ) {
   bool isAndroid = Triple.isAndroid();
   bool isCygMing = Triple.isOSCygMing();
+  bool IsIAMCU = Triple.isOSIAMCU();
   bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) ||
   Args.hasArg(options::OPT_static);
   if (!D.CCCIsCXX())
@@ -9027,7 +9028,7 @@
   CmdArgs.push_back("--no-as-needed");
   }
 
-  if (StaticLibgcc && !isAndroid)
+  if (StaticLibgcc && !isAndroid && !IsIAMCU)
 CmdArgs.push_back("-lgcc_eh");
   else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX())
 CmdArgs.push_back("-lgcc");
@@ -9075,6 +9076,8 @@
 static const char *getLDMOption(const llvm::Triple , const ArgList ) {
   switch (T.getArch()) {
   case llvm::Triple::x86:
+if (T.isOSIAMCU())
+  return "elf_iamcu";
 return "elf_i386";
   case llvm::Triple::aarch64:
 return "aarch64linux";
@@ -9134,6 +9137,7 @@
 
   const llvm::Triple::ArchType Arch = ToolChain.getArch();
   const bool isAndroid = ToolChain.getTriple().isAndroid();
+  const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU();
   const bool IsPIE =
   !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) &&
   (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault());
@@ -9210,7 +9214,7 @@
   CmdArgs.push_back(Output.getFilename());
 
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
-if (!isAndroid) {
+if (!isAndroid && !IsIAMCU) {
   const char *crt1 = nullptr;
   if (!Args.hasArg(options::OPT_shared)) {
 if (Args.hasArg(options::OPT_pg))
@@ -9226,18 +9230,22 @@
   CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
 }
 
-const char *crtbegin;
-if (Args.hasArg(options::OPT_static))
-  crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o";
-else if (Args.hasArg(options::OPT_shared))
-  crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o";
-else if (IsPIE)
-  crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o";
-else
-  crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o";
+if (IsIAMCU)
+  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
+else {
+  const char *crtbegin;
+  if (Args.hasArg(options::OPT_static))
+crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o";
+  else if (Args.hasArg(options::OPT_shared))
+crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o";
+  else if (IsPIE)
+crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o";
+  else
+crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o";
 
-if (HasCRTBeginEndFiles)
-  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
+  if (HasCRTBeginEndFiles)
+CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
+}
 
 // Add crtfastmath.o if available and fast math is enabled.
 ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs);
@@ -9321,13 +9329,24 @@
 
   CmdArgs.push_back("-lc");
 
+  // Add IAMCU specific libs, if needed.
+  if (IsIAMCU)
+CmdArgs.push_back("-lgloss");
+
   if (Args.hasArg(options::OPT_static))
 CmdArgs.push_back("--end-group");
   else
 AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
+
+  // Add IAMCU specific libs (outside the group), if needed.
+  if (IsIAMCU) {
+CmdArgs.push_back("--as-needed");
+CmdArgs.push_back("-lsoftfp");
+CmdArgs.push_back("--no-as-needed");
+  }
 }
 
-if (!Args.hasArg(options::OPT_nostartfiles)) {
+if (!Args.hasArg(options::OPT_nostartfiles) && !IsIAMCU) {
   const char *crtend;
   if (Args.hasArg(options::OPT_shared))
 crtend = 

Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-05-26 Thread Andrey Turetskiy via cfe-commits
aturetsk added inline comments.


Comment at: lib/Driver/Tools.cpp:3657
@@ +3656,3 @@
+  if (IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_cxx_not_supported) << 
getToolChain().getTriple().str();
+

bruno wrote:
> Taking a look at this again I don't think there's a real need for a new 
> diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you can 
> do something similar to:
> 
> D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with -miamcu"
> 
> Otherwise, LGTM!
The best thing I could come up with is this:
```
D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU";
```
This code makes the error message look like this:
```
error: the clang compiler does not support 'C++ for IAMCU'
```
As you can see the message is a bit crooked. Do you thinks it's better to keep 
it this way?


http://reviews.llvm.org/D19274



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-05-25 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Ping.


http://reviews.llvm.org/D19274



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-05-12 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi Bruno,
Thanks for the review.



Comment at: include/clang/Basic/DiagnosticDriverKinds.td:157
@@ -156,1 +156,3 @@
+def err_drv_cxx_not_supported : Error<
+  "C++ is not supported for target '%0'">;
 

Yes. I've found nothing similar.


Comment at: lib/Driver/Tools.cpp:301
@@ -299,3 +300,3 @@
   CheckPreprocessingOptions(D, Args);
 
   Args.AddLastArg(CmdArgs, options::OPT_C);

Done.


Comment at: lib/Driver/Tools.cpp:574
@@ -569,1 +573,3 @@
+getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs);
+  }
 

Done.


http://reviews.llvm.org/D19274



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-05-12 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 57017.
aturetsk added a comment.

Fix the remarks.


http://reviews.llvm.org/D19274

Files:
  include/clang/Basic/DiagnosticDriverKinds.td
  include/clang/Driver/ToolChain.h
  lib/Driver/Driver.cpp
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c
  test/Driver/miamcu-opt.cpp

Index: test/Driver/miamcu-opt.cpp
===
--- /dev/null
+++ test/Driver/miamcu-opt.cpp
@@ -0,0 +1,3 @@
+// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s
+
+// CHECK: error: C++ is not supported for target 'i586-intel-elfiamcu'
Index: test/Driver/miamcu-opt.c
===
--- test/Driver/miamcu-opt.c
+++ test/Driver/miamcu-opt.c
@@ -16,3 +16,6 @@
 // CHECK: "-static-define"
 // CHECK: "-mfloat-abi" "soft"
 // CHECK: "-mstack-alignment=4"
+
+// CHECK: bin/ld
+// CHECK: "-static"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -295,6 +295,7 @@
 const InputInfoList ,
 const ToolChain *AuxToolChain) const {
   Arg *A;
+  const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
 
   CheckPreprocessingOptions(D, Args);
 
@@ -562,10 +563,15 @@
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
   }
 
-  // Add system include arguments.
-  getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
-  if (AuxToolChain)
+  // Add system include arguments for all targets but IAMCU.
+  if (!IsIAMCU) {
+getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
+if (AuxToolChain)
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
+  } else {
+// For IAMCU add special include arguments.
+getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs);
+  }
 
   // Add CUDA include arguments, if needed.
   if (types::isCuda(Inputs[0].getType()))
@@ -3635,6 +3641,7 @@
   getToolChain().getTriple().isWindowsCygwinEnvironment();
   bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();
   bool IsPS4CPU = getToolChain().getTriple().isPS4CPU();
+  bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
 
   // Check number of inputs for sanity. We need at least one input.
   assert(Inputs.size() >= 1 && "Must have at least one input.");
@@ -3645,6 +3652,10 @@
   bool IsCuda = types::isCuda(Input.getType());
   assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs.");
 
+  // C++ is not supported for IAMCU.
+  if (IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str();
+
   // Invoke ourselves in -cc1 mode.
   //
   // FIXME: Implement custom jobs for internal actions.
Index: lib/Driver/ToolChains.h
===
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -808,6 +808,8 @@
   llvm::opt::ArgStringList ) const override;
   void AddCudaIncludeArgs(const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
+  void AddIAMCUIncludeArgs(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const override;
   bool isPIEDefault() const override;
   SanitizerMask getSupportedSanitizers() const override;
   void addProfileRTLibs(const llvm::opt::ArgList ,
Index: lib/Driver/ToolChains.cpp
===
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -1610,9 +1610,13 @@
 break;
   case llvm::Triple::x86:
 LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-TripleAliases.append(begin(X86Triples), end(X86Triples));
-BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+// MCU toolchain is 32 bit only and its triple alias is TargetTriple
+// itself, which will be appended below.
+if (!TargetTriple.isOSIAMCU()) {
+  TripleAliases.append(begin(X86Triples), end(X86Triples));
+  BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
+  BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+}
 break;
   case llvm::Triple::mips:
 LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
@@ -1758,14 +1762,14 @@
 namespace {
 // Filter to remove Multilibs that don't exist as a suffix to Path
 class FilterNonExistent {
-  StringRef Base;
+  StringRef Base, File;
   vfs::FileSystem 
 
 public:
-  FilterNonExistent(StringRef Base, vfs::FileSystem )
-  : Base(Base), VFS(VFS) {}
+  FilterNonExistent(StringRef Base, StringRef File, vfs::FileSystem )
+  : Base(Base), File(File), VFS(VFS) {}
   bool operator()(const Multilib ) {
-return !VFS.exists(Base + 

Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87

2016-05-04 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi,
Thanks for the review.

Committed:

1. Add a test for driver options from m_x86_Features_Group 
(http://reviews.llvm.org/rL268487)
2. Add missing -mno-cx16 driver option (http://reviews.llvm.org/rL268488)
3. Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87 
(http://reviews.llvm.org/rL268489)


Repository:
  rL LLVM

http://reviews.llvm.org/D19658



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r268488 - Add missing -mno-cx16 driver option.

2016-05-04 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Wed May  4 06:19:41 2016
New Revision: 268488

URL: http://llvm.org/viewvc/llvm-project?rev=268488=rev
Log:
Add missing -mno-cx16 driver option.

Differential Revision: http://reviews.llvm.org/D19658

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/test/Driver/x86-target-features.c

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=268488=268487=268488=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Wed May  4 06:19:41 2016
@@ -1410,6 +1410,7 @@ def mno_prfchw : Flag<["-"], "mno-prfchw
 def mno_rdseed : Flag<["-"], "mno-rdseed">, Group;
 def mno_adx : Flag<["-"], "mno-adx">, Group;
 def mno_sha : Flag<["-"], "mno-sha">, Group;
+def mno_cx16 : Flag<["-"], "mno-cx16">, Group;
 def mno_fxsr : Flag<["-"], "mno-fxsr">, Group;
 def mno_xsave : Flag<["-"], "mno-xsave">, Group;
 def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group;

Modified: cfe/trunk/test/Driver/x86-target-features.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/x86-target-features.c?rev=268488=268487=268488=diff
==
--- cfe/trunk/test/Driver/x86-target-features.c (original)
+++ cfe/trunk/test/Driver/x86-target-features.c Wed May  4 06:19:41 2016
@@ -34,9 +34,9 @@
 // NO-XOP: "-target-feature" "-xop" "-target-feature" "-f16c" 
"-target-feature" "-rtm" "-target-feature" "-prfchw" "-target-feature" "-rdseed"
 
 // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msha -mpku -madx 
-mcx16 -mfxsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SHA %s
-// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sha -mno-pku 
-mno-adx -mno-fxsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SHA %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sha -mno-pku 
-mno-adx -mno-cx16 -mno-fxsr %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-SHA %s
 // SHA: "-target-feature" "+sha" "-target-feature" "+pku" "-target-feature" 
"+adx" "-target-feature" "+cx16" "-target-feature" "+fxsr"
-// NO-SHA: "-target-feature" "-sha" "-target-feature" "-pku" "-target-feature" 
"-adx" "-target-feature" "-fxsr"
+// NO-SHA: "-target-feature" "-sha" "-target-feature" "-pku" "-target-feature" 
"-adx" "-target-feature" "-cx16" "-target-feature" "-fxsr"
 
 // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mxsave -mxsaveopt 
-mxsavec -mxsaves %s -### -o %t.o 2>&1 | FileCheck -check-prefix=XSAVE %s
 // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-xsave 
-mno-xsaveopt -mno-xsavec -mno-xsaves %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-XSAVE %s


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87

2016-05-04 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL268487: Add a test for driver options from 
m_x86_Features_Group. (authored by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D19658?vs=55579=56125#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D19658

Files:
  cfe/trunk/test/Driver/x86-target-features.c

Index: cfe/trunk/test/Driver/x86-target-features.c
===
--- cfe/trunk/test/Driver/x86-target-features.c
+++ cfe/trunk/test/Driver/x86-target-features.c
@@ -0,0 +1,44 @@
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mmmx -m3dnow 
-m3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=MMX %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-mmx -mno-3dnow 
-mno-3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-MMX %s
+// MMX: "-target-feature" "+mmx" "-target-feature" "+3dnow" "-target-feature" 
"+3dnowa"
+// NO-MMX: "-target-feature" "-mmx" "-target-feature" "-3dnow" 
"-target-feature" "-3dnowa"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse -msse2 -msse3 
-mssse3 -msse4a -msse4.1 -msse4.2 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=SSE %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse -mno-sse2 
-mno-sse3 -mno-ssse3 -mno-sse4a -mno-sse4.1 -mno-sse4.2 %s -### -o %t.o 2>&1 | 
FileCheck -check-prefix=NO-SSE %s
+// SSE: "-target-feature" "+sse" "-target-feature" "+sse2" "-target-feature" 
"+sse3" "-target-feature" "+ssse3" "-target-feature" "+sse4a" "-target-feature" 
"+sse4.1" "-target-feature" "+sse4.2"
+// NO-SSE: "-target-feature" "-sse" "-target-feature" "-sse2" 
"-target-feature" "-sse3" "-target-feature" "-ssse3" "-target-feature" "-sse4a" 
"-target-feature" "-sse4.1" "-target-feature" "-sse4.2"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse4 -maes %s -### 
-o %t.o 2>&1 | FileCheck -check-prefix=SSE4-AES %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse4 -mno-aes 
%s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE4-AES %s
+// SSE4-AES: "-target-feature" "+sse4.2" "-target-feature" "+aes"
+// NO-SSE4-AES: "-target-feature" "-sse4.1" "-target-feature" "-aes"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx -mavx2 
-mavx512f -mavx512cd -mavx512er -mavx512pf -mavx512dq -mavx512bw -mavx512vl 
-mavx512vbmi -mavx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-avx -mno-avx2 
-mno-avx512f -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512dq 
-mno-avx512bw -mno-avx512vl -mno-avx512vbmi -mno-avx512ifma %s -### -o %t.o 
2>&1 | FileCheck -check-prefix=NO-AVX %s
+// AVX: "-target-feature" "+avx" "-target-feature" "+avx2" "-target-feature" 
"+avx512f" "-target-feature" "+avx512cd" "-target-feature" "+avx512er" 
"-target-feature" "+avx512pf" "-target-feature" "+avx512dq" "-target-feature" 
"+avx512bw" "-target-feature" "+avx512vl" "-target-feature" "+avx512vbmi" 
"-target-feature" "+avx512ifma"
+// NO-AVX: "-target-feature" "-avx" "-target-feature" "-avx2" 
"-target-feature" "-avx512f" "-target-feature" "-avx512cd" "-target-feature" 
"-avx512er" "-target-feature" "-avx512pf" "-target-feature" "-avx512dq" 
"-target-feature" "-avx512bw" "-target-feature" "-avx512vl" "-target-feature" 
"-avx512vbmi" "-target-feature" "-avx512ifma"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mpclmul -mrdrnd 
-mfsgsbase -mbmi -mbmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BMI %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-pclmul 
-mno-rdrnd -mno-fsgsbase -mno-bmi -mno-bmi2 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-BMI %s
+// BMI: "-target-feature" "+pclmul" "-target-feature" "+rdrnd" 
"-target-feature" "+fsgsbase" "-target-feature" "+bmi" "-target-feature" "+bmi2"
+// NO-BMI: "-target-feature" "-pclmul" "-target-feature" "-rdrnd" 
"-target-feature" "-fsgsbase" "-target-feature" "-bmi" "-target-feature" "-bmi2"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mlzcnt -mpopcnt 
-mtbm -mfma -mfma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=FMA %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-lzcnt 
-mno-popcnt -mno-tbm -mno-fma -mno-fma4 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-FMA %s
+// FMA: "-target-feature" "+lzcnt" "-target-feature" "+popcnt" 
"-target-feature" "+tbm" "-target-feature" "+fma" "-target-feature" "+fma4"
+// NO-FMA: "-target-feature" "-lzcnt" "-target-feature" "-popcnt" 
"-target-feature" "-tbm" "-target-feature" "-fma" "-target-feature" "-fma4"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mxop -mf16c -mrtm 
-mprfchw -mrdseed %s -### -o %t.o 2>&1 | FileCheck -check-prefix=XOP %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-xop -mno-f16c 
-mno-rtm -mno-prfchw -mno-rdseed %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-XOP %s
+// XOP: 

Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87

2016-04-29 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi,
Thanks for the review.
All m_x86_Features_Group options are handled in function 
handleTargetFeaturesGroup from lib/Driver/Tools.cpp, so there is no additional 
code needed.
There was no test for this, so I added a new one trying to cover all options 
from m_x86_Features_Group.



Comment at: include/clang/Driver/Options.td:1406
@@ -1403,2 +1405,3 @@
 def mno_sha : Flag<["-"], "mno-sha">, Group;
+def mno_cx16 : Flag<["-"], "mno-cx16">, Group;
 def mno_fxsr : Flag<["-"], "mno-fxsr">, Group;

The test showed me that this flag is missing so I added it.


http://reviews.llvm.org/D19658



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87

2016-04-29 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 55579.
aturetsk added a comment.

Add a missing option and a test.


http://reviews.llvm.org/D19658

Files:
  include/clang/Driver/Options.td
  test/Driver/x86-target-features.c

Index: test/Driver/x86-target-features.c
===
--- /dev/null
+++ test/Driver/x86-target-features.c
@@ -0,0 +1,51 @@
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mx87 %s -### -o 
%t.o 2>&1 | FileCheck -check-prefix=X87 %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-x87 %s -### -o 
%t.o 2>&1 | FileCheck -check-prefix=NO-X87 %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -m80387 %s -### -o 
%t.o 2>&1 | FileCheck -check-prefix=X87 %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-80387 %s -### 
-o %t.o 2>&1 | FileCheck -check-prefix=NO-X87 %s
+// X87: "-target-feature" "+x87"
+// NO-X87: "-target-feature" "-x87"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mmmx -m3dnow 
-m3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=MMX %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-mmx -mno-3dnow 
-mno-3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-MMX %s
+// MMX: "-target-feature" "+mmx" "-target-feature" "+3dnow" "-target-feature" 
"+3dnowa"
+// NO-MMX: "-target-feature" "-mmx" "-target-feature" "-3dnow" 
"-target-feature" "-3dnowa"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse -msse2 -msse3 
-mssse3 -msse4a -msse4.1 -msse4.2 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=SSE %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse -mno-sse2 
-mno-sse3 -mno-ssse3 -mno-sse4a -mno-sse4.1 -mno-sse4.2 %s -### -o %t.o 2>&1 | 
FileCheck -check-prefix=NO-SSE %s
+// SSE: "-target-feature" "+sse" "-target-feature" "+sse2" "-target-feature" 
"+sse3" "-target-feature" "+ssse3" "-target-feature" "+sse4a" "-target-feature" 
"+sse4.1" "-target-feature" "+sse4.2"
+// NO-SSE: "-target-feature" "-sse" "-target-feature" "-sse2" 
"-target-feature" "-sse3" "-target-feature" "-ssse3" "-target-feature" "-sse4a" 
"-target-feature" "-sse4.1" "-target-feature" "-sse4.2"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse4 -maes %s -### 
-o %t.o 2>&1 | FileCheck -check-prefix=SSE4-AES %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse4 -mno-aes 
%s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE4-AES %s
+// SSE4-AES: "-target-feature" "+sse4.2" "-target-feature" "+aes"
+// NO-SSE4-AES: "-target-feature" "-sse4.1" "-target-feature" "-aes"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx -mavx2 
-mavx512f -mavx512cd -mavx512er -mavx512pf -mavx512dq -mavx512bw -mavx512vl 
-mavx512vbmi -mavx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-avx -mno-avx2 
-mno-avx512f -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512dq 
-mno-avx512bw -mno-avx512vl -mno-avx512vbmi -mno-avx512ifma %s -### -o %t.o 
2>&1 | FileCheck -check-prefix=NO-AVX %s
+// AVX: "-target-feature" "+avx" "-target-feature" "+avx2" "-target-feature" 
"+avx512f" "-target-feature" "+avx512cd" "-target-feature" "+avx512er" 
"-target-feature" "+avx512pf" "-target-feature" "+avx512dq" "-target-feature" 
"+avx512bw" "-target-feature" "+avx512vl" "-target-feature" "+avx512vbmi" 
"-target-feature" "+avx512ifma"
+// NO-AVX: "-target-feature" "-avx" "-target-feature" "-avx2" 
"-target-feature" "-avx512f" "-target-feature" "-avx512cd" "-target-feature" 
"-avx512er" "-target-feature" "-avx512pf" "-target-feature" "-avx512dq" 
"-target-feature" "-avx512bw" "-target-feature" "-avx512vl" "-target-feature" 
"-avx512vbmi" "-target-feature" "-avx512ifma"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mpclmul -mrdrnd 
-mfsgsbase -mbmi -mbmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BMI %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-pclmul 
-mno-rdrnd -mno-fsgsbase -mno-bmi -mno-bmi2 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-BMI %s
+// BMI: "-target-feature" "+pclmul" "-target-feature" "+rdrnd" 
"-target-feature" "+fsgsbase" "-target-feature" "+bmi" "-target-feature" "+bmi2"
+// NO-BMI: "-target-feature" "-pclmul" "-target-feature" "-rdrnd" 
"-target-feature" "-fsgsbase" "-target-feature" "-bmi" "-target-feature" "-bmi2"
+
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mlzcnt -mpopcnt 
-mtbm -mfma -mfma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=FMA %s
+// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-lzcnt 
-mno-popcnt -mno-tbm -mno-fma -mno-fma4 %s -### -o %t.o 2>&1 | FileCheck 
-check-prefix=NO-FMA %s
+// FMA: "-target-feature" "+lzcnt" "-target-feature" "+popcnt" 
"-target-feature" "+tbm" "-target-feature" "+fma" "-target-feature" "+fma4"
+// NO-FMA: "-target-feature" "-lzcnt" "-target-feature" "-popcnt" 
"-target-feature" "-tbm" "-target-feature" "-fma" 

[PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87

2016-04-28 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: rsmith, echristo.
aturetsk added subscribers: cfe-commits, zinovy.nis.
Herald added a subscriber: joker.eph.

Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87.
-m[no-]80387 options is added for compatibility with GCC.

http://reviews.llvm.org/D19658

Files:
  include/clang/Driver/Options.td

Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1361,6 +1361,8 @@
 def mno_rtd: Flag<["-"], "mno-rtd">, Group;
 def mno_soft_float : Flag<["-"], "mno-soft-float">, Group;
 def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group;
+def mno_x87 : Flag<["-"], "mno-x87">, Group;
+def mno_80387 : Flag<["-"], "mno-80387">, Alias;
 def mno_sse2 : Flag<["-"], "mno-sse2">, Group;
 def mno_sse3 : Flag<["-"], "mno-sse3">, Group;
 def mno_sse4a : Flag<["-"], "mno-sse4a">, Group;
@@ -1527,6 +1529,8 @@
 def mimplicit_float : Flag<["-"], "mimplicit-float">, Group;
 def mrecip : Flag<["-"], "mrecip">, Group;
 def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group, 
Flags<[CC1Option]>;
+def mx87 : Flag<["-"], "mx87">, Group;
+def m80387 : Flag<["-"], "m80387">, Alias;
 def msse2 : Flag<["-"], "msse2">, Group;
 def msse3 : Flag<["-"], "msse3">, Group;
 def msse4a : Flag<["-"], "msse4a">, Group;


Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1361,6 +1361,8 @@
 def mno_rtd: Flag<["-"], "mno-rtd">, Group;
 def mno_soft_float : Flag<["-"], "mno-soft-float">, Group;
 def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group;
+def mno_x87 : Flag<["-"], "mno-x87">, Group;
+def mno_80387 : Flag<["-"], "mno-80387">, Alias;
 def mno_sse2 : Flag<["-"], "mno-sse2">, Group;
 def mno_sse3 : Flag<["-"], "mno-sse3">, Group;
 def mno_sse4a : Flag<["-"], "mno-sse4a">, Group;
@@ -1527,6 +1529,8 @@
 def mimplicit_float : Flag<["-"], "mimplicit-float">, Group;
 def mrecip : Flag<["-"], "mrecip">, Group;
 def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group, Flags<[CC1Option]>;
+def mx87 : Flag<["-"], "mx87">, Group;
+def m80387 : Flag<["-"], "m80387">, Alias;
 def msse2 : Flag<["-"], "msse2">, Group;
 def msse3 : Flag<["-"], "msse3">, Group;
 def msse4a : Flag<["-"], "msse4a">, Group;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r266972 - Compilation for Intel MCU (Part 1/3)

2016-04-21 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Thu Apr 21 05:16:48 2016
New Revision: 266972

URL: http://llvm.org/viewvc/llvm-project?rev=266972=rev
Log:
Compilation for Intel MCU (Part 1/3)

Add -miamcu option which:
  * Sets IAMCU triple
  * Sets IAMCU ABI
  * Enforces static compilation

Differential Revision: http://reviews.llvm.org/D18398

Added:
cfe/trunk/test/Driver/miamcu-opt.c   (with props)
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266972=266971=266972=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Thu Apr 21 05:16:48 2016
@@ -1292,6 +1292,8 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
CoreOption]>,
+  HelpText<"Use Intel MCU ABI">;
 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=266972=266971=266972=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Thu Apr 21 05:16:48 2016
@@ -278,6 +278,10 @@ DerivedArgList *Driver::TranslateInputAr
 DAL->append(A);
   }
 
+  // Enforce -static if -miamcu is present.
+  if (Args.hasArg(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.
 #if defined(HOST_LINK_VERSION)
@@ -296,7 +300,8 @@ DerivedArgList *Driver::TranslateInputAr
 ///
 /// This routine provides the logic to compute a target triple from various
 /// args passed to the driver and the default triple string.
-static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
+static llvm::Triple computeTargetTriple(const Driver ,
+StringRef DefaultTargetTriple,
 const ArgList ,
 StringRef DarwinArchName = "") {
   // FIXME: Already done in Compilation *Driver::BuildCompilation
@@ -341,8 +346,9 @@ static llvm::Triple computeTargetTriple(
 return Target;
 
   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
-  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
-   options::OPT_m32, options::OPT_m16)) {
+  Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+   options::OPT_m32, options::OPT_m16);
+  if (A) {
 llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
 
 if (A->getOption().matches(options::OPT_m64)) {
@@ -367,6 +373,25 @@ static llvm::Triple computeTargetTriple(
   Target.setArch(AT);
   }
 
+  // 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");
+  }
+
   return Target;
 }
 
@@ -501,8 +526,8 @@ Compilation *Driver::BuildCompilation(Ar
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
 
   // Owned by the host.
-  const ToolChain  =
-  getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs));
+  const ToolChain  = getToolChain(
+  *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
 
   // The compilation takes ownership of Args.
   Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
@@ -1981,9 +2006,9 @@ InputInfo Driver::BuildJobsForActionNoCa
 const char *ArchName = BAA->getArchName();
 
 if (ArchName)
-  TC = (
-  C.getArgs(),
-  computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName));
+  TC = (C.getArgs(),
+ 

[PATCH] D19274: Compilation for Intel MCU (Part 2/3)

2016-04-19 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: rsmith, bruno, bkramer.
aturetsk added subscribers: cfe-commits, DavidKreitzer, zinovy.nis.

This is the second patch required to support compilation for Intel MCU target 
(e.g. Intel(R) Quark(TM) micro controller D 2000).

When IAMCU triple is used:
* Recognize and use IAMCU GCC toolchain
* Set up include paths
* Forbid C++

The linker-related changes will be in the last part.

http://reviews.llvm.org/D19274

Files:
  include/clang/Basic/DiagnosticDriverKinds.td
  include/clang/Driver/ToolChain.h
  lib/Driver/Driver.cpp
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c
  test/Driver/miamcu-opt.cpp

Index: test/Driver/miamcu-opt.cpp
===
--- /dev/null
+++ test/Driver/miamcu-opt.cpp
@@ -0,0 +1,3 @@
+// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s
+
+// CHECK: error: C++ is not supported for target 'i586-intel-elfiamcu'
Index: test/Driver/miamcu-opt.c
===
--- test/Driver/miamcu-opt.c
+++ test/Driver/miamcu-opt.c
@@ -17,5 +17,5 @@
 // CHECK: "-mfloat-abi" "soft"
 // CHECK: "-mstack-alignment=4"
 
-// CHECK: bin/gcc
+// CHECK: bin/ld
 // CHECK: "-static"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -296,6 +296,8 @@
 const ToolChain *AuxToolChain) const {
   Arg *A;
 
+  const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
+
   CheckPreprocessingOptions(D, Args);
 
   Args.AddLastArg(CmdArgs, options::OPT_C);
@@ -562,14 +564,20 @@
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
   }
 
-  // Add system include arguments.
-  getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
-  if (AuxToolChain)
+  // Add system include arguments for all targets but IAMCU.
+  if (!IsIAMCU) {
+getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
+if (AuxToolChain)
   AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
+  }
 
   // Add CUDA include arguments, if needed.
   if (types::isCuda(Inputs[0].getType()))
 getToolChain().AddCudaIncludeArgs(Args, CmdArgs);
+
+  // Add IAMCU include arguments, if needed.
+  if (IsIAMCU)
+getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs);
 }
 
 // FIXME: Move to target hook.
@@ -3602,6 +3610,7 @@
   getToolChain().getTriple().isWindowsCygwinEnvironment();
   bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();
   bool IsPS4CPU = getToolChain().getTriple().isPS4CPU();
+  bool IsIAMCU = getToolChain().getTriple().isOSIAMCU();
 
   // Check number of inputs for sanity. We need at least one input.
   assert(Inputs.size() >= 1 && "Must have at least one input.");
@@ -3612,6 +3621,10 @@
   bool IsCuda = types::isCuda(Input.getType());
   assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs.");
 
+  // C++ is not supported for IAMCU.
+  if(IsIAMCU && types::isCXX(Input.getType()))
+D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str();
+
   // Invoke ourselves in -cc1 mode.
   //
   // FIXME: Implement custom jobs for internal actions.
Index: lib/Driver/ToolChains.h
===
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -806,6 +806,8 @@
   llvm::opt::ArgStringList ) const override;
   void AddCudaIncludeArgs(const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
+  void AddIAMCUIncludeArgs(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const override;
   bool isPIEDefault() const override;
   SanitizerMask getSupportedSanitizers() const override;
   void addProfileRTLibs(const llvm::opt::ArgList ,
Index: lib/Driver/ToolChains.cpp
===
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -1570,9 +1570,13 @@
 break;
   case llvm::Triple::x86:
 LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-TripleAliases.append(begin(X86Triples), end(X86Triples));
-BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+// MCU toolchain is 32 bit only and its triple alias is TargetTriple
+// itself, which will be appended below.
+if (!TargetTriple.isOSIAMCU()) {
+  TripleAliases.append(begin(X86Triples), end(X86Triples));
+  BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
+  BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
+}
 break;
   case llvm::Triple::mips:
 LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
@@ -1718,14 +1722,14 @@
 namespace {
 // Filter to 

r266753 - Revert r266747 (Compilation for Intel MCU (Part 1/3)) since it breaks a few buildbots.

2016-04-19 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Tue Apr 19 11:25:30 2016
New Revision: 266753

URL: http://llvm.org/viewvc/llvm-project?rev=266753=rev
Log:
Revert r266747 (Compilation for Intel MCU (Part 1/3)) since it breaks a few 
buildbots.

Removed:
cfe/trunk/test/Driver/miamcu-opt.c
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266753=266752=266753=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 19 11:25:30 2016
@@ -1292,8 +1292,6 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
-def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
CoreOption]>,
-  HelpText<"Use Intel MCU ABI">;
 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=266753=266752=266753=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 19 11:25:30 2016
@@ -278,10 +278,6 @@ DerivedArgList *Driver::TranslateInputAr
 DAL->append(A);
   }
 
-  // Enforce -static if -miamcu is present.
-  if (Args.hasArg(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.
 #if defined(HOST_LINK_VERSION)
@@ -300,8 +296,7 @@ DerivedArgList *Driver::TranslateInputAr
 ///
 /// This routine provides the logic to compute a target triple from various
 /// args passed to the driver and the default triple string.
-static llvm::Triple computeTargetTriple(const Driver ,
-StringRef DefaultTargetTriple,
+static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
 const ArgList ,
 StringRef DarwinArchName = "") {
   // FIXME: Already done in Compilation *Driver::BuildCompilation
@@ -346,9 +341,8 @@ static llvm::Triple computeTargetTriple(
 return Target;
 
   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
-  Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
-   options::OPT_m32, options::OPT_m16);
-  if (A) {
+  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+   options::OPT_m32, options::OPT_m16)) {
 llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
 
 if (A->getOption().matches(options::OPT_m64)) {
@@ -373,25 +367,6 @@ static llvm::Triple computeTargetTriple(
   Target.setArch(AT);
   }
 
-  // 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");
-  }
-
   return Target;
 }
 
@@ -526,8 +501,8 @@ Compilation *Driver::BuildCompilation(Ar
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
 
   // Owned by the host.
-  const ToolChain  = getToolChain(
-  *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
+  const ToolChain  =
+  getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs));
 
   // The compilation takes ownership of Args.
   Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
@@ -2006,9 +1981,9 @@ InputInfo Driver::BuildJobsForActionNoCa
 const char *ArchName = BAA->getArchName();
 
 if (ArchName)
-  TC = (C.getArgs(),
- computeTargetTriple(*this, DefaultTargetTriple,
- C.getArgs(), ArchName));
+  TC = (
+  C.getArgs(),
+  computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName));
   

r266747 - Compilation for Intel MCU (Part 1/3)

2016-04-19 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Tue Apr 19 10:50:57 2016
New Revision: 266747

URL: http://llvm.org/viewvc/llvm-project?rev=266747=rev
Log:
Compilation for Intel MCU (Part 1/3)

Add -miamcu option which:
  * Sets IAMCU triple
  * Sets IAMCU ABI
  * Enforces static compilation

Differential Revision: http://reviews.llvm.org/D18398

Added:
cfe/trunk/test/Driver/miamcu-opt.c   (with props)
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266747=266746=266747=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 19 10:50:57 2016
@@ -1292,6 +1292,8 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
CoreOption]>,
+  HelpText<"Use Intel MCU ABI">;
 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=266747=266746=266747=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 19 10:50:57 2016
@@ -278,6 +278,10 @@ DerivedArgList *Driver::TranslateInputAr
 DAL->append(A);
   }
 
+  // Enforce -static if -miamcu is present.
+  if (Args.hasArg(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.
 #if defined(HOST_LINK_VERSION)
@@ -296,7 +300,8 @@ DerivedArgList *Driver::TranslateInputAr
 ///
 /// This routine provides the logic to compute a target triple from various
 /// args passed to the driver and the default triple string.
-static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
+static llvm::Triple computeTargetTriple(const Driver ,
+StringRef DefaultTargetTriple,
 const ArgList ,
 StringRef DarwinArchName = "") {
   // FIXME: Already done in Compilation *Driver::BuildCompilation
@@ -341,8 +346,9 @@ static llvm::Triple computeTargetTriple(
 return Target;
 
   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
-  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
-   options::OPT_m32, options::OPT_m16)) {
+  Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+   options::OPT_m32, options::OPT_m16);
+  if (A) {
 llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
 
 if (A->getOption().matches(options::OPT_m64)) {
@@ -367,6 +373,25 @@ static llvm::Triple computeTargetTriple(
   Target.setArch(AT);
   }
 
+  // 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");
+  }
+
   return Target;
 }
 
@@ -501,8 +526,8 @@ Compilation *Driver::BuildCompilation(Ar
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
 
   // Owned by the host.
-  const ToolChain  =
-  getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs));
+  const ToolChain  = getToolChain(
+  *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
 
   // The compilation takes ownership of Args.
   Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
@@ -1981,9 +2006,9 @@ InputInfo Driver::BuildJobsForActionNoCa
 const char *ArchName = BAA->getArchName();
 
 if (ArchName)
-  TC = (
-  C.getArgs(),
-  computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName));
+  TC = (C.getArgs(),
+ 

Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)

2016-04-18 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Ping.


http://reviews.llvm.org/D18398



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)

2016-04-06 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi Bruno,

Thanks for the review.



Comment at: include/clang/Driver/Options.td:1281
@@ -1280,1 +1280,3 @@
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
CoreOption]>,
+  HelpText<"Use Intel MCU ABI">;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, 
Group;

Fixed.


Comment at: lib/Driver/Driver.cpp:282
@@ +281,3 @@
+  // Enforce -static if -miamcu is present.
+  if (Args.hasArg(options::OPT_miamcu))
+DAL->AddFlagArg(0, Opts->getOption(options::OPT_static));

You're right.
The warning was removed and the test was updated.


Comment at: lib/Driver/Driver.cpp:380
@@ +379,3 @@
+  D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu"
+   << Target.str();
+

I made driver to show an error if '-miamcu' is used with anything but x86.
The corresponding test was added.


Comment at: lib/Driver/Tools.cpp:2130
@@ -2122,3 +2129,3 @@
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,

No, the idea is for -miamcu to specify only ABI and it shouldn't be bound to 
Lakemont at all. Which target CPU to use is the choice of the user and it 
should be explicitly specified through -march.
I believe GCC does the same.


http://reviews.llvm.org/D18398



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)

2016-04-06 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 52789.
aturetsk added a comment.

Fix remarks,


http://reviews.llvm.org/D18398

Files:
  include/clang/Driver/Options.td
  lib/Driver/Driver.cpp
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c

Index: test/Driver/miamcu-opt.c
===
--- /dev/null
+++ test/Driver/miamcu-opt.c
@@ -0,0 +1,21 @@
+// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -m32 %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64
+// RUN: %clang -miamcu -dynamic %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=DYNAMIC
+// RUN: %clang -miamcu -target armv8-eabi %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86
+
+// M64: error: invalid argument '-miamcu' not allowed with '-m64'
+
+// DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static'
+
+// NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi'
+
+// CHECK: "-cc1"
+// CHECK: "-triple" "i586-intel-elfiamcu"
+// CHECK: "-static-define"
+// CHECK: "-mfloat-abi" "soft"
+// CHECK: "-mstack-alignment=4"
+
+// CHECK: bin/gcc
+// CHECK: "-static"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2119,6 +2119,13 @@
   << A->getOption().getName() << Value;
 }
   }
+
+  // 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");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -278,6 +278,10 @@
 DAL->append(A);
   }
 
+  // Enforce -static if -miamcu is present.
+  if (Args.hasArg(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.
 #if defined(HOST_LINK_VERSION)
@@ -296,7 +300,8 @@
 ///
 /// This routine provides the logic to compute a target triple from various
 /// args passed to the driver and the default triple string.
-static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
+static llvm::Triple computeTargetTriple(const Driver ,
+StringRef DefaultTargetTriple,
 const ArgList ,
 StringRef DarwinArchName = "") {
   // FIXME: Already done in Compilation *Driver::BuildCompilation
@@ -341,8 +346,9 @@
 return Target;
 
   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
-  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
-   options::OPT_m32, options::OPT_m16)) {
+  Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+   options::OPT_m32, options::OPT_m16);
+  if (A) {
 llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
 
 if (A->getOption().matches(options::OPT_m64)) {
@@ -367,6 +373,25 @@
   Target.setArch(AT);
   }
 
+  // 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");
+  }
+
   return Target;
 }
 
@@ -501,8 +526,8 @@
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
 
   // Owned by the host.
-  const ToolChain  =
-  getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs));
+  const ToolChain  = getToolChain(
+  *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
 
   // The compilation takes ownership of Args.
   Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
@@ -1957,9 +1982,9 @@
 const char *ArchName = BAA->getArchName();
 
 if (ArchName)
-  TC = (
-  C.getArgs(),
-  computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName));
+  TC = (C.getArgs(),
+ computeTargetTriple(*this, DefaultTargetTriple,
+

r265405 - [X86] Introduction of -march=lakemont.

2016-04-05 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Tue Apr  5 10:04:26 2016
New Revision: 265405

URL: http://llvm.org/viewvc/llvm-project?rev=265405=rev
Log:
[X86] Introduction of -march=lakemont.

Differential Revision: http://reviews.llvm.org/D18651

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/CodeGen/attr-target-x86.c
cfe/trunk/test/Preprocessor/predefined-arch-macros.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=265405=265404=265405=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Apr  5 10:04:26 2016
@@ -2239,6 +2239,10 @@ class X86TargetInfo : public TargetInfo
 /// Knights Landing processor.
 CK_KNL,
 
+/// \name Lakemont
+/// Lakemont microarchitecture based processors.
+CK_Lakemont,
+
 /// \name K6
 /// K6 architecture processors.
 //@{
@@ -2343,6 +2347,7 @@ class X86TargetInfo : public TargetInfo
 .Case("skx", CK_SkylakeServer) // Legacy name.
 .Case("cannonlake", CK_Cannonlake)
 .Case("knl", CK_KNL)
+.Case("lakemont", CK_Lakemont)
 .Case("k6", CK_K6)
 .Case("k6-2", CK_K6_2)
 .Case("k6-3", CK_K6_3)
@@ -2490,6 +2495,7 @@ public:
 case CK_C3_2:
 case CK_Pentium4:
 case CK_Pentium4M:
+case CK_Lakemont:
 case CK_Prescott:
 case CK_K6:
 case CK_K6_2:
@@ -2588,10 +2594,13 @@ bool X86TargetInfo::initFeatureMap(
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
-  // Enable X87 for all X86 processors.
-  setFeatureEnabledImpl(Features, "x87", true);
+  const CPUKind Kind = getCPUKind(CPU);
+
+  // Enable X87 for all X86 processors but Lakemont.
+  if (Kind != CK_Lakemont)
+setFeatureEnabledImpl(Features, "x87", true);
 
-  switch (getCPUKind(CPU)) {
+  switch (Kind) {
   case CK_Generic:
   case CK_i386:
   case CK_i486:
@@ -2599,6 +2608,7 @@ bool X86TargetInfo::initFeatureMap(
   case CK_Pentium:
   case CK_i686:
   case CK_PentiumPro:
+  case CK_Lakemont:
 break;
   case CK_PentiumMMX:
   case CK_Pentium2:
@@ -3253,6 +3263,9 @@ void X86TargetInfo::getTargetDefines(con
   case CK_KNL:
 defineCPUMacros(Builder, "knl");
 break;
+  case CK_Lakemont:
+Builder.defineMacro("__tune_lakemont__");
+break;
   case CK_K6_2:
 Builder.defineMacro("__k6_2__");
 Builder.defineMacro("__tune_k6_2__");

Modified: cfe/trunk/test/CodeGen/attr-target-x86.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86.c?rev=265405=265404=265405=diff
==
--- cfe/trunk/test/CodeGen/attr-target-x86.c (original)
+++ cfe/trunk/test/CodeGen/attr-target-x86.c Tue Apr  5 10:04:26 2016
@@ -18,6 +18,8 @@ int __attribute__((target("no-aes, arch=
 
 int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
 
+int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; }
+
 // Check that we emit the additional subtarget and cpu features for foo and 
not for baz or bar.
 // CHECK: baz{{.*}} #0
 // CHECK: foo{{.*}} #1
@@ -31,9 +33,11 @@ int __attribute__((target("no-mmx"))) qq
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
+// CHECK: lake{{.*}} #6
 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
 // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
 // CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
 // CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
 // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
 // CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
+// CHECK: #6 = {{.*}}"target-cpu"="lakemont" 
"target-features"="+mmx,+sse,+sse2"

Modified: cfe/trunk/test/Preprocessor/predefined-arch-macros.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-arch-macros.c?rev=265405=265404=265405=diff
==
--- cfe/trunk/test/Preprocessor/predefined-arch-macros.c (original)
+++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c Tue Apr  5 10:04:26 
2016
@@ -1004,6 +1004,18 @@
 // CHECK_SLM_M64: #define __x86_64 1
 // CHECK_SLM_M64: 

Re: [PATCH] D18651: [X86] Introduction of -march=lakemont

2016-04-05 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL265405: [X86] Introduction of -march=lakemont. (authored by 
aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D18651?vs=52220=52692#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D18651

Files:
  cfe/trunk/lib/Basic/Targets.cpp
  cfe/trunk/test/CodeGen/attr-target-x86.c
  cfe/trunk/test/Preprocessor/predefined-arch-macros.c

Index: cfe/trunk/test/CodeGen/attr-target-x86.c
===
--- cfe/trunk/test/CodeGen/attr-target-x86.c
+++ cfe/trunk/test/CodeGen/attr-target-x86.c
@@ -18,6 +18,8 @@
 
 int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
 
+int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; }
+
 // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
 // CHECK: baz{{.*}} #0
 // CHECK: foo{{.*}} #1
@@ -31,9 +33,11 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
+// CHECK: lake{{.*}} #6
 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
 // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
 // CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
 // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
 // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
 // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
+// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2"
Index: cfe/trunk/test/Preprocessor/predefined-arch-macros.c
===
--- cfe/trunk/test/Preprocessor/predefined-arch-macros.c
+++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c
@@ -1004,6 +1004,18 @@
 // CHECK_SLM_M64: #define __x86_64 1
 // CHECK_SLM_M64: #define __x86_64__ 1
 //
+// RUN: %clang -march=lakemont -m32 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck %s -check-prefix=CHECK_LMT_M32
+// CHECK_LMT_M32: #define __i386 1
+// CHECK_LMT_M32: #define __i386__ 1
+// CHECK_LMT_M32: #define __tune_lakemont__ 1
+// CHECK_LMT_M32: #define i386 1
+// RUN: not %clang -march=lakemont -m64 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck %s -check-prefix=CHECK_LMT_M64
+// CHECK_LMT_M64: error:
+//
 // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \
 // RUN: -target i386-unknown-linux \
 // RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GEODE_M32
Index: cfe/trunk/lib/Basic/Targets.cpp
===
--- cfe/trunk/lib/Basic/Targets.cpp
+++ cfe/trunk/lib/Basic/Targets.cpp
@@ -2239,6 +2239,10 @@
 /// Knights Landing processor.
 CK_KNL,
 
+/// \name Lakemont
+/// Lakemont microarchitecture based processors.
+CK_Lakemont,
+
 /// \name K6
 /// K6 architecture processors.
 //@{
@@ -2343,6 +2347,7 @@
 .Case("skx", CK_SkylakeServer) // Legacy name.
 .Case("cannonlake", CK_Cannonlake)
 .Case("knl", CK_KNL)
+.Case("lakemont", CK_Lakemont)
 .Case("k6", CK_K6)
 .Case("k6-2", CK_K6_2)
 .Case("k6-3", CK_K6_3)
@@ -2490,6 +2495,7 @@
 case CK_C3_2:
 case CK_Pentium4:
 case CK_Pentium4M:
+case CK_Lakemont:
 case CK_Prescott:
 case CK_K6:
 case CK_K6_2:
@@ -2588,17 +2594,21 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
-  // Enable X87 for all X86 processors.
-  setFeatureEnabledImpl(Features, "x87", true);
+  const CPUKind Kind = getCPUKind(CPU);
+
+  // Enable X87 for all X86 processors but Lakemont.
+  if (Kind != CK_Lakemont)
+setFeatureEnabledImpl(Features, "x87", true);
 
-  switch (getCPUKind(CPU)) {
+  switch (Kind) {
   case CK_Generic:
   case CK_i386:
   case CK_i486:
   case CK_i586:
   case CK_Pentium:
   case CK_i686:
   case CK_PentiumPro:
+  case CK_Lakemont:
 break;
   case CK_PentiumMMX:
   case CK_Pentium2:
@@ -3253,6 +3263,9 @@
   case CK_KNL:
 defineCPUMacros(Builder, "knl");
 break;
+  case CK_Lakemont:
+Builder.defineMacro("__tune_lakemont__");
+break;
   case CK_K6_2:
 Builder.defineMacro("__k6_2__");
 Builder.defineMacro("__tune_k6_2__");

Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)

2016-04-04 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Ping.


http://reviews.llvm.org/D18398



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D18651: [X86] Introduction of -march=lakemont

2016-03-31 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

I used existing test "test/CodeGen/attr-target-x86.c" to check Lakemont's 
target features. However the test is actually run with 64-bit triple 
"x86_64-linux-gnu", so "+mmx,+sse,+sse2" are included in target features. The 
same thing happens with Pentium and other 32-bit-only CPUs. I wonder if we 
should have some check so that 32-bit-only CPUs couldn't be used with 64-bit 
triple. What do you think?


http://reviews.llvm.org/D18651



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D18651: [X86] Introduction of -march=lakemont

2016-03-31 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: rsmith, echristo.
aturetsk added subscribers: cfe-commits, zinovy.nis.

Add a new CPU - Lakemont.

http://reviews.llvm.org/D18651

Files:
  lib/Basic/Targets.cpp
  test/CodeGen/attr-target-x86.c
  test/Preprocessor/predefined-arch-macros.c

Index: test/Preprocessor/predefined-arch-macros.c
===
--- test/Preprocessor/predefined-arch-macros.c
+++ test/Preprocessor/predefined-arch-macros.c
@@ -1004,6 +1004,18 @@
 // CHECK_SLM_M64: #define __x86_64 1
 // CHECK_SLM_M64: #define __x86_64__ 1
 //
+// RUN: %clang -march=lakemont -m32 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck %s -check-prefix=CHECK_LMT_M32
+// CHECK_LMT_M32: #define __i386 1
+// CHECK_LMT_M32: #define __i386__ 1
+// CHECK_LMT_M32: #define __tune_lakemont__ 1
+// CHECK_LMT_M32: #define i386 1
+// RUN: not %clang -march=lakemont -m64 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck %s -check-prefix=CHECK_LMT_M64
+// CHECK_LMT_M64: error:
+//
 // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \
 // RUN: -target i386-unknown-linux \
 // RUN:   | FileCheck %s -check-prefix=CHECK_GEODE_M32
Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -18,6 +18,8 @@
 
 int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
 
+int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; }
+
 // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
 // CHECK: baz{{.*}} #0
 // CHECK: foo{{.*}} #1
@@ -31,9 +33,11 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
+// CHECK: lake{{.*}} #6
 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
 // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
 // CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
 // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
 // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
 // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
+// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2"
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -2236,6 +2236,10 @@
 /// Knights Landing processor.
 CK_KNL,
 
+/// \name Lakemont
+/// Lakemont microarchitecture based processors.
+CK_Lakemont,
+
 /// \name K6
 /// K6 architecture processors.
 //@{
@@ -2340,6 +2344,7 @@
 .Case("skx", CK_SkylakeServer) // Legacy name.
 .Case("cannonlake", CK_Cannonlake)
 .Case("knl", CK_KNL)
+.Case("lakemont", CK_Lakemont)
 .Case("k6", CK_K6)
 .Case("k6-2", CK_K6_2)
 .Case("k6-3", CK_K6_3)
@@ -2487,6 +2492,7 @@
 case CK_C3_2:
 case CK_Pentium4:
 case CK_Pentium4M:
+case CK_Lakemont:
 case CK_Prescott:
 case CK_K6:
 case CK_K6_2:
@@ -2585,17 +2591,21 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
-  // Enable X87 for all X86 processors.
-  setFeatureEnabledImpl(Features, "x87", true);
+  const CPUKind Kind = getCPUKind(CPU);
+
+  // Enable X87 for all X86 processors but Lakemont.
+  if (Kind != CK_Lakemont)
+setFeatureEnabledImpl(Features, "x87", true);
 
-  switch (getCPUKind(CPU)) {
+  switch (Kind) {
   case CK_Generic:
   case CK_i386:
   case CK_i486:
   case CK_i586:
   case CK_Pentium:
   case CK_i686:
   case CK_PentiumPro:
+  case CK_Lakemont:
 break;
   case CK_PentiumMMX:
   case CK_Pentium2:
@@ -3250,6 +3260,9 @@
   case CK_KNL:
 defineCPUMacros(Builder, "knl");
 break;
+  case CK_Lakemont:
+Builder.defineMacro("__tune_lakemont__");
+break;
   case CK_K6_2:
 Builder.defineMacro("__k6_2__");
 Builder.defineMacro("__tune_k6_2__");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D18398: Compilation for Intel MCU (Part 1/3)

2016-03-23 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added reviewers: rsmith, tra, thakis, ddunbar, bob.wilson, dougk.
aturetsk added subscribers: cfe-commits, zinovy.nis, DavidKreitzer.

Add -miamcu option which:
* Sets IAMCU triple
* Sets IAMCU ABI
* Enforces static compilation

http://reviews.llvm.org/D18398

Files:
  include/clang/Driver/Options.td
  lib/Driver/Driver.cpp
  lib/Driver/Tools.cpp
  test/Driver/miamcu-opt.c

Index: test/Driver/miamcu-opt.c
===
--- /dev/null
+++ test/Driver/miamcu-opt.c
@@ -0,0 +1,18 @@
+// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -m32 %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s
+// RUN: %clang -miamcu -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=ERROR
+// RUN: %clang -miamcu -dynamic %s -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK -check-prefix=DYNAMIC %s
+
+// ERROR: error: invalid argument '-miamcu' not allowed with '-m64'
+
+// DYNAMIC: warning: argument unused during compilation: '-dynamic'
+
+// CHECK: "-cc1"
+// CHECK: "-triple" "i586-intel-elfiamcu"
+// CHECK: "-static-define"
+// CHECK: "-mfloat-abi" "soft"
+// CHECK: "-mstack-alignment=4"
+
+// CHECK: bin/gcc
+// CHECK: "-static"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2119,6 +2119,13 @@
   << A->getOption().getName() << Value;
 }
   }
+
+  // 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");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -210,6 +210,7 @@
 DerivedArgList *Driver::TranslateInputArgs(const InputArgList ) const {
   DerivedArgList *DAL = new DerivedArgList(Args);
 
+  bool HasMiamcu = Args.hasArg(options::OPT_miamcu);
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
   bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
@@ -275,9 +276,19 @@
   continue;
 }
 
+// Ignore -dynamic if -miamcu is present.
+if (A->getOption().matches(options::OPT_dynamic) && HasMiamcu) {
+  Diag(diag::warn_drv_unused_argument) << "-dynamic";
+  continue;
+}
+
 DAL->append(A);
   }
 
+  // Enforce -static if -miamcu is present.
+  if (HasMiamcu)
+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.
 #if defined(HOST_LINK_VERSION)
@@ -296,7 +307,8 @@
 ///
 /// This routine provides the logic to compute a target triple from various
 /// args passed to the driver and the default triple string.
-static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
+static llvm::Triple computeTargetTriple(const Driver ,
+StringRef DefaultTargetTriple,
 const ArgList ,
 StringRef DarwinArchName = "") {
   // FIXME: Already done in Compilation *Driver::BuildCompilation
@@ -341,8 +353,9 @@
 return Target;
 
   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
-  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
-   options::OPT_m32, options::OPT_m16)) {
+  Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+   options::OPT_m32, options::OPT_m16);
+  if (A) {
 llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
 
 if (A->getOption().matches(options::OPT_m64)) {
@@ -367,6 +380,21 @@
   Target.setArch(AT);
   }
 
+  // Handle -miamcu flag.
+  if (Args.hasArg(options::OPT_miamcu)) {
+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;
 }
 
@@ -501,8 +529,8 @@
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
 
   // Owned by the host.
-  const ToolChain  =
-  getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs));
+  const ToolChain  = getToolChain(
+  *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
 
   // The compilation takes ownership of Args.
   Compilation *C = new Compilation(*this, TC, 

Re: [PATCH] D13980: Add "x87" in x86 target feature map

2016-03-23 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL264149: [X86] Add "x87" in x86 target feature map. (authored 
by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D13980?vs=48904=51398#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D13980

Files:
  cfe/trunk/lib/Basic/Targets.cpp
  cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
  cfe/trunk/test/CodeGen/attr-target-x86.c
  cfe/trunk/test/CodeGen/attr-target-x87-softfp.c

Index: cfe/trunk/test/CodeGen/attr-target-x86.c
===
--- cfe/trunk/test/CodeGen/attr-target-x86.c
+++ cfe/trunk/test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
+// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
+// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
Index: cfe/trunk/test/CodeGen/attr-target-x87-softfp.c
===
--- cfe/trunk/test/CodeGen/attr-target-x87-softfp.c
+++ cfe/trunk/test/CodeGen/attr-target-x87-softfp.c
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s 
-o - | FileCheck %s -check-prefix=CHECK -check-prefix=HARD
+// RUN: %clang_cc1 -msoft-float -triple x86_64-linux-gnu -target-cpu x86-64 
-emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=SOFT
+
+int __attribute__((target("x87"))) foo(int a) { return 4; }
+int __attribute__((target("no-x87"))) bar(int a) { return 4; }
+
+// CHECK: foo{{.*}} #0
+// CHECK: bar{{.*}} #1
+
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// HARD: "use-soft-float"="false"
+// SOFT: "use-soft-float"="true"
+
+// CHECK: #1 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,-x87"
+// HARD: "use-soft-float"="false"
+// SOFT: "use-soft-float"="true"
Index: cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
===
--- cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
+++ cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
@@ -19,4 +19,4 @@
   _mm_srai_pi32(a, c);
 }
 
-// CHECK: "target-features"="+mmx,+sse"
+// CHECK: "target-features"="+mmx,+sse,+x87"
Index: cfe/trunk/lib/Basic/Targets.cpp
===
--- cfe/trunk/lib/Basic/Targets.cpp
+++ cfe/trunk/lib/Basic/Targets.cpp
@@ -2585,6 +2585,9 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
+  // Enable X87 for all X86 processors.
+  setFeatureEnabledImpl(Features, "x87", true);
+
   switch (getCPUKind(CPU)) {
   case CK_Generic:
   case CK_i386:


Index: cfe/trunk/test/CodeGen/attr-target-x86.c
===
--- cfe/trunk/test/CodeGen/attr-target-x86.c
+++ cfe/trunk/test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 

r264149 - [X86] Add "x87" in x86 target feature map.

2016-03-23 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Wed Mar 23 06:15:10 2016
New Revision: 264149

URL: http://llvm.org/viewvc/llvm-project?rev=264149=rev
Log:
[X86] Add "x87" in x86 target feature map.

Differential Revision: http://reviews.llvm.org/D13980


Added:
cfe/trunk/test/CodeGen/attr-target-x87-softfp.c   (with props)
Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
cfe/trunk/test/CodeGen/attr-target-x86.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=264149=264148=264149=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Wed Mar 23 06:15:10 2016
@@ -2585,6 +2585,9 @@ bool X86TargetInfo::initFeatureMap(
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
+  // Enable X87 for all X86 processors.
+  setFeatureEnabledImpl(Features, "x87", true);
+
   switch (getCPUKind(CPU)) {
   case CK_Generic:
   case CK_i386:

Modified: cfe/trunk/test/CodeGen/attr-target-x86-mmx.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86-mmx.c?rev=264149=264148=264149=diff
==
--- cfe/trunk/test/CodeGen/attr-target-x86-mmx.c (original)
+++ cfe/trunk/test/CodeGen/attr-target-x86-mmx.c Wed Mar 23 06:15:10 2016
@@ -19,4 +19,4 @@ void __attribute__((target("sse"))) shif
   _mm_srai_pi32(a, c);
 }
 
-// CHECK: "target-features"="+mmx,+sse"
+// CHECK: "target-features"="+mmx,+sse,+x87"

Modified: cfe/trunk/test/CodeGen/attr-target-x86.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86.c?rev=264149=264148=264149=diff
==
--- cfe/trunk/test/CodeGen/attr-target-x86.c (original)
+++ cfe/trunk/test/CodeGen/attr-target-x86.c Wed Mar 23 06:15:10 2016
@@ -31,9 +31,9 @@ int __attribute__((target("no-mmx"))) qq
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
+// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
+// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"

Added: cfe/trunk/test/CodeGen/attr-target-x87-softfp.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x87-softfp.c?rev=264149=auto
==
--- cfe/trunk/test/CodeGen/attr-target-x87-softfp.c (added)
+++ cfe/trunk/test/CodeGen/attr-target-x87-softfp.c Wed Mar 23 06:15:10 2016
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s 
-o - | FileCheck %s -check-prefix=CHECK -check-prefix=HARD
+// RUN: %clang_cc1 -msoft-float -triple x86_64-linux-gnu -target-cpu x86-64 
-emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=SOFT
+
+int __attribute__((target("x87"))) foo(int a) { return 4; }
+int __attribute__((target("no-x87"))) bar(int a) { return 4; }
+
+// CHECK: foo{{.*}} #0
+// 

Re: [PATCH] D14146: Introduction of -miamcu option

2016-03-14 Thread Andrey Turetskiy via cfe-commits
aturetsk abandoned this revision.
aturetsk added a comment.

The patch will be completely reworked and extended to support compilation for 
MCU.


http://reviews.llvm.org/D14146



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r263422 - [Driver] Enable --rtlib option for MSVC target

2016-03-14 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Mon Mar 14 06:19:43 2016
New Revision: 263422

URL: http://llvm.org/viewvc/llvm-project?rev=263422=rev
Log:
[Driver] Enable --rtlib option for MSVC target

This enables "--rtlib compiler-rt" option under MSVC environment.

Patch by Roman Shirokiy.

Differential Revision: http://reviews.llvm.org/D17453

Added:
cfe/trunk/test/Driver/msvc-compiler-rt.c   (with props)
Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/nostdlib.c

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=263422=263421=263422=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Mar 14 06:19:43 2016
@@ -8948,7 +8948,16 @@ static void AddRunTimeLibs(const ToolCha
 }
 break;
   case ToolChain::RLT_Libgcc:
-AddLibgcc(TC.getTriple(), D, CmdArgs, Args);
+// Make sure libgcc is not used under MSVC environment by default
+if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
+  // Issue error diagnostic if libgcc is explicitly specified
+  // through command line as --rtlib option argument.
+  if (Args.hasArg(options::OPT_rtlib_EQ)) {
+TC.getDriver().Diag(diag::err_drv_unsupported_rtlib_for_platform)
+<< Args.getLastArg(options::OPT_rtlib_EQ)->getValue() << "MSVC";
+  }
+} else
+  AddLibgcc(TC.getTriple(), D, CmdArgs, Args);
 break;
   }
 }
@@ -9754,6 +9763,12 @@ void visualstudio::Linker::ConstructJob(
 }
   }
 
+  // Add compiler-rt lib in case if it was explicitly
+  // specified as an argument for --rtlib option.
+  if (!Args.hasArg(options::OPT_nostdlib)) {
+AddRunTimeLibs(TC, TC.getDriver(), CmdArgs, Args);
+  }
+
   // Add filenames, libraries, and other linker inputs.
   for (const auto  : Inputs) {
 if (Input.isFilename()) {

Added: cfe/trunk/test/Driver/msvc-compiler-rt.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/msvc-compiler-rt.c?rev=263422=auto
==
--- cfe/trunk/test/Driver/msvc-compiler-rt.c (added)
+++ cfe/trunk/test/Driver/msvc-compiler-rt.c Mon Mar 14 06:19:43 2016
@@ -0,0 +1,5 @@
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 
| FileCheck %s -check-prefix MSVC-COMPILER-RT
+// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | 
FileCheck %s -check-prefix CHECK-ERROR
+
+// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}"
+// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC'

Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c
--
svn:eol-style = native

Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c
--
svn:keywords = Author Date Id Rev URL

Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c
--
svn:mime-type = text/plain

Modified: cfe/trunk/test/Driver/nostdlib.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/nostdlib.c?rev=263422=263421=263422=diff
==
--- cfe/trunk/test/Driver/nostdlib.c (original)
+++ cfe/trunk/test/Driver/nostdlib.c Mon Mar 14 06:19:43 2016
@@ -22,6 +22,10 @@
 // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \
 // RUN:   | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s
 //
+// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt 
-### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib 
-### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+//
 // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: 
'--rtlib=compiler-rt'
 // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
 // CHECK-LINUX-NOSTDLIB-NOT: 
"{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a"
+// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: 
'--rtlib=compiler-rt'


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D17453: [Driver] Enable --rtlib option for MSVC target

2016-03-14 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL263422: [Driver] Enable --rtlib option for MSVC target 
(authored by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D17453?vs=50260=50579#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D17453

Files:
  cfe/trunk/lib/Driver/Tools.cpp
  cfe/trunk/test/Driver/msvc-compiler-rt.c
  cfe/trunk/test/Driver/nostdlib.c

Index: cfe/trunk/test/Driver/nostdlib.c
===
--- cfe/trunk/test/Driver/nostdlib.c
+++ cfe/trunk/test/Driver/nostdlib.c
@@ -22,6 +22,10 @@
 // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \
 // RUN:   | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s
 //
+// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt 
-### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib 
-### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+//
 // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: 
'--rtlib=compiler-rt'
 // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
 // CHECK-LINUX-NOSTDLIB-NOT: 
"{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a"
+// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: 
'--rtlib=compiler-rt'
Index: cfe/trunk/test/Driver/msvc-compiler-rt.c
===
--- cfe/trunk/test/Driver/msvc-compiler-rt.c
+++ cfe/trunk/test/Driver/msvc-compiler-rt.c
@@ -0,0 +1,5 @@
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 
| FileCheck %s -check-prefix MSVC-COMPILER-RT
+// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | 
FileCheck %s -check-prefix CHECK-ERROR
+
+// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}"
+// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC'
Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ cfe/trunk/lib/Driver/Tools.cpp
@@ -8948,7 +8948,16 @@
 }
 break;
   case ToolChain::RLT_Libgcc:
-AddLibgcc(TC.getTriple(), D, CmdArgs, Args);
+// Make sure libgcc is not used under MSVC environment by default
+if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
+  // Issue error diagnostic if libgcc is explicitly specified
+  // through command line as --rtlib option argument.
+  if (Args.hasArg(options::OPT_rtlib_EQ)) {
+TC.getDriver().Diag(diag::err_drv_unsupported_rtlib_for_platform)
+<< Args.getLastArg(options::OPT_rtlib_EQ)->getValue() << "MSVC";
+  }
+} else
+  AddLibgcc(TC.getTriple(), D, CmdArgs, Args);
 break;
   }
 }
@@ -9754,6 +9763,12 @@
 }
   }
 
+  // Add compiler-rt lib in case if it was explicitly
+  // specified as an argument for --rtlib option.
+  if (!Args.hasArg(options::OPT_nostdlib)) {
+AddRunTimeLibs(TC, TC.getDriver(), CmdArgs, Args);
+  }
+
   // Add filenames, libraries, and other linker inputs.
   for (const auto  : Inputs) {
 if (Input.isFilename()) {


Index: cfe/trunk/test/Driver/nostdlib.c
===
--- cfe/trunk/test/Driver/nostdlib.c
+++ cfe/trunk/test/Driver/nostdlib.c
@@ -22,6 +22,10 @@
 // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \
 // RUN:   | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s
 //
+// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB
+//
 // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt'
 // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
 // CHECK-LINUX-NOSTDLIB-NOT: "{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a"
+// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt'
Index: cfe/trunk/test/Driver/msvc-compiler-rt.c
===
--- cfe/trunk/test/Driver/msvc-compiler-rt.c
+++ cfe/trunk/test/Driver/msvc-compiler-rt.c
@@ -0,0 +1,5 @@
+// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix MSVC-COMPILER-RT
+// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | FileCheck %s -check-prefix CHECK-ERROR
+
+// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}"
+// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC'
Index: cfe/trunk/lib/Driver/Tools.cpp
===
--- cfe/trunk/lib/Driver/Tools.cpp
+++ 

Re: [PATCH] D13980: Add "x87" in x86 target feature map

2016-02-24 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hi,
The related LLVM patch (http://reviews.llvm.org/D13979) was approved. Is this 
patch ok for commit?


http://reviews.llvm.org/D13980



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r260376 - [X86] Fix stack alignment for MCU target (Clang part), by Anton Nadolskiy.

2016-02-10 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Wed Feb 10 05:58:46 2016
New Revision: 260376

URL: http://llvm.org/viewvc/llvm-project?rev=260376=rev
Log:
[X86] Fix stack alignment for MCU target (Clang part), by Anton Nadolskiy.

This patch fixes stack alignments for MCU (should be aligned to 4 bytes).

Differential Revision: http://reviews.llvm.org/D15647


Added:
cfe/trunk/test/CodeGen/iamcu-abi.c   (with props)
Modified:
cfe/trunk/include/clang/Basic/TargetInfo.h
cfe/trunk/lib/AST/ASTContext.cpp
cfe/trunk/lib/Basic/Targets.cpp

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=260376=260375=260376=diff
==
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Wed Feb 10 05:58:46 2016
@@ -940,6 +940,9 @@ public:
 return false;
   }
 
+  /// \brief Whether target allows to overalign ABI-specified prefered 
alignment
+  virtual bool allowsLargerPreferedTypeAlignment() const { return true; }
+
 protected:
   virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
 return PointerWidth;

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=260376=260375=260376=diff
==
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Wed Feb 10 05:58:46 2016
@@ -1904,8 +1904,8 @@ unsigned ASTContext::getPreferredTypeAli
   if (T->isMemberPointerType())
 return getPreferredTypeAlign(getPointerDiffType().getTypePtr());
 
-  if (Target->getTriple().getArch() == llvm::Triple::xcore)
-return ABIAlign;  // Never overalign on XCore.
+  if (!Target->allowsLargerPreferedTypeAlignment())
+return ABIAlign;
 
   // Double and long long should be naturally aligned if possible.
   if (const ComplexType *CT = T->getAs())

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=260376=260375=260376=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Wed Feb 10 05:58:46 2016
@@ -3807,6 +3807,8 @@ public:
   : WindowsX86_32TargetInfo(Triple) {
 LongDoubleWidth = LongDoubleAlign = 64;
 LongDoubleFormat = ::APFloat::IEEEdouble;
+DataLayoutString =
+"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32";
   }
   void getTargetDefines(const LangOptions ,
 MacroBuilder ) const override {
@@ -3926,6 +3928,10 @@ public:
 Builder.defineMacro("__iamcu");
 Builder.defineMacro("__iamcu__");
   }
+
+  bool allowsLargerPreferedTypeAlignment() const override {
+return false;
+  }
 };
 
 // RTEMS Target
@@ -7491,6 +7497,9 @@ public:
 // R0=ExceptionPointerRegister R1=ExceptionSelectorRegister
 return (RegNo < 2)? RegNo : -1;
   }
+  bool allowsLargerPreferedTypeAlignment() const override {
+return false;
+  }
 };
 
 const Builtin::Info XCoreTargetInfo::BuiltinInfo[] = {

Added: cfe/trunk/test/CodeGen/iamcu-abi.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/iamcu-abi.c?rev=260376=auto
==
--- cfe/trunk/test/CodeGen/iamcu-abi.c (added)
+++ cfe/trunk/test/CodeGen/iamcu-abi.c Wed Feb 10 05:58:46 2016
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple i386-pc-elfiamcu -emit-llvm -o - %s | FileCheck %s
+
+// CHECK: target datalayout = 
"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"
+// CHECK: target triple = "i386-pc-elfiamcu"
+
+
+void food(double *d);
+void fooll(long long *ll);
+void fooull(unsigned long long *ull);
+void foold(long double *ld);
+
+// CHECK-LABEL: define void @testdouble()
+// CHECK: alloca double, align 4
+void testdouble() {
+  double d = 2.0;
+  food();
+}
+
+// CHECK-LABEL: define void @testlonglong()
+// CHECK: alloca i64, align 4
+void testlonglong() {
+  long long ll = 2;
+  fooll();
+}
+
+// CHECK-LABEL: define void @testunsignedlonglong()
+// CHECK: alloca i64, align 4
+void testunsignedlonglong() {
+  unsigned long long ull = 2;
+  fooull();
+}
+
+// CHECK-LABEL: define void @testlongdouble()
+// CHECK: alloca double, align 4
+void testlongdouble() {
+  long double ld = 2.0;
+  foold();
+}

Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c
--
svn:eol-style = native

Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c
--
svn:keywords = Author Date Id Rev URL

Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c
--
svn:mime-type = text/plain



Re: [PATCH] D15647: [X86] Fix stack alignment for MCU target (Clang part)

2016-02-10 Thread Andrey Turetskiy via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL260376: [X86] Fix stack alignment for MCU target (Clang 
part), by Anton Nadolskiy. (authored by aturetsk).

Changed prior to commit:
  http://reviews.llvm.org/D15647?vs=43788=47440#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D15647

Files:
  cfe/trunk/include/clang/Basic/TargetInfo.h
  cfe/trunk/lib/AST/ASTContext.cpp
  cfe/trunk/lib/Basic/Targets.cpp
  cfe/trunk/test/CodeGen/iamcu-abi.c

Index: cfe/trunk/include/clang/Basic/TargetInfo.h
===
--- cfe/trunk/include/clang/Basic/TargetInfo.h
+++ cfe/trunk/include/clang/Basic/TargetInfo.h
@@ -940,6 +940,9 @@
 return false;
   }
 
+  /// \brief Whether target allows to overalign ABI-specified prefered alignment
+  virtual bool allowsLargerPreferedTypeAlignment() const { return true; }
+
 protected:
   virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
 return PointerWidth;
Index: cfe/trunk/test/CodeGen/iamcu-abi.c
===
--- cfe/trunk/test/CodeGen/iamcu-abi.c
+++ cfe/trunk/test/CodeGen/iamcu-abi.c
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple i386-pc-elfiamcu -emit-llvm -o - %s | FileCheck %s
+
+// CHECK: target datalayout = "e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"
+// CHECK: target triple = "i386-pc-elfiamcu"
+
+
+void food(double *d);
+void fooll(long long *ll);
+void fooull(unsigned long long *ull);
+void foold(long double *ld);
+
+// CHECK-LABEL: define void @testdouble()
+// CHECK: alloca double, align 4
+void testdouble() {
+  double d = 2.0;
+  food();
+}
+
+// CHECK-LABEL: define void @testlonglong()
+// CHECK: alloca i64, align 4
+void testlonglong() {
+  long long ll = 2;
+  fooll();
+}
+
+// CHECK-LABEL: define void @testunsignedlonglong()
+// CHECK: alloca i64, align 4
+void testunsignedlonglong() {
+  unsigned long long ull = 2;
+  fooull();	
+}
+
+// CHECK-LABEL: define void @testlongdouble()
+// CHECK: alloca double, align 4
+void testlongdouble() {
+  long double ld = 2.0;
+  foold();
+}
Index: cfe/trunk/lib/Basic/Targets.cpp
===
--- cfe/trunk/lib/Basic/Targets.cpp
+++ cfe/trunk/lib/Basic/Targets.cpp
@@ -3807,6 +3807,8 @@
   : WindowsX86_32TargetInfo(Triple) {
 LongDoubleWidth = LongDoubleAlign = 64;
 LongDoubleFormat = ::APFloat::IEEEdouble;
+DataLayoutString =
+"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32";
   }
   void getTargetDefines(const LangOptions ,
 MacroBuilder ) const override {
@@ -3926,6 +3928,10 @@
 Builder.defineMacro("__iamcu");
 Builder.defineMacro("__iamcu__");
   }
+
+  bool allowsLargerPreferedTypeAlignment() const override {
+return false;
+  }
 };
 
 // RTEMS Target
@@ -7491,6 +7497,9 @@
 // R0=ExceptionPointerRegister R1=ExceptionSelectorRegister
 return (RegNo < 2)? RegNo : -1;
   }
+  bool allowsLargerPreferedTypeAlignment() const override {
+return false;
+  }
 };
 
 const Builtin::Info XCoreTargetInfo::BuiltinInfo[] = {
Index: cfe/trunk/lib/AST/ASTContext.cpp
===
--- cfe/trunk/lib/AST/ASTContext.cpp
+++ cfe/trunk/lib/AST/ASTContext.cpp
@@ -1904,8 +1904,8 @@
   if (T->isMemberPointerType())
 return getPreferredTypeAlign(getPointerDiffType().getTypePtr());
 
-  if (Target->getTriple().getArch() == llvm::Triple::xcore)
-return ABIAlign;  // Never overalign on XCore.
+  if (!Target->allowsLargerPreferedTypeAlignment())
+return ABIAlign;
 
   // Double and long long should be naturally aligned if possible.
   if (const ComplexType *CT = T->getAs())
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r260379 - Reapply the patch of r260376.

2016-02-10 Thread Andrey Turetskiy via cfe-commits
Author: aturetsk
Date: Wed Feb 10 06:56:10 2016
New Revision: 260379

URL: http://llvm.org/viewvc/llvm-project?rev=260379=rev
Log:
Reapply the patch of r260376.


Modified:
cfe/trunk/lib/Basic/Targets.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=260379=260378=260379=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Wed Feb 10 06:56:10 2016
@@ -3807,8 +3807,6 @@ public:
   : WindowsX86_32TargetInfo(Triple) {
 LongDoubleWidth = LongDoubleAlign = 64;
 LongDoubleFormat = ::APFloat::IEEEdouble;
-DataLayoutString =
-"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32";
   }
   void getTargetDefines(const LangOptions ,
 MacroBuilder ) const override {
@@ -3913,6 +3911,8 @@ public:
   MCUX86_32TargetInfo(const llvm::Triple ) : X86_32TargetInfo(Triple) {
 LongDoubleWidth = 64;
 LongDoubleFormat = ::APFloat::IEEEdouble;
+DataLayoutString =
+"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32";
 UserLabelPrefix = "";
 WIntType = UnsignedInt;
   }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-12-01 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 41511.
aturetsk added a comment.

Enable X87 back for all X86 processors.


http://reviews.llvm.org/D13980

Files:
  lib/Basic/Targets.cpp
  test/CodeGen/attr-target-x86-mmx.c
  test/CodeGen/attr-target-x86.c

Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
+// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
+// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
Index: test/CodeGen/attr-target-x86-mmx.c
===
--- test/CodeGen/attr-target-x86-mmx.c
+++ test/CodeGen/attr-target-x86-mmx.c
@@ -19,4 +19,4 @@
   _mm_srai_pi32(a, c);
 }
 
-// CHECK: "target-features"="+mmx,+sse"
+// CHECK: "target-features"="+mmx,+sse,+x87"
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -2542,6 +2542,9 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
+  // Enable X87 for all X86 processors.
+  setFeatureEnabledImpl(Features, "x87", true);
+
   switch (getCPUKind(CPU)) {
   case CK_Generic:
   case CK_i386:


Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = 

Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-12-01 Thread Andrey Turetskiy via cfe-commits
aturetsk added inline comments.


Comment at: lib/Basic/Targets.cpp:2551
@@ -2547,3 +2550,3 @@
   case CK_i386:
   case CK_i486:
   case CK_i586:

"x87 instructions probably work" is more like it, and having feature x87 
disabled would mean "x87 instructions definitely don't work". That's what I 
intended. If feature soft float is specified it takes precedence over feature 
x87 causing compiler to generate calls instead of X87 instructions.
Support of -m80387/-mno-80387 seems to be a good thing to have in Clang to be 
compatible with GCC (although briefly looking at GCC's sources these options 
just seem to be synonyms to -mhard-float/-msoft-float). I can add the flags, 
but I think that's better to be done in a separate patch.


http://reviews.llvm.org/D13980



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-11-30 Thread Andrey Turetskiy via cfe-commits
aturetsk added inline comments.


Comment at: lib/Basic/Targets.cpp:2548
@@ +2547,3 @@
+  // All X86 processors but i386 have X87.
+  if (Kind != CK_i386)
+setFeatureEnabledImpl(Features, "x87", true);

rsmith wrote:
> What about `CK_Generic`? Also, if `CK_i486` can be used for the 486SX, we 
> need to exclude it here too. It looks (from wikipedia) like all the "WinChip" 
> flavours of 486 have an x87 unit, but it'd be nice if someone could confirm 
> that. Maybe we should have separate `CPUKind`s for 486 SX versus 486 DX.
Before this changeset clang would generate x87 instructions for Generic, i386 
and i486. So one can say they had FeatureX87 enabled implicitly. If that was ok 
formerly why do we want to change that now? Wouldn't it be better to keep 
clang's behavior unchanged?


http://reviews.llvm.org/D13980



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D14146: Introduction of -miamcu option

2015-11-27 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 41309.
aturetsk added a comment.

Extended to take into account recent MCU related changes


http://reviews.llvm.org/D14146

Files:
  include/clang/Driver/Options.td
  lib/Driver/Tools.cpp
  lib/Driver/Tools.h
  test/Driver/miamcu-opt.c
  test/Driver/miamcu-opt.s

Index: test/Driver/miamcu-opt.s
===
--- /dev/null
+++ test/Driver/miamcu-opt.s
@@ -0,0 +1,9 @@
+// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32
+// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64
+
+// M32-NOT: error: unsupported option '-miamcu'
+// M32: "-cc1as"
+// M32: "-triple" "i586-intel-elfiamcu"
+
+// M64: error: unsupported option '-miamcu'
+// M64: "-cc1as"
Index: test/Driver/miamcu-opt.c
===
--- /dev/null
+++ test/Driver/miamcu-opt.c
@@ -0,0 +1,11 @@
+// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32
+// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64
+
+// M32-NOT: error: unsupported option '-miamcu'
+// M32: "-cc1"
+// M32: "-triple" "i586-intel-elfiamcu"
+// M32: "-mfloat-abi" "soft"
+// M32: "-mstack-alignment=4"
+
+// M64: error: unsupported option '-miamcu'
+// M64: "-cc1"
Index: lib/Driver/Tools.h
===
--- lib/Driver/Tools.h
+++ lib/Driver/Tools.h
@@ -122,6 +122,8 @@
   : Tool("clang::as", "clang integrated assembler", TC, RF_Full) {}
   void AddMIPSTargetArgs(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const;
+  void AddX86TargetArgs(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const;
   bool hasGoodDiagnostics() const override { return true; }
   bool hasIntegratedAssembler() const override { return false; }
   bool hasIntegratedCPP() const override { return false; }
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1994,6 +1994,18 @@
   << A->getOption().getName() << Value;
 }
   }
+
+  // If -miamcu is set then set flags to support MCU ABI and use MCU triple.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+if (getToolChain().getArch() != llvm::Triple::x86)
+  getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+  << "-miamcu";
+CmdArgs.push_back("-triple");
+CmdArgs.push_back("i586-intel-elfiamcu");
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,
@@ -5707,6 +5719,18 @@
   CmdArgs.push_back(ABIName.data());
 }
 
+void ClangAs::AddX86TargetArgs(const ArgList ,
+   ArgStringList ) const {
+  // If -miamcu is set then use MCU triple.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+if (getToolChain().getArch() != llvm::Triple::x86)
+  getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+  << "-miamcu";
+CmdArgs.push_back("-triple");
+CmdArgs.push_back("i586-intel-elfiamcu");
+  }
+}
+
 void ClangAs::ConstructJob(Compilation , const JobAction ,
const InputInfo , const InputInfoList ,
const ArgList ,
@@ -5847,6 +5871,11 @@
   case llvm::Triple::mips64el:
 AddMIPSTargetArgs(Args, CmdArgs);
 break;
+
+  case llvm::Triple::x86:
+  case llvm::Triple::x86_64:
+AddX86TargetArgs(Args, CmdArgs);
+break;
   }
 
   // Consume all the warning flags. Usually this would be handled more
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1226,6 +1226,8 @@
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>,
+  HelpText<"Use Intel MCU ABI.">;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group;
 def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group;
 def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-11-25 Thread Andrey Turetskiy via cfe-commits
aturetsk updated this revision to Diff 41137.
aturetsk added a comment.

Use getCPUKind once


http://reviews.llvm.org/D13980

Files:
  lib/Basic/Targets.cpp
  test/CodeGen/attr-target-x86-mmx.c
  test/CodeGen/attr-target-x86.c

Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -18,6 +18,8 @@
 
 int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
 
+int __attribute__((target("arch=i386"))) qix(int a) { return 4; }
+
 // Check that we emit the additional subtarget and cpu features for foo and 
not for baz or bar.
 // CHECK: baz{{.*}} #0
 // CHECK: foo{{.*}} #1
@@ -31,9 +33,11 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: qix{{.*}} #6
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
+// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
+// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
+// CHECK: #6 = {{.*}}"target-cpu"="i386" "target-features"="+mmx,+sse,+sse2"
Index: test/CodeGen/attr-target-x86-mmx.c
===
--- test/CodeGen/attr-target-x86-mmx.c
+++ test/CodeGen/attr-target-x86-mmx.c
@@ -19,4 +19,4 @@
   _mm_srai_pi32(a, c);
 }
 
-// CHECK: "target-features"="+mmx,+sse"
+// CHECK: "target-features"="+mmx,+sse,+x87"
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -2542,7 +2542,13 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
-  switch (getCPUKind(CPU)) {
+  CPUKind Kind = getCPUKind(CPU);
+
+  // All X86 processors but i386 have X87.
+  if (Kind != CK_i386)
+setFeatureEnabledImpl(Features, "x87", true);
+
+  switch (Kind) {
   case CK_Generic:
   case CK_i386:
   case CK_i486:


Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -18,6 +18,8 @@
 
 int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
 
+int __attribute__((target("arch=i386"))) qix(int a) { return 4; }
+
 // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
 // CHECK: baz{{.*}} #0
 // CHECK: foo{{.*}} #1
@@ -31,9 +33,11 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 

Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-11-25 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

> Are there any of the intrinsics in the headers that also depend on x87?


Not that I could find.



Comment at: lib/Basic/Targets.cpp:2545-2546
@@ -2544,2 +2544,4 @@
 
-  switch (getCPUKind(CPU)) {
+  CPUKind Kind = getCPUKind(CPU);
+
+  // All X86 processors but i386 have X87.

Done.


http://reviews.llvm.org/D13980



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13980: Add "x87" in x86 target feature map

2015-11-19 Thread Andrey Turetskiy via cfe-commits
aturetsk added a comment.

Hello Richard,
Thank for the review.



Comment at: lib/Basic/Targets.cpp:2538-2539
@@ -2537,1 +2537,4 @@
 
+  // All X86 processors but i386 have X87.
+  if (getCPUKind(CPU) != CK_i386)
+setFeatureEnabledImpl(Features, "x87", true);

You are right. Fixed.


http://reviews.llvm.org/D13980



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D14146: Introduction of -miamcu option

2015-10-29 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added a reviewer: rsmith.
aturetsk added subscribers: cfe-commits, mkuper, DavidKreitzer, anadolskiy, 
zansari.

Add initial support of -miamcu option which triggers MCU ABI.

http://reviews.llvm.org/D14146

Files:
  include/clang/Driver/Options.td
  lib/Driver/Tools.cpp
  test/Driver/iamcu-abi.c

Index: test/Driver/iamcu-abi.c
===
--- /dev/null
+++ test/Driver/iamcu-abi.c
@@ -0,0 +1,5 @@
+// RUN: %clang -target i386-unknown-linux -m32 -miamcu %s -### -o %t.o 2>&1 \
+// RUN:   | FileCheck %s
+
+// CHECK: "-mfloat-abi" "soft"
+// CHECK: "-mstack-alignment=4"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1907,6 +1907,16 @@
   << A->getOption().getName() << Value;
 }
   }
+
+  // If -miamcu is set then set flags to support MCU ABI.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+if (getToolChain().getArch() != llvm::Triple::x86)
+  getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+  << "-miamcu";
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1223,6 +1223,8 @@
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, 
CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, 
CoreOption]>,
+  HelpText<"Use Intel MCU ABI.">;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, 
Group;
 def malign_loops_EQ : Joined<["-"], "malign-loops=">, 
Group;
 def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, 
Group;


Index: test/Driver/iamcu-abi.c
===
--- /dev/null
+++ test/Driver/iamcu-abi.c
@@ -0,0 +1,5 @@
+// RUN: %clang -target i386-unknown-linux -m32 -miamcu %s -### -o %t.o 2>&1 \
+// RUN:   | FileCheck %s
+
+// CHECK: "-mfloat-abi" "soft"
+// CHECK: "-mstack-alignment=4"
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1907,6 +1907,16 @@
   << A->getOption().getName() << Value;
 }
   }
+
+  // If -miamcu is set then set flags to support MCU ABI.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+if (getToolChain().getArch() != llvm::Triple::x86)
+  getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+  << "-miamcu";
+CmdArgs.push_back("-mfloat-abi");
+CmdArgs.push_back("soft");
+CmdArgs.push_back("-mstack-alignment=4");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList ,
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1223,6 +1223,8 @@
 def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group;
+def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>,
+  HelpText<"Use Intel MCU ABI.">;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group;
 def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group;
 def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D13980: Add "x87" in x86 target feature map

2015-10-22 Thread Andrey Turetskiy via cfe-commits
aturetsk created this revision.
aturetsk added a reviewer: rsmith.
aturetsk added a subscriber: cfe-commits.

Add 'x87' in x86 target feature map

http://reviews.llvm.org/D13980

Files:
  lib/Basic/Targets.cpp
  test/CodeGen/attr-target-x86-mmx.c
  test/CodeGen/attr-target-x86.c

Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
+// CHECK: #3 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
+// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" 
"target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
+// CHECK: #5 = {{.*}}"target-cpu"="x86-64" 
"target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
Index: test/CodeGen/attr-target-x86-mmx.c
===
--- test/CodeGen/attr-target-x86-mmx.c
+++ test/CodeGen/attr-target-x86-mmx.c
@@ -19,4 +19,4 @@
   _mm_srai_pi32(a, c);
 }
 
-// CHECK: "target-features"="+mmx,+sse"
+// CHECK: "target-features"="+mmx,+sse,+x87"
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -2513,6 +2513,9 @@
   if (getTriple().getArch() == llvm::Triple::x86_64)
 setFeatureEnabledImpl(Features, "sse2", true);
 
+  // X86 always has X87.
+  setFeatureEnabledImpl(Features, "x87", true);
+
   switch (getCPUKind(CPU)) {
   case CK_Generic:
   case CK_i386:


Index: test/CodeGen/attr-target-x86.c
===
--- test/CodeGen/attr-target-x86.c
+++ test/CodeGen/attr-target-x86.c
@@ -31,9 +31,9 @@
 // CHECK: qux{{.*}} #1
 // CHECK: qax{{.*}} #4
 // CHECK: qq{{.*}} #5
-// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2"
-// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt"
-// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
-// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3"
-// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes"
-// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx"
+// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
+// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
+// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"