Skip to content

Commit 818ea74

Browse files
authored
[SYCL-MLIR] Lower MemRef to pointers in -convert-sycl-to-llvm (#8354)
Populate converter with patterns exposed by polygeist. Signed-off-by: Victor Perez <[email protected]>
1 parent cea940e commit 818ea74

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

mlir-sycl/lib/Conversion/SYCLToLLVM/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ add_mlir_conversion_library(MLIRSYCLToLLVM
1313
LINK_LIBS PUBLIC
1414
MLIRArithToLLVM
1515
MLIRFuncToLLVM
16+
MLIRFuncTransforms
1617
MLIRIR
1718
MLIRLLVMCommonConversion
1819
MLIRLLVMDialect
1920
MLIRMemRefToLLVM
21+
MLIRPolygeistTransforms
2022
MLIRSYCLDialect
2123
MLIRTransforms
2224
)

mlir-sycl/lib/Conversion/SYCLToLLVM/SYCLToLLVMPass.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
#include "mlir/Conversion/LLVMCommon/LoweringOptions.h"
1717
#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
1818
#include "mlir/Conversion/SYCLToLLVM/SYCLToLLVM.h"
19+
#include "mlir/Dialect/Func/Transforms/FuncConversions.h"
1920
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
21+
#include "mlir/Dialect/Polygeist/Transforms/Passes.h"
2022
#include "mlir/Dialect/SYCL/IR/SYCLOpsDialect.h"
2123

2224
using namespace mlir;
@@ -52,6 +54,15 @@ void ConvertSYCLToLLVMPass::runOnOperation() {
5254

5355
RewritePatternSet patterns(context);
5456

57+
if (useBarePtrCallConv) {
58+
// Keep these at the top; these should be run before the rest of
59+
// function conversion patterns.
60+
populateReturnOpTypeConversionPattern(patterns, converter);
61+
populateCallOpTypeConversionPattern(patterns, converter);
62+
populateAnyFunctionOpInterfaceTypeConversionPattern(patterns, converter);
63+
polygeist::populateBareMemRefToLLVMConversionPatterns(converter, patterns);
64+
}
65+
5566
sycl::populateSYCLToLLVMConversionPatterns(converter, patterns);
5667
populateFuncToLLVMConversionPatterns(converter, patterns);
5768

mlir-sycl/test/Conversion/SYCLToLLVM/sycl-types-to-llvm.mlir

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: sycl-mlir-opt -split-input-file -convert-sycl-to-llvm -verify-diagnostics %s | FileCheck %s
1+
// RUN: sycl-mlir-opt -split-input-file -convert-sycl-to-llvm="use-bare-ptr-call-conv" -verify-diagnostics %s | FileCheck %s
22

33
!sycl_array_1_ = !sycl.array<[1], (memref<1xi64>)>
44
!sycl_array_2_ = !sycl.array<[2], (memref<2xi64>)>
@@ -72,7 +72,7 @@ func.func @test_accessor.3(%arg0: !sycl_accessor_1_f32_rw_gb) {
7272
func.func @test_accessor.4(%arg0: !sycl_accessor_2_f32_rw_gb) {
7373
return
7474
}
75-
// CHECK: llvm.func @test_accessor.5(%arg0: !llvm.struct<"class.sycl::_V1::accessor{{.*}}", (struct<"class.sycl::_V1::local_accessor_base{{.*}}", ([[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[ID_1]][[ARRAY_1]][[SUFFIX]][[SUFFIX]], struct<(ptr<i32, 3>
75+
// CHECK: llvm.func @test_accessor.5(%arg0: !llvm.struct<"class.sycl::_V1::accessor{{.*}}", (struct<"class.sycl::_V1::local_accessor_base{{.*}}", ([[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[ID_1]][[ARRAY_1]][[SUFFIX]][[SUFFIX]], ptr<i32, 3>
7676
func.func @test_accessor.5(%arg0: !sycl_accessor_1_i32_rw_1) {
7777
return
7878
}
@@ -89,7 +89,7 @@ func.func @test_OwnerLessBase(%arg0: !sycl.owner_less_base) {
8989

9090
!sycl_atomic_i32_1_ = !sycl.atomic<[i32,1], (memref<?xi32, 1>)>
9191
!sycl_atomic_f32_3_ = !sycl.atomic<[f32,3], (memref<?xf32, 3>)>
92-
// CHECK: llvm.func @test_atomic(%arg0: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::atomic", \(struct<\(ptr<f32, 3>, ptr<f32, 3>, i64, array<1 x i64>, array<1 x i64>\)>\)>]], %arg1: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::atomic.1", \(struct<\(ptr<i32, 1>, ptr<i32, 1>, i64, array<1 x i64>, array<1 x i64>\)>\)>]]) {
92+
// CHECK: llvm.func @test_atomic(%arg0: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::atomic", \(ptr<f32, 3>\)>]], %arg1: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::atomic.1", \(ptr<i32, 1>\)>]]) {
9393
func.func @test_atomic(%arg0: !sycl_atomic_f32_3_, %arg1: !sycl_atomic_i32_1_) {
9494
return
9595
}
@@ -158,7 +158,7 @@ func.func @test_local_accessor_base_device(%arg0: !sycl_LocalAccessorBaseDevice_
158158
func.func @test_local_accessor_base(%arg0: !sycl_local_accessor_base_1_i32_rw) {
159159
return
160160
}
161-
// CHECK: llvm.func @test_local_accessor(%arg0: !llvm.[[LOCAL_ACCESSOR:struct<"class.sycl::_V1::local_accessor.*", \(]][[LOCAL_ACCESSOR_BASE]][[LOCAL_ACCESSOR_BASE_DEVICE]][[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[ID_1]][[ARRAY_1]][[SUFFIX]][[SUFFIX]], struct<(ptr<i32, 3>
161+
// CHECK: llvm.func @test_local_accessor(%arg0: !llvm.[[LOCAL_ACCESSOR:struct<"class.sycl::_V1::local_accessor.*", \(]][[LOCAL_ACCESSOR_BASE]][[LOCAL_ACCESSOR_BASE_DEVICE]][[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[RANGE_1]][[ARRAY_1]][[SUFFIX]], [[ID_1]][[ARRAY_1]][[SUFFIX]][[SUFFIX]], ptr<i32, 3>
162162
func.func @test_local_accessor(%arg0: !sycl_local_accessor_1_i32_) {
163163
return
164164
}
@@ -179,7 +179,7 @@ func.func @test_minimum(%arg0: !sycl_minimum_i32_) {
179179
// -----
180180

181181
!sycl_multi_ptr_i32_1_ = !sycl.multi_ptr<[i32, 1, 1], (memref<?xi32, 1>)>
182-
// CHECK: llvm.func @test_multi_ptr(%arg0: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::multi_ptr", \(struct<\(ptr<i32, 1>, ptr<i32, 1>, i64, array<1 x i64>, array<1 x i64>\)>\)>]]) {
182+
// CHECK: llvm.func @test_multi_ptr(%arg0: !llvm.[[ATOMIC1:struct<"class.sycl::_V1::multi_ptr", \(ptr<i32, 1>\)>]]) {
183183
func.func @test_multi_ptr(%arg0: !sycl_multi_ptr_i32_1_) {
184184
return
185185
}
@@ -229,7 +229,7 @@ func.func @test_vec(%arg0: !sycl_vec_f32_4_) {
229229
return
230230
}
231231
!sycl_swizzled_vec_f32_4_ = !sycl.swizzled_vec<[!sycl_vec_f32_4_, 0, 2], (memref<?x!sycl_vec_f32_4_, 4>, !llvm.struct<(i8)>, !llvm.struct<(i8)>)>
232-
// CHECK: llvm.func @test_swizzled_vec(%arg0: !llvm.[[SWIZZLED_VEC:struct<"class.sycl::_V1::detail::SwizzleOp"]], (struct<(ptr<[[VEC]], 4>, ptr<[[VEC]], 4>, i64, array<1 x i64>, array<1 x i64>)>, [[GET_OP:struct<\(i8\)>]], [[GET_OP]][[SUFFIX]]) {
232+
// CHECK: llvm.func @test_swizzled_vec(%arg0: !llvm.[[SWIZZLED_VEC:struct<"class.sycl::_V1::detail::SwizzleOp"]], (ptr<[[VEC]], 4>, [[GET_OP:struct<\(i8\)>]], [[GET_OP]][[SUFFIX]]) {
233233
func.func @test_swizzled_vec(%arg0: !sycl_swizzled_vec_f32_4_) {
234234
return
235235
}

0 commit comments

Comments
 (0)