diff options
author | Anastasia Stulova <anastasia.stulova@arm.com> | 2021-11-08 11:13:09 +0000 |
---|---|---|
committer | Anastasia Stulova <anastasia.stulova@arm.com> | 2021-11-08 13:34:10 +0000 |
commit | a10a69fe9c74bef3630795d9f2f516d7b84e1cd3 (patch) | |
tree | ad78e55a073175bdf6b7c733658cbb6fb9c89488 /llvm/lib/Support/Triple.cpp | |
parent | 0425087b8bac03693976ea34c156ca149482c853 (diff) | |
download | llvm-a10a69fe9c74bef3630795d9f2f516d7b84e1cd3.zip llvm-a10a69fe9c74bef3630795d9f2f516d7b84e1cd3.tar.gz llvm-a10a69fe9c74bef3630795d9f2f516d7b84e1cd3.tar.bz2 |
[SPIR-V] Add SPIR-V triple and clang target info.
Add new triple and target info for ‘spirv32’ and ‘spirv64’ and,
thus, enabling clang (LLVM IR) code emission to SPIR-V target.
The target for SPIR-V is mostly reused from SPIR by derivation
from a common base class since IR output for SPIR-V is mostly
the same as SPIR. Some refactoring are made accordingly.
Added and updated tests for parts that are different between
SPIR and SPIR-V.
Patch by linjamaki (Henry Linjamäki)!
Differential Revision: https://reviews.llvm.org/D109144
Diffstat (limited to 'llvm/lib/Support/Triple.cpp')
-rw-r--r-- | llvm/lib/Support/Triple.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index df43ec1..b9a92e2 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -67,6 +67,8 @@ StringRef Triple::getArchTypeName(ArchType Kind) { case sparcv9: return "sparcv9"; case spir64: return "spir64"; case spir: return "spir"; + case spirv32: return "spirv32"; + case spirv64: return "spirv64"; case systemz: return "s390x"; case tce: return "tce"; case tcele: return "tcele"; @@ -147,6 +149,10 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) { case spir: case spir64: return "spir"; + + case spirv32: + case spirv64: return "spirv"; + case kalimba: return "kalimba"; case lanai: return "lanai"; case shave: return "shave"; @@ -323,6 +329,8 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("hsail64", hsail64) .Case("spir", spir) .Case("spir64", spir64) + .Case("spirv32", spirv32) + .Case("spirv64", spirv64) .Case("kalimba", kalimba) .Case("lanai", lanai) .Case("shave", shave) @@ -456,6 +464,8 @@ static Triple::ArchType parseArch(StringRef ArchName) { .Case("hsail64", Triple::hsail64) .Case("spir", Triple::spir) .Case("spir64", Triple::spir64) + .Case("spirv32", Triple::spirv32) + .Case("spirv64", Triple::spirv64) .StartsWith("kalimba", Triple::kalimba) .Case("lanai", Triple::lanai) .Case("renderscript32", Triple::renderscript32) @@ -759,6 +769,11 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { case Triple::wasm32: case Triple::wasm64: return Triple::Wasm; + + case Triple::spirv32: + case Triple::spirv64: + // TODO: In future this will be Triple::SPIRV. + return Triple::UnknownObjectFormat; } llvm_unreachable("unknown architecture"); } @@ -1328,6 +1343,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::sparc: case llvm::Triple::sparcel: case llvm::Triple::spir: + case llvm::Triple::spirv32: case llvm::Triple::tce: case llvm::Triple::tcele: case llvm::Triple::thumb: @@ -1354,6 +1370,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::riscv64: case llvm::Triple::sparcv9: case llvm::Triple::spir64: + case llvm::Triple::spirv64: case llvm::Triple::systemz: case llvm::Triple::ve: case llvm::Triple::wasm64: @@ -1413,6 +1430,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::sparc: case Triple::sparcel: case Triple::spir: + case Triple::spirv32: case Triple::tce: case Triple::tcele: case Triple::thumb: @@ -1441,6 +1459,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::riscv64: T.setArch(Triple::riscv32); break; case Triple::sparcv9: T.setArch(Triple::sparc); break; case Triple::spir64: T.setArch(Triple::spir); break; + case Triple::spirv64: T.setArch(Triple::spirv32); break; case Triple::wasm64: T.setArch(Triple::wasm32); break; case Triple::x86_64: T.setArch(Triple::x86); break; } @@ -1485,6 +1504,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::riscv64: case Triple::sparcv9: case Triple::spir64: + case Triple::spirv64: case Triple::systemz: case Triple::ve: case Triple::wasm64: @@ -1511,6 +1531,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::riscv32: T.setArch(Triple::riscv64); break; case Triple::sparc: T.setArch(Triple::sparcv9); break; case Triple::spir: T.setArch(Triple::spir64); break; + case Triple::spirv32: T.setArch(Triple::spirv64); break; case Triple::thumb: T.setArch(Triple::aarch64); break; case Triple::thumbeb: T.setArch(Triple::aarch64_be); break; case Triple::wasm32: T.setArch(Triple::wasm64); break; @@ -1547,6 +1568,8 @@ Triple Triple::getBigEndianArchVariant() const { case Triple::shave: case Triple::spir64: case Triple::spir: + case Triple::spirv32: + case Triple::spirv64: case Triple::wasm32: case Triple::wasm64: case Triple::x86: @@ -1650,6 +1673,8 @@ bool Triple::isLittleEndian() const { case Triple::sparcel: case Triple::spir64: case Triple::spir: + case Triple::spirv32: + case Triple::spirv64: case Triple::tcele: case Triple::thumb: case Triple::ve: |