diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -180,7 +180,8 @@ Mesa, SUSE, OpenEmbedded, - LastVendorType = OpenEmbedded + RedHat, + LastVendorType = RedHat }; enum OSType { UnknownOS, @@ -563,12 +564,22 @@ bool isOSUnknown() const { return getOS() == Triple::UnknownOS; } bool isGNUEnvironment() const { - EnvironmentType Env = getEnvironment(); - return Env == Triple::GNU || Env == Triple::GNUABIN32 || - Env == Triple::GNUABI64 || Env == Triple::GNUEABI || - Env == Triple::GNUEABIHF || Env == Triple::GNUF32 || - Env == Triple::GNUF64 || Env == Triple::GNUSF || - Env == Triple::GNUX32; + switch (getEnvironment()) { + case Triple::GNU: + case Triple::GNUABIN32: + case Triple::GNUABI64: + case Triple::GNUEABI: + case Triple::GNUEABIHF: + case Triple::GNUF32: + case Triple::GNUF64: + case Triple::GNUSF: + case Triple::GNUX32: + return true; + case Triple::UnknownEnvironment: + return getVendor() == RedHat; + default: + return false; + } } bool isOSContiki() const { diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -196,6 +196,7 @@ case PC: return "pc"; case SCEI: return "scei"; case SUSE: return "suse"; + case RedHat: return "redhat"; } llvm_unreachable("Invalid VendorType!"); @@ -554,6 +555,7 @@ .Case("mesa", Triple::Mesa) .Case("suse", Triple::SUSE) .Case("oe", Triple::OpenEmbedded) + .Case("redhat", Triple::RedHat) .Default(Triple::UnknownVendor); } diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp --- a/llvm/unittests/TargetParser/TripleTest.cpp +++ b/llvm/unittests/TargetParser/TripleTest.cpp @@ -145,6 +145,12 @@ EXPECT_EQ(Triple::SCEI, T.getVendor()); EXPECT_EQ(Triple::PS5, T.getOS()); + T = Triple("x86_64-redhat-linux"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::RedHat, T.getVendor()); + EXPECT_EQ(Triple::Linux, T.getOS()); + EXPECT_EQ(true, T.isGNUEnvironment()); + T = Triple("powerpc-ibm-aix"); EXPECT_EQ(Triple::ppc, T.getArch()); EXPECT_EQ(Triple::IBM, T.getVendor());