[UB] Fix a nasty place where we would pass null pointers to memcpy.
[oota-llvm.git] / include / llvm / ADT / Triple.h
index d3d87d6a92f79cd45617cbe09a982fd8cd533044..4ad9396066ad5adc98e67e216f6d581cf2020998 100644 (file)
@@ -87,7 +87,7 @@ public:
     shave,      // SHAVE: Movidius vector VLIW processors
     wasm32,     // WebAssembly with 32-bit pointers
     wasm64,     // WebAssembly with 64-bit pointers
-    LastArchType = shave
+    LastArchType = wasm64
   };
   enum SubArchType {
     NoSubArch,
@@ -153,8 +153,7 @@ public:
     NVCL,       // NVIDIA OpenCL
     AMDHSA,     // AMD HSA Runtime
     PS4,
-    WebAssembly,
-    LastOSType = WebAssembly
+    LastOSType = PS4
   };
   enum EnvironmentType {
     UnknownEnvironment,
@@ -171,7 +170,8 @@ public:
     MSVC,
     Itanium,
     Cygnus,
-    LastEnvironmentType = Cygnus
+    AMDOpenCL,
+    LastEnvironmentType = AMDOpenCL
   };
   enum ObjectFormatType {
     UnknownObjectFormat,
@@ -570,6 +570,22 @@ public:
   ///          architecture if no such variant can be found.
   llvm::Triple get64BitArchVariant() const;
 
+  /// Form a triple with a big endian variant of the current architecture.
+  ///
+  /// This can be used to move across "families" of architectures where useful.
+  ///
+  /// \returns A new triple with a big endian architecture or an unknown
+  ///          architecture if no such variant can be found.
+  llvm::Triple getBigEndianArchVariant() const;
+
+  /// Form a triple with a little endian variant of the current architecture.
+  ///
+  /// This can be used to move across "families" of architectures where useful.
+  ///
+  /// \returns A new triple with a little endian architecture or an unknown
+  ///          architecture if no such variant can be found.
+  llvm::Triple getLittleEndianArchVariant() const;
+
   /// Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting.
   ///
   /// \param Arch the architecture name (e.g., "armv7s"). If it is an empty