Skip to content

Commit c22d82a

Browse files
authored
[mlir][amdgpu] Move GPU memory spaces conversion to single place (llvm#171876)
1 parent 0afd6ee commit c22d82a

File tree

5 files changed

+29
-40
lines changed

5 files changed

+29
-40
lines changed

mlir/include/mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ void populateAMDGPUToROCDLConversionPatterns(LLVMTypeConverter &converter,
2929
RewritePatternSet &patterns,
3030
amdgpu::Chipset chipset);
3131

32+
/// Remap common GPU memory spaces (Workgroup, Private, etc) to LLVM address
33+
/// spaces.
34+
void populateCommonAMDGPUTypeAndAttributeConversions(
35+
TypeConverter &typeConverter);
36+
3237
/// Remap AMDGPU memory spaces to LLVM address spaces
3338
/// by mapping amdgpu::AddressSpace::fat_raw_buffer to ptr addrspace(7),
3439
/// amdgpu::AddressSpace::buffer_rsrc to ptr addrspace(8), and

mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2727,18 +2727,7 @@ struct ConvertAMDGPUToROCDLPass
27272727
LLVMTypeConverter converter(ctx);
27282728

27292729
populateAMDGPUToROCDLConversionPatterns(converter, patterns, *maybeChipset);
2730-
populateGpuMemorySpaceAttributeConversions(
2731-
converter, [](gpu::AddressSpace space) {
2732-
switch (space) {
2733-
case gpu::AddressSpace::Global:
2734-
return 1;
2735-
case gpu::AddressSpace::Workgroup:
2736-
return 3;
2737-
case gpu::AddressSpace::Private:
2738-
return 5;
2739-
}
2740-
llvm_unreachable("unknown address space enum value");
2741-
});
2730+
populateCommonAMDGPUTypeAndAttributeConversions(converter);
27422731
LLVMConversionTarget target(getContext());
27432732
target.addIllegalDialect<::mlir::amdgpu::AMDGPUDialect>();
27442733
target.addLegalDialect<::mlir::LLVM::LLVMDialect>();
@@ -2750,6 +2739,22 @@ struct ConvertAMDGPUToROCDLPass
27502739
};
27512740
} // namespace
27522741

2742+
void mlir::populateCommonAMDGPUTypeAndAttributeConversions(
2743+
TypeConverter &typeConverter) {
2744+
populateGpuMemorySpaceAttributeConversions(
2745+
typeConverter, [](gpu::AddressSpace space) {
2746+
switch (space) {
2747+
case gpu::AddressSpace::Global:
2748+
return ROCDL::ROCDLDialect::kGlobalMemoryAddressSpace;
2749+
case gpu::AddressSpace::Workgroup:
2750+
return ROCDL::ROCDLDialect::kSharedMemoryAddressSpace;
2751+
case gpu::AddressSpace::Private:
2752+
return ROCDL::ROCDLDialect::kPrivateMemoryAddressSpace;
2753+
}
2754+
llvm_unreachable("unknown address space enum value");
2755+
});
2756+
}
2757+
27532758
void mlir::populateAMDGPUTypeAndAttributeConversions(
27542759
TypeConverter &typeConverter) {
27552760
typeConverter.addTypeAttributeConversion(

mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -349,19 +349,7 @@ struct LowerGpuOpsToROCDLOpsPass final
349349
}
350350

351351
LLVMTypeConverter converter(ctx, options);
352-
populateGpuMemorySpaceAttributeConversions(
353-
converter, [](gpu::AddressSpace space) {
354-
switch (space) {
355-
case gpu::AddressSpace::Global:
356-
return 1;
357-
case gpu::AddressSpace::Workgroup:
358-
return 3;
359-
case gpu::AddressSpace::Private:
360-
return 5;
361-
}
362-
llvm_unreachable("unknown address space enum value");
363-
return 0;
364-
});
352+
populateCommonAMDGPUTypeAndAttributeConversions(converter);
365353

366354
RewritePatternSet llvmPatterns(ctx);
367355
LLVMConversionTarget target(getContext());

mlir/lib/Dialect/GPU/TransformOps/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ add_mlir_dialect_library(MLIRGPUTransformOps
1010
MLIRGPUTransformOpsIncGen
1111
MLIRDeviceMappingInterfacesIncGen
1212
MLIRGPUDeviceMapperEnumsGen
13-
13+
1414
LINK_LIBS PUBLIC
1515
MLIRGPUDialect
1616
MLIRGPUTransforms
@@ -22,7 +22,8 @@ add_mlir_dialect_library(MLIRGPUTransformOps
2222
MLIRVectorTransforms
2323

2424
# ConversionPatterns
25-
MLIRNVGPUToNVVM
25+
MLIRAMDGPUToROCDL
2626
MLIRGPUToNVVMTransforms
2727
MLIRGPUToROCDLTransforms
28-
)
28+
MLIRNVGPUToNVVM
29+
)

mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.h"
1010

11+
#include "mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h"
1112
#include "mlir/Conversion/GPUCommon/GPUCommonPass.h"
1213
#include "mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h"
1314
#include "mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h"
@@ -128,18 +129,7 @@ LogicalResult transform::ApplyGPUSubgroupReduceToNVVMConversionPatternsOp::
128129
void transform::ApplyGPUToROCDLConversionPatternsOp::populatePatterns(
129130
TypeConverter &typeConverter, RewritePatternSet &patterns) {
130131
auto &llvmTypeConverter = static_cast<LLVMTypeConverter &>(typeConverter);
131-
populateGpuMemorySpaceAttributeConversions(
132-
llvmTypeConverter, [](AddressSpace space) {
133-
switch (space) {
134-
case AddressSpace::Global:
135-
return ROCDL::ROCDLDialect::kGlobalMemoryAddressSpace;
136-
case AddressSpace::Workgroup:
137-
return ROCDL::ROCDLDialect::kSharedMemoryAddressSpace;
138-
case AddressSpace::Private:
139-
return ROCDL::ROCDLDialect::kPrivateMemoryAddressSpace;
140-
}
141-
llvm_unreachable("unknown address space enum value");
142-
});
132+
populateCommonAMDGPUTypeAndAttributeConversions(llvmTypeConverter);
143133
FailureOr<amdgpu::Chipset> maybeChipset =
144134
amdgpu::Chipset::parse(getChipset());
145135
assert(llvm::succeeded(maybeChipset) && "expected valid chipset");

0 commit comments

Comments
 (0)