[Mlir-commits] [mlir] [MLIR][GPU-LLVM] Add in-pass signature update option for opencl kernels (PR #105664)
Victor Perez
llvmlistbot at llvm.org
Mon Aug 26 01:11:47 PDT 2024
================
@@ -306,6 +306,51 @@ struct GPUShuffleConversion final : ConvertOpToLLVMPattern<gpu::ShuffleOp> {
}
};
+class MemorySpaceToOpenCLMemorySpaceConverter final : public TypeConverter {
+public:
+ MemorySpaceToOpenCLMemorySpaceConverter() {
+ addConversion([](Type t) { return t; });
+ addConversion(
+ [this](BaseMemRefType memRefType) -> std::optional<Type> {
+ std::optional<gpu::AddressSpace> addrSpace =
+ memorySpaceMap(memRefType.getMemorySpace());
+ if (!addrSpace) {
+ LLVM_DEBUG(
+ llvm::dbgs()
+ << "cannot convert " << memRefType
+ << " due to being unable to find address space in the map\n");
+ return std::nullopt;
+ }
+ auto addrSpaceAttr =
+ gpu::AddressSpaceAttr::get(memRefType.getContext(), *addrSpace);
+ if (auto rankedType = dyn_cast<MemRefType>(memRefType)) {
+ return MemRefType::get(memRefType.getShape(),
+ memRefType.getElementType(),
+ rankedType.getLayout(), addrSpaceAttr);
+ }
+ return UnrankedMemRefType::get(memRefType.getElementType(),
+ addrSpaceAttr);
+ });
+ addConversion([this](FunctionType type) {
+ auto inputs = llvm::map_to_vector(
+ type.getInputs(), [this](Type ty) { return convertType(ty); });
+ auto results = llvm::map_to_vector(
+ type.getResults(), [this](Type ty) { return convertType(ty); });
+ return FunctionType::get(type.getContext(), inputs, results);
+ });
+ }
+
+private:
+ std::optional<gpu::AddressSpace> memorySpaceMap(Attribute memSpaceAttr) {
+ if (!memSpaceAttr)
+ return gpu::AddressSpace::Global;
+ auto gpuAddrSpace = dyn_cast<gpu::AddressSpaceAttr>(memSpaceAttr);
+ if (!gpuAddrSpace)
+ return std::nullopt;
+ return gpuAddrSpace.getValue();
+ }
----------------
victor-eds wrote:
```suggestion
std::optional<gpu::AddressSpace> memorySpaceMap(Attribute memSpaceAttr) {
if (!memSpaceAttr)
return gpu::AddressSpace::Global;
return std::nullopt;
}
```
I think this is equivalent in our use-case
https://github.com/llvm/llvm-project/pull/105664
More information about the Mlir-commits
mailing list