From fa8d800195480df6eb76f4ea51a18cca9cb5ff88 Mon Sep 17 00:00:00 2001 From: Jan Voung Date: Wed, 28 Aug 2013 14:54:59 -0700 Subject: Hardcode NaCl in ADT/Triple.h for NaCl only builds (no Darwin/Windows). Ideally, OS-specific code would be factored out, but there are currently tons of "if (T.isOSBlah())" everywhere. E.g., 57 hits for isTargetDarwin, 36 hits for isOSDarwin, 45 hits for "getOS(", 23 hits for isMacOSX, etc... Hacking Triple.h gets us most of the way there. The X86 code also requires hacking the getEnvironment() to never return the Darwin enum value. We can't just return GNU always, because for ARM we want GNUEABIHF. There is still *some* MachO and COFF code because of code that handles container-specific relocations without checking the OS first. This prunes between 100KB to 200 KB per target (~100KB for ARM, and ~200KB for x86-64). See https://codereview.chromium.org/23540008/ for the test. BUG=https://code.google.com/p/nativeclient/issues/detail?id=1222 BUG=https://code.google.com/p/nativeclient/issues/detail?id=3321 R=dschuff@chromium.org, jfb@chromium.org Review URL: https://codereview.chromium.org/23453014 --- include/llvm/ADT/Triple.h | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h index 3a72e8704f..7ee1d724e8 100644 --- a/include/llvm/ADT/Triple.h +++ b/include/llvm/ADT/Triple.h @@ -168,18 +168,34 @@ public: /// getVendor - Get the parsed vendor type of this triple. VendorType getVendor() const { return Vendor; } + // @LOCALMOD-BEGIN -- hardcode NaCl for NaCl builds, to help + // prune OS-specific code that is litered all over and not + // cleanly separated. +#if defined(__native_client__) + OSType getOS() const { return NaCl; } + EnvironmentType getEnvironment() const { + // The X86 backend checks OS || Environment == MachO, so we need to hack + // the environment as well to make MachO impossible. + if (Environment == MachO) { + report_fatal_error("NaCl-specific build doesn't handle MachO"); + } + return Environment; + } +#else /// getOS - Get the parsed operating system type of this triple. OSType getOS() const { return OS; } + /// getEnvironment - Get the parsed environment type of this triple. + EnvironmentType getEnvironment() const { return Environment; } +#endif + // @LOCALMOD-END + /// hasEnvironment - Does this triple have the optional environment /// (fourth) component? bool hasEnvironment() const { return getEnvironmentName() != ""; } - /// getEnvironment - Get the parsed environment type of this triple. - EnvironmentType getEnvironment() const { return Environment; } - /// getOSVersion - Parse the version number from the OS name component of the /// triple, if present. /// @@ -292,6 +308,20 @@ public: return isOSVersionLT(Minor + 4, Micro, 0); } + // @LOCALMOD-BEGIN: Hardcode OS predicates to help prune code + // that is OS-specific, but not cleanly separated. + // Perhaps this would be cleaner if Triple.h was partly Table-gen'ed. +#if defined(__native_client__) + bool isMacOSX() const { return false; } + bool isiOS() const { return false; } + bool isOSDarwin() const { return false; } + bool isOSCygMing() const { return false; } + bool isOSWindows() const { return false; } + bool isOSNaCl() const { return true; } + bool isOSBinFormatELF() const { return true; } + bool isOSBinFormatCOFF() const { return false; } + bool isEnvironmentMachO() const { return false; } +#else /// isMacOSX - Is this a Mac OS X triple. For legacy reasons, we support both /// "darwin" and "osx" as OS X triples. bool isMacOSX() const { @@ -338,6 +368,8 @@ public: bool isEnvironmentMachO() const { return getEnvironment() == Triple::MachO || isOSDarwin(); } +#endif + // @LOCALMOD-END /// @} /// @name Mutators -- cgit v1.2.3-18-g5258