//===- AttrToLLVMConverter.cpp - SPIR-V attributes conversion to LLVM -C++ ===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include namespace mlir { namespace { //===----------------------------------------------------------------------===// // Constants //===----------------------------------------------------------------------===// constexpr unsigned defaultAddressSpace = 0; //===----------------------------------------------------------------------===// // Utility functions //===----------------------------------------------------------------------===// static unsigned storageClassToOCLAddressSpace(spirv::StorageClass storageClass) { // Based on // https://registry.khronos.org/SPIR-V/specs/unified1/OpenCL.ExtendedInstructionSet.100.html#_binary_form // and clang/lib/Basic/Targets/SPIR.h. switch (storageClass) { case spirv::StorageClass::Function: return 0; case spirv::StorageClass::Input: case spirv::StorageClass::CrossWorkgroup: return 1; case spirv::StorageClass::UniformConstant: return 2; case spirv::StorageClass::Workgroup: return 3; case spirv::StorageClass::Generic: return 4; case spirv::StorageClass::DeviceOnlyINTEL: return 5; case spirv::StorageClass::HostOnlyINTEL: return 6; default: return defaultAddressSpace; } } } // namespace unsigned storageClassToAddressSpace(spirv::ClientAPI clientAPI, spirv::StorageClass storageClass) { switch (clientAPI) { case spirv::ClientAPI::OpenCL: return storageClassToOCLAddressSpace(storageClass); default: return defaultAddressSpace; } } } // namespace mlir