[X86] Make elfiamcu an OS, not an environment.
authorMichael Kuperstein <michael.m.kuperstein@intel.com>
Tue, 27 Oct 2015 07:23:59 +0000 (07:23 +0000)
committerMichael Kuperstein <michael.m.kuperstein@intel.com>
Tue, 27 Oct 2015 07:23:59 +0000 (07:23 +0000)
GNU tools require elfiamcu to take up the entire OS field, so, e.g.
i?86-*-linux-elfiamcu is not considered a legal triple.
Make us compatible.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251390 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Triple.h
lib/Support/Triple.cpp
lib/Target/X86/X86Subtarget.h
test/CodeGen/X86/mcu-abi.ll
unittests/ADT/TripleTest.cpp

index bb0e05c..5f3742c 100644 (file)
@@ -155,7 +155,8 @@ public:
     NVCL,       // NVIDIA OpenCL
     AMDHSA,     // AMD HSA Runtime
     PS4,
-    LastOSType = PS4
+    ELFIAMCU,
+    LastOSType = ELFIAMCU
   };
   enum EnvironmentType {
     UnknownEnvironment,
@@ -174,8 +175,7 @@ public:
     Cygnus,
     AMDOpenCL,
     CoreCLR,
-    ELFIAMCU,
-    LastEnvironmentType = ELFIAMCU
+    LastEnvironmentType = CoreCLR
   };
   enum ObjectFormatType {
     UnknownObjectFormat,
@@ -432,8 +432,8 @@ public:
     return getOS() == Triple::Bitrig;
   }
 
-  bool isEnvironmentIAMCU() const {
-    return getEnvironment() == Triple::ELFIAMCU;
+  bool isOSIAMCU() const {
+    return getOS() == Triple::ELFIAMCU;
   }
 
   bool isWindowsMSVCEnvironment() const {
index f3b3de7..142a9b9 100644 (file)
@@ -181,6 +181,7 @@ const char *Triple::getOSTypeName(OSType Kind) {
   case NVCL: return "nvcl";
   case AMDHSA: return "amdhsa";
   case PS4: return "ps4";
+  case ELFIAMCU: return "elfiamcu";
   }
 
   llvm_unreachable("Invalid OSType");
@@ -202,7 +203,6 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
   case Cygnus: return "cygnus";
   case AMDOpenCL: return "amdopencl";
   case CoreCLR: return "coreclr";
-  case ELFIAMCU: return "elfiamcu";
   }
 
   llvm_unreachable("Invalid EnvironmentType!");
@@ -436,6 +436,7 @@ static Triple::OSType parseOS(StringRef OSName) {
     .StartsWith("nvcl", Triple::NVCL)
     .StartsWith("amdhsa", Triple::AMDHSA)
     .StartsWith("ps4", Triple::PS4)
+    .StartsWith("elfiamcu", Triple::ELFIAMCU)
     .Default(Triple::UnknownOS);
 }
 
@@ -454,7 +455,6 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
     .StartsWith("cygnus", Triple::Cygnus)
     .StartsWith("amdopencl", Triple::AMDOpenCL)
     .StartsWith("coreclr", Triple::CoreCLR)
-    .StartsWith("elfiamcu", Triple::ELFIAMCU)
     .Default(Triple::UnknownEnvironment);
 }
 
index c1842e1..85d4d1a 100644 (file)
@@ -418,7 +418,7 @@ public:
   bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); }
   bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); }
   bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }
-  bool isTargetMCU() const { return TargetTriple.isEnvironmentIAMCU(); }
+  bool isTargetMCU() const { return TargetTriple.isOSIAMCU(); }
 
   bool isTargetWindowsMSVC() const {
     return TargetTriple.isWindowsMSVCEnvironment();
index 4da9f3d..6dc2c99 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=i686-pc-linux-elfiamcu | FileCheck %s
+; RUN: llc < %s -mtriple=i686-pc-elfiamcu | FileCheck %s
 
 ; CHECK-LABEL: test_lib_args:
 ; CHECK: movl %edx, %eax
index 015eb85..97635ca 100644 (file)
@@ -81,11 +81,11 @@ TEST(TripleTest, ParsedIDs) {
   EXPECT_EQ(Triple::Darwin, T.getOS());
   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
 
-  T = Triple("i386-pc-linux-elfiamcu");
+  T = Triple("i386-pc-elfiamcu");
   EXPECT_EQ(Triple::x86, T.getArch());
   EXPECT_EQ(Triple::PC, T.getVendor());
-  EXPECT_EQ(Triple::Linux, T.getOS());
-  EXPECT_EQ(Triple::ELFIAMCU, T.getEnvironment());
+  EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
 
   T = Triple("x86_64-pc-linux-gnu");
   EXPECT_EQ(Triple::x86_64, T.getArch());