diff options
| -rw-r--r-- | llvm/include/llvm/ADT/Triple.h | 48 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.h | 24 | 
2 files changed, 41 insertions, 31 deletions
diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h index eabb7c3f581..3a20aad3868 100644 --- a/llvm/include/llvm/ADT/Triple.h +++ b/llvm/include/llvm/ADT/Triple.h @@ -284,6 +284,22 @@ public:      return false;    } +  /// isMacOSXVersionLT - Comparison function for checking OS X version +  /// compatibility, which handles supporting skewed version numbering schemes +  /// used by the "darwin" triples. +  unsigned isMacOSXVersionLT(unsigned Major, unsigned Minor = 0, +			     unsigned Micro = 0) const { +    assert(isMacOSX() && "Not an OS X triple!"); + +    // If this is OS X, expect a sane version number. +    if (getOS() == Triple::MacOSX) +      return isOSVersionLT(Major, Minor, Micro); + +    // Otherwise, compare to the "Darwin" number. +    assert(Major == 10 && "Unexpected major version"); +    return isOSVersionLT(Minor + 4, Micro, 0); +  } +    /// isMacOSX - Is this a Mac OS X triple. For legacy reasons, we support both    /// "darwin" and "osx" as OS X triples.    bool isMacOSX() const { @@ -295,26 +311,30 @@ public:      return isMacOSX() || getOS() == Triple::IOS;    } +  /// \brief Tests for either Cygwin or MinGW OS +  bool isOSCygMing() const { +    return getOS() == Triple::Cygwin || getOS() == Triple::MinGW32; +  } +    /// isOSWindows - Is this a "Windows" OS.    bool isOSWindows() const { -    return getOS() == Triple::Win32 || getOS() == Triple::Cygwin || -      getOS() == Triple::MinGW32; +    return getOS() == Triple::Win32 || isOSCygMing();    } -  /// isMacOSXVersionLT - Comparison function for checking OS X version -  /// compatibility, which handles supporting skewed version numbering schemes -  /// used by the "darwin" triples. -  unsigned isMacOSXVersionLT(unsigned Major, unsigned Minor = 0, -			     unsigned Micro = 0) const { -    assert(isMacOSX() && "Not an OS X triple!"); +  /// \brief Tests whether the OS uses the ELF binary format. +  bool isOSBinFormatELF() const { +    return !isOSDarwin() && !isOSWindows(); +  } -    // If this is OS X, expect a sane version number. -    if (getOS() == Triple::MacOSX) -      return isOSVersionLT(Major, Minor, Micro); +  /// \brief Tests whether the OS uses the COFF binary format. +  bool isOSBinFormatCOFF() const { +    return isOSWindows(); +  } -    // Otherwise, compare to the "Darwin" number. -    assert(Major == 10 && "Unexpected major version"); -    return isOSVersionLT(Minor + 4, Micro, 0); +  /// \brief Tests whether the environment is MachO. +  // FIXME: Should this be an OSBinFormat predicate? +  bool isEnvironmentMachO() const { +    return getEnvironment() == Triple::MachO || isOSDarwin();    }    /// @} diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index 347da953039..f930806be6c 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -229,38 +229,28 @@ public:    // ELF is a reasonably sane default and the only other X86 targets we    // support are Darwin and Windows. Just use "not those". -  bool isTargetELF() const { -    return !isTargetDarwin() && !isTargetWindows() && !isTargetCygMing(); -  } +  bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); }    bool isTargetLinux() const { return TargetTriple.getOS() == Triple::Linux; }    bool isTargetNaCl() const {      return TargetTriple.getOS() == Triple::NativeClient;    }    bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); }    bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); } -    bool isTargetWindows() const { return TargetTriple.getOS() == Triple::Win32; }    bool isTargetMingw() const { return TargetTriple.getOS() == Triple::MinGW32; }    bool isTargetCygwin() const { return TargetTriple.getOS() == Triple::Cygwin; } -  bool isTargetCygMing() const { -    return isTargetMingw() || isTargetCygwin(); -  } - -  /// isTargetCOFF - Return true if this is any COFF/Windows target variant. -  bool isTargetCOFF() const { -    return isTargetMingw() || isTargetCygwin() || isTargetWindows(); -  } +  bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); } +  bool isTargetCOFF() const { return TargetTriple.isOSBinFormatCOFF(); } +  bool isTargetEnvMacho() const { return TargetTriple.isEnvironmentMachO(); }    bool isTargetWin64() const {      // FIXME: x86_64-cygwin has not been released yet. -    return In64BitMode && (isTargetCygMing() || isTargetWindows()); -  } - -  bool isTargetEnvMacho() const { -    return isTargetDarwin() || (TargetTriple.getEnvironment() == Triple::MachO); +    return In64BitMode && TargetTriple.isOSWindows();    }    bool isTargetWin32() const { +    // FIXME: Cygwin is included for isTargetWin64 -- should it be included +    // here too?      return !In64BitMode && (isTargetMingw() || isTargetWindows());    }  | 

