Skip to content

Commit fd8be1e

Browse files
authored
[MLIR][LaunchFuncToVulkan] Remove typed pointer support (llvm#70865)
This commit removes the typed pointer support from the LaunchFunc's lowering to Vukan dialect. Typed pointers have been deprecated for a while now and it's planned to soon remove them from the LLVM dialect. Related PSA: https://discourse.llvm.org/t/psa-removal-of-typed-pointers-from-the-llvm-dialect/74502
1 parent 02307a1 commit fd8be1e

File tree

4 files changed

+9
-103
lines changed

4 files changed

+9
-103
lines changed

mlir/include/mlir/Conversion/Passes.td

-6
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,6 @@ def ConvertVulkanLaunchFuncToVulkanCallsPass
589589
This pass is only intended for the mlir-vulkan-runner.
590590
}];
591591

592-
let options = [
593-
Option<"useOpaquePointers", "use-opaque-pointers", "bool",
594-
/*default=*/"true", "Generate LLVM IR using opaque pointers "
595-
"instead of typed pointers">
596-
];
597-
598592
let dependentDialects = ["LLVM::LLVMDialect"];
599593
}
600594

mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp

+8-33
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,7 @@ class VulkanLaunchFuncToVulkanCallsPass
6565
void initializeCachedTypes() {
6666
llvmFloatType = Float32Type::get(&getContext());
6767
llvmVoidType = LLVM::LLVMVoidType::get(&getContext());
68-
if (useOpaquePointers)
69-
llvmPointerType = LLVM::LLVMPointerType::get(&getContext());
70-
else
71-
llvmPointerType =
72-
LLVM::LLVMPointerType::get(IntegerType::get(&getContext(), 8));
68+
llvmPointerType = LLVM::LLVMPointerType::get(&getContext());
7369
llvmInt32Type = IntegerType::get(&getContext(), 32);
7470
llvmInt64Type = IntegerType::get(&getContext(), 64);
7571
}
@@ -85,9 +81,6 @@ class VulkanLaunchFuncToVulkanCallsPass
8581
// int64_t sizes[Rank]; // omitted when rank == 0
8682
// int64_t strides[Rank]; // omitted when rank == 0
8783
// };
88-
auto llvmPtrToElementType = useOpaquePointers
89-
? llvmPointerType
90-
: LLVM::LLVMPointerType::get(elemenType);
9184
auto llvmArrayRankElementSizeType =
9285
LLVM::LLVMArrayType::get(getInt64Type(), rank);
9386

@@ -96,7 +89,7 @@ class VulkanLaunchFuncToVulkanCallsPass
9689
// [`rank` x i64], [`rank` x i64]}">`.
9790
return LLVM::LLVMStructType::getLiteral(
9891
&getContext(),
99-
{llvmPtrToElementType, llvmPtrToElementType, getInt64Type(),
92+
{llvmPointerType, llvmPointerType, getInt64Type(),
10093
llvmArrayRankElementSizeType, llvmArrayRankElementSizeType});
10194
}
10295

@@ -280,13 +273,6 @@ void VulkanLaunchFuncToVulkanCallsPass::createBindMemRefCalls(
280273

281274
auto symbolName =
282275
llvm::formatv("bindMemRef{0}D{1}", rank, stringifyType(type)).str();
283-
// Special case for fp16 type. Since it is not a supported type in C we use
284-
// int16_t and bitcast the descriptor.
285-
if (!useOpaquePointers && isa<Float16Type>(type)) {
286-
auto memRefTy = getMemRefType(rank, IntegerType::get(&getContext(), 16));
287-
ptrToMemRefDescriptor = builder.create<LLVM::BitcastOp>(
288-
loc, LLVM::LLVMPointerType::get(memRefTy), ptrToMemRefDescriptor);
289-
}
290276
// Create call to `bindMemRef`.
291277
builder.create<LLVM::CallOp>(
292278
loc, TypeRange(), StringRef(symbolName.data(), symbolName.size()),
@@ -303,16 +289,9 @@ VulkanLaunchFuncToVulkanCallsPass::deduceMemRefRank(Value launchCallArg,
303289
if (!alloca)
304290
return failure();
305291

306-
LLVM::LLVMStructType llvmDescriptorTy;
307-
if (std::optional<Type> elementType = alloca.getElemType()) {
308-
llvmDescriptorTy = dyn_cast<LLVM::LLVMStructType>(*elementType);
309-
} else {
310-
// This case is only possible if we are not using opaque pointers
311-
// since opaque pointer producing allocas require an element type.
312-
llvmDescriptorTy = dyn_cast<LLVM::LLVMStructType>(
313-
alloca.getRes().getType().getElementType());
314-
}
315-
292+
std::optional<Type> elementType = alloca.getElemType();
293+
assert(elementType && "expected to work with opaque pointers");
294+
auto llvmDescriptorTy = dyn_cast<LLVM::LLVMStructType>(*elementType);
316295
// template <typename Elem, size_t Rank>
317296
// struct {
318297
// Elem *allocated;
@@ -379,10 +358,7 @@ void VulkanLaunchFuncToVulkanCallsPass::declareVulkanFunctions(Location loc) {
379358
if (!module.lookupSymbol(fnName)) {
380359
auto fnType = LLVM::LLVMFunctionType::get(
381360
getVoidType(),
382-
{getPointerType(), getInt32Type(), getInt32Type(),
383-
useOpaquePointers
384-
? llvmPointerType
385-
: LLVM::LLVMPointerType::get(getMemRefType(i, type))},
361+
{llvmPointerType, getInt32Type(), getInt32Type(), llvmPointerType},
386362
/*isVarArg=*/false);
387363
builder.create<LLVM::LLVMFuncOp>(loc, fnName, fnType);
388364
}
@@ -410,8 +386,7 @@ Value VulkanLaunchFuncToVulkanCallsPass::createEntryPointNameConstant(
410386

411387
std::string entryPointGlobalName = (name + "_spv_entry_point_name").str();
412388
return LLVM::createGlobalString(loc, builder, entryPointGlobalName,
413-
shaderName, LLVM::Linkage::Internal,
414-
useOpaquePointers);
389+
shaderName, LLVM::Linkage::Internal);
415390
}
416391

417392
void VulkanLaunchFuncToVulkanCallsPass::translateVulkanLaunchCall(
@@ -429,7 +404,7 @@ void VulkanLaunchFuncToVulkanCallsPass::translateVulkanLaunchCall(
429404
// that data to runtime call.
430405
Value ptrToSPIRVBinary = LLVM::createGlobalString(
431406
loc, builder, kSPIRVBinary, spirvAttributes.blob.getValue(),
432-
LLVM::Linkage::Internal, useOpaquePointers);
407+
LLVM::Linkage::Internal);
433408

434409
// Create LLVM constant for the size of SPIR-V binary shader.
435410
Value binarySize = builder.create<LLVM::ConstantOp>(

mlir/test/Conversion/GPUToVulkan/invoke-vulkan.mlir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: mlir-opt %s -launch-func-to-vulkan='use-opaque-pointers=1' | FileCheck %s
1+
// RUN: mlir-opt %s -launch-func-to-vulkan | FileCheck %s
22

33
// CHECK: llvm.mlir.global internal constant @kernel_spv_entry_point_name
44
// CHECK: llvm.mlir.global internal constant @SPIRV_BIN

mlir/test/Conversion/GPUToVulkan/typed-pointers.mlir

-63
This file was deleted.

0 commit comments

Comments
 (0)