From ac39a035351a20928e087617e412aa6ce510181f Mon Sep 17 00:00:00 2001 From: Guy Benyei Date: Thu, 15 Nov 2012 10:35:47 +0000 Subject: [PATCH] Add support for SPIR64 target - the 64bit counterpart of SPIR. The new OpenCL SPIR extension spec will define separate SPIR for 32 and 64 bit architectures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168036 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/Triple.h | 3 ++- lib/Support/Triple.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h index c3a2b19d51c..a9e67cafbac 100644 --- a/include/llvm/ADT/Triple.h +++ b/include/llvm/ADT/Triple.h @@ -65,7 +65,8 @@ public: nvptx64, // NVPTX: 64-bit le32, // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten) amdil, // amdil: amd IL - spir // SPIR: standard portable IR for OpenCL + spir, // SPIR: standard portable IR for OpenCL 32-bit version + spir64 // SPIR: standard portable IR for OpenCL 64-bit version }; enum VendorType { UnknownVendor, diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 7bf65f72a77..52bf722d537 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -42,6 +42,7 @@ const char *Triple::getArchTypeName(ArchType Kind) { case le32: return "le32"; case amdil: return "amdil"; case spir: return "spir"; + case spir64: return "spir64"; } llvm_unreachable("Invalid ArchType!"); @@ -82,6 +83,7 @@ const char *Triple::getArchTypePrefix(ArchType Kind) { case le32: return "le32"; case amdil: return "amdil"; case spir: return "spir"; + case spir64: return "spir"; } } @@ -173,6 +175,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("le32", le32) .Case("amdil", amdil) .Case("spir", spir) + .Case("spir64", spir64) .Default(UnknownArch); } @@ -198,6 +201,7 @@ const char *Triple::getArchNameForAssembler() { .Case("le32", "le32") .Case("amdil", "amdil") .Case("spir", "spir") + .Case("spir64", "spir64") .Default(NULL); } @@ -232,6 +236,7 @@ static Triple::ArchType parseArch(StringRef ArchName) { .Case("le32", Triple::le32) .Case("amdil", Triple::amdil) .Case("spir", Triple::spir) + .Case("spir64", Triple::spir64) .Default(Triple::UnknownArch); } @@ -645,7 +650,6 @@ void Triple::setOSAndEnvironmentName(StringRef Str) { static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { switch (Arch) { - case llvm::Triple::spir: case llvm::Triple::UnknownArch: return 0; @@ -667,6 +671,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::thumb: case llvm::Triple::x86: case llvm::Triple::xcore: + case llvm::Triple::spir: return 32; case llvm::Triple::mips64: @@ -675,6 +680,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::ppc64: case llvm::Triple::sparcv9: case llvm::Triple::x86_64: + case llvm::Triple::spir64: return 64; } llvm_unreachable("Invalid architecture value"); @@ -725,6 +731,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::ppc64: T.setArch(Triple::ppc); break; case Triple::sparcv9: T.setArch(Triple::sparc); break; case Triple::x86_64: T.setArch(Triple::x86); break; + case Triple::spir64: T.setArch(Triple::spir); break; } return T; } @@ -746,7 +753,7 @@ Triple Triple::get64BitArchVariant() const { T.setArch(UnknownArch); break; - case Triple::spir: + case Triple::spir64: case Triple::mips64: case Triple::mips64el: case Triple::nvptx64: @@ -762,6 +769,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::ppc: T.setArch(Triple::ppc64); break; case Triple::sparc: T.setArch(Triple::sparcv9); break; case Triple::x86: T.setArch(Triple::x86_64); break; + case Triple::spir: T.setArch(Triple::spir64); break; } return T; }