Skip to content

Commit de64742

Browse files
committed
integration test with xevm
1 parent 3b9094d commit de64742

File tree

5 files changed

+53
-4
lines changed

5 files changed

+53
-4
lines changed

lib/gc/Conversion/XeVMToLLVM/XeVMToLLVM.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,6 @@ class LoadStorePrefetchNdToOCLPattern : public OpConversionPattern<OpType> {
226226
}
227227
}
228228

229-
// !X = !{i32 %decoration_kind%, i32 %level%, i32 %control%, i32 %operand of
230-
// the instruction to decorate%}
231229
funcName =
232230
llvm::formatv("{0}_{1}b_{2}r{3}x{4}c", funcName, op.getElemSizeInBits(),
233231
op.getTileHeight(), op.getTileWidth(), op.getVBlocks())

lib/gc/ExecutionEngine/Driver/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,5 @@ gc_add_mlir_library(GcJitWrapper
4040
${conversion_libs}
4141
${GC_PASSES}
4242
GcAnalysis
43+
MLIRXeVMToLLVMIRTranslation
4344
)

lib/gc/ExecutionEngine/Driver/Driver.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#ifdef GC_HAS_ONEDNN_DIALECT
1212
#include "gc/Dialect/OneDNNGraph/OneDNNGraphDialect.h"
1313
#endif
14+
#include "gc/Conversion/Passes.h"
15+
#include "gc/Target/LLVMIR/Dialect/XeVM/XeVMToLLVMIRTranslation.h"
1416
#include "gc/Transforms/Passes.h"
1517
#include "mlir/InitAllDialects.h"
1618
#include "mlir/InitAllPasses.h"
@@ -26,18 +28,21 @@ namespace gc {
2628
static DialectRegistry initDialects() {
2729
mlir::registerAllPasses();
2830
mlir::gc::registerGraphCompilerPasses();
31+
mlir::registerGCConversionPasses();
2932
mlir::cpuruntime::registerCPURuntimePasses();
3033
mlir::DialectRegistry registry;
3134
registry.insert<mlir::cpuruntime::CPURuntimeDialect>();
3235
mlir::registerAllDialects(registry);
3336
mlir::cpuruntime::registerConvertCPURuntimeToLLVMInterface(registry);
37+
mlir::registerConvertXeVMToLLVMInterface(registry);
3438
#ifdef GC_HAS_ONEDNN_DIALECT
3539
registry.insert<mlir::onednn_graph::OneDNNGraphDialect>();
3640
#endif
3741
llvm::InitializeNativeTarget();
3842
llvm::InitializeNativeTargetAsmPrinter();
3943
llvm::InitializeNativeTargetAsmParser();
4044
mlir::registerAllToLLVMIRTranslations(registry);
45+
mlir::registerXeVMDialectTranslation(registry);
4146
return registry;
4247
}
4348

lib/gc/Transforms/GPU/Pipeline.cpp

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

99
#include <string>
1010

11+
#include "gc/Conversion/Passes.h"
1112
#include "gc/Transforms/Passes.h"
12-
1313
#include "imex/Conversion/Passes.h"
1414
#include "imex/Transforms/Passes.h"
1515

@@ -110,7 +110,7 @@ void populateGPUPipeline(OpPassManager &pm,
110110
pm.addPass(createArithToLLVMConversionPass());
111111
pm.addPass(createConvertFuncToLLVMPass());
112112
pm.addPass(createConvertMathToLLVMPass());
113-
113+
pm.addPass(createConvertXeVMToLLVMPass());
114114
if (pipelineOpts.useGpuRuntime) {
115115
pm.addPass(createGpuToGpuOcl({pipelineOpts.callFinish}));
116116
} else {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// RUN: gc-gpu-runner --shared-libs=%mlir_runner_utils %s | FileCheck %s
2+
3+
module{
4+
5+
func.func @load_store(%src: memref<8x16xf32>, %dst: memref<8x16xf32>) -> memref<8x16xf32> {
6+
%constant = arith.constant 1.23 : f32
7+
%c0 = arith.constant 0 : index
8+
memref.store %constant, %dst[%c0, %c0] : memref<8x16xf32>
9+
10+
%0 = memref.extract_aligned_pointer_as_index %src : memref<8x16xf32> -> index
11+
%1 = arith.index_cast %0 : index to i64
12+
%ptr_generic = llvm.inttoptr %1 : i64 to !llvm.ptr
13+
%ptr = llvm.addrspacecast %ptr_generic : !llvm.ptr to !llvm.ptr<1>
14+
15+
16+
%base_width = arith.constant 16 : i32
17+
%base_height = arith.constant 16 : i32
18+
%base_pitch = arith.constant 16 : i32
19+
%x = arith.constant 0 : i32
20+
%y = arith.constant 0 : i32
21+
22+
%loaded = xevm.blockload2d %ptr, %base_width, %base_height, %base_pitch, %x, %y {elem_size_in_bits=32, tile_width=16, tile_height=8, v_blocks=1, transpose=false, vnni_transform=false, l1_cache_control=Default, l3_cache_control=Default} : (!llvm.ptr<1>, i32, i32, i32, i32, i32) -> vector<8xi32>
23+
24+
%dst_ptr_as_idx = memref.extract_aligned_pointer_as_index %dst : memref<8x16xf32> -> index
25+
%dst_ptr_as_i64 = arith.index_cast %dst_ptr_as_idx : index to i64
26+
%dst_ptr_generic = llvm.inttoptr %dst_ptr_as_i64 : i64 to !llvm.ptr
27+
%dst_ptr = llvm.addrspacecast %dst_ptr_generic : !llvm.ptr to !llvm.ptr<1>
28+
29+
xevm.blockstore2d %dst_ptr, %base_width, %base_height, %base_pitch, %x, %y, %loaded {elem_size_in_bits=32, tile_width=16, tile_height=8, v_blocks=1, l1_cache_control=Default, l3_cache_control=Default} : (!llvm.ptr<1>, i32, i32, i32, i32, i32, vector<8xi32>)
30+
31+
return %dst : memref<8x16xf32>
32+
}
33+
34+
func.func @main() {
35+
%src = memref.alloc() : memref<8x16xf32>
36+
%dst = memref.alloc() : memref<8x16xf32>
37+
%gpu_res = call @load_store(%src, %dst) : (memref<8x16xf32>, memref<8x16xf32>) -> memref<8x16xf32>
38+
%cast = memref.cast %gpu_res : memref<8x16xf32> to memref<*xf32>
39+
call @printMemrefF32(%cast) : (memref<*xf32>) -> ()
40+
return
41+
}
42+
43+
func.func private @printMemrefF32(%ptr : memref<*xf32>)
44+
45+
}

0 commit comments

Comments
 (0)