Skip to content

Commit 014f4e9

Browse files
authored
[mlir][SPIR-V] Add lowering for gpu.lane_id op (#90873)
Add gpu.lane_id op lower for convert-gpu-to-spirv pass
1 parent a682860 commit 014f4e9

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRV.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,8 @@ void mlir::populateGPUToSPIRVPatterns(const SPIRVTypeConverter &typeConverter,
747747
spirv::BuiltIn::NumSubgroups>,
748748
SingleDimLaunchConfigConversion<gpu::SubgroupSizeOp,
749749
spirv::BuiltIn::SubgroupSize>,
750+
SingleDimLaunchConfigConversion<
751+
gpu::LaneIdOp, spirv::BuiltIn::SubgroupLocalInvocationId>,
750752
WorkGroupSizeConversion, GPUAllReduceConversion,
751753
GPUSubgroupReduceConversion, GPUPrintfConversion>(typeConverter,
752754
patterns.getContext());

mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,8 @@ getOrInsertBuiltinVariable(Block &body, Location loc, spirv::BuiltIn builtin,
778778
}
779779
case spirv::BuiltIn::SubgroupId:
780780
case spirv::BuiltIn::NumSubgroups:
781-
case spirv::BuiltIn::SubgroupSize: {
781+
case spirv::BuiltIn::SubgroupSize:
782+
case spirv::BuiltIn::SubgroupLocalInvocationId: {
782783
auto ptrType =
783784
spirv::PointerType::get(integerType, spirv::StorageClass::Input);
784785
std::string name = getBuiltinVarName(builtin, prefix, suffix);

mlir/test/Conversion/GPUToSPIRV/builtins-opencl.mlir

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,25 @@ module attributes {
5050
}
5151
}
5252
}
53+
54+
// -----
55+
56+
module attributes {
57+
gpu.container_module,
58+
spirv.target_env = #spirv.target_env<#spirv.vce<v1.0, [Addresses, Kernel, Int64], []>, #spirv.resource_limits<>>
59+
} {
60+
// INDEX32-LABEL: spirv.module @{{.*}} Physical32 OpenCL
61+
// INDEX32: spirv.GlobalVariable [[LANEID:@.*]] built_in("SubgroupLocalInvocationId") : !spirv.ptr<i32, Input>
62+
// INDEX64-LABEL: spirv.module @{{.*}} Physical64 OpenCL
63+
// INDEX64: spirv.GlobalVariable [[LANEID:@.*]] built_in("SubgroupLocalInvocationId") : !spirv.ptr<i32, Input>
64+
gpu.module @kernels {
65+
gpu.func @builtin_laneid() kernel
66+
attributes {spirv.entry_point_abi = #spirv.entry_point_abi<workgroup_size = [16, 1, 1]>} {
67+
// INDEX32: [[ADDRESS:%.*]] = spirv.mlir.addressof [[LANEID]]
68+
// INDEX32-NEXT: {{%.*}} = spirv.Load "Input" [[ADDRESS]]
69+
// INDEX64: spirv.UConvert %{{.+}} : i32 to i64
70+
%0 = gpu.lane_id
71+
gpu.return
72+
}
73+
}
74+
}

0 commit comments

Comments
 (0)