Index: ADT/TripleTest.cpp =================================================================== --- ADT/TripleTest.cpp +++ ADT/TripleTest.cpp @@ -1000,6 +1000,15 @@ EXPECT_EQ((unsigned)7, Major); EXPECT_EQ((unsigned)0, Minor); EXPECT_EQ((unsigned)0, Micro); + EXPECT_FALSE(T.isSimulatorEnvironment()); + + T = Triple("x86_64-apple-ios10.3-simulator"); + EXPECT_TRUE(T.isiOS()); + T.getiOSVersion(Major, Minor, Micro); + EXPECT_EQ((unsigned)10, Major); + EXPECT_EQ((unsigned)3, Minor); + EXPECT_EQ((unsigned)0, Micro); + EXPECT_TRUE(T.isSimulatorEnvironment()); } TEST(TripleTest, FileFormat) { Index: Support/Triple.cpp =================================================================== --- Support/Triple.cpp +++ Support/Triple.cpp @@ -235,6 +235,7 @@ case AMDOpenCL: return "amdopencl"; case CoreCLR: return "coreclr"; case OpenCL: return "opencl"; + case Simulator: return "simulator"; } llvm_unreachable("Invalid EnvironmentType!"); @@ -525,6 +526,7 @@ .StartsWith("amdopencl", Triple::AMDOpenCL) .StartsWith("coreclr", Triple::CoreCLR) .StartsWith("opencl", Triple::OpenCL) + .StartsWith("simulator", Triple::Simulator) .Default(Triple::UnknownEnvironment); } Index: llvm/ADT/Triple.h =================================================================== --- llvm/ADT/Triple.h +++ llvm/ADT/Triple.h @@ -205,7 +205,8 @@ AMDOpenCL, CoreCLR, OpenCL, - LastEnvironmentType = OpenCL + Simulator, // Simulator variants of other systems, e.g., Apple's iOS + LastEnvironmentType = Simulator }; enum ObjectFormatType { UnknownObjectFormat, @@ -470,6 +471,10 @@ return isMacOSX() || isiOS() || isWatchOS(); } + bool isSimulatorEnvironment() const { + return getEnvironment() == Triple::Simulator; + } + bool isOSNetBSD() const { return getOS() == Triple::NetBSD; }