|
| 1 | +// RUN: mlir-translate --split-input-file -mlir-to-llvmir %s | FileCheck %s |
| 2 | + |
| 3 | +module { |
| 4 | + llvm.func spir_funccc @_Z41intel_sub_group_2d_block_read_16b_8r16x1cPU3AS1viiiDv2_iPt(!llvm.ptr<1> {llvm.nonnull, llvm.readonly}, i32, i32, i32, vector<2xi32>, !llvm.ptr {llvm.nonnull, llvm.writeonly}) attributes {no_unwind, will_return} |
| 5 | + llvm.func @blockload2d_cache_control(%arg0: !llvm.ptr<1>, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: i32) -> vector<8xi16> { |
| 6 | + %0 = llvm.mlir.undef : vector<2xi32> |
| 7 | + %1 = llvm.mlir.constant(0 : i32) : i32 |
| 8 | + %2 = llvm.mlir.constant(1 : i32) : i32 |
| 9 | + %3 = llvm.insertelement %arg4, %0[%1 : i32] : vector<2xi32> |
| 10 | + %4 = llvm.insertelement %arg5, %3[%2 : i32] : vector<2xi32> |
| 11 | + %5 = llvm.mlir.constant(8 : i32) : i32 |
| 12 | + %6 = llvm.alloca %5 x i16 : (i32) -> !llvm.ptr |
| 13 | + // CHECK-LABEL: call spir_func void @_Z41intel_sub_group_2d_block_read_16b_8r16x1cPU3AS1viiiDv2_iPt |
| 14 | + // CHECK-SAME: !spirv.DecorationCacheControlINTEL ![[DECO1:.*]] |
| 15 | + llvm.call spir_funccc @_Z41intel_sub_group_2d_block_read_16b_8r16x1cPU3AS1viiiDv2_iPt(%arg0, %arg1, %arg2, %arg3, %4, %6) |
| 16 | + {function_type = !llvm.func<void (ptr<1>, i32, i32, i32, vector<2xi32>, ptr)>, linkage = #llvm.linkage<external>, no_unwind, |
| 17 | + sym_name = "_Z41intel_sub_group_2d_block_read_16b_8r16x1cPU3AS1viiiDv2_iPt", visibility_ = 0 : i64, will_return, |
| 18 | + xevm.DecorationCacheControl = [[6442 : i32, 0 : i32, 1 : i32, 0 : i32], [6442 : i32, 1 : i32, 1 : i32, 0 : i32]]} |
| 19 | + : (!llvm.ptr<1> {llvm.nonnull, llvm.readonly}, i32, i32, i32, vector<2xi32>, !llvm.ptr {llvm.nonnull, llvm.writeonly}) -> () |
| 20 | + %7 = llvm.load %6 : !llvm.ptr -> vector<8xi16> |
| 21 | + llvm.return %7 : vector<8xi16> |
| 22 | + } |
| 23 | +} |
| 24 | + |
| 25 | +// CHECK: ![[DECO1]] = !{![[DECO2:.*]], ![[DECO3:.*]]} |
| 26 | +// CHECK: ![[DECO2]] = !{i32 6442, i32 0, i32 1, i32 0} |
| 27 | +// CHECK: ![[DECO3]] = !{i32 6442, i32 1, i32 1, i32 0} |
| 28 | + |
| 29 | +// ----- |
| 30 | +module { |
| 31 | + llvm.func spir_funccc @_Z42intel_sub_group_2d_block_write_32b_8r16x1cPU3AS1viiiDv2_iPj(!llvm.ptr<1> {llvm.nonnull, llvm.writeonly}, i32, i32, i32, vector<2xi32>, !llvm.ptr {llvm.nonnull, llvm.readonly}) attributes {no_unwind, will_return} |
| 32 | + llvm.func @blockstore2d_cache_control(%arg0: !llvm.ptr<1>, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: i32, %arg6: vector<8xi32>) { |
| 33 | + %0 = llvm.mlir.undef : vector<2xi32> |
| 34 | + %1 = llvm.mlir.constant(0 : i32) : i32 |
| 35 | + %2 = llvm.mlir.constant(1 : i32) : i32 |
| 36 | + %3 = llvm.insertelement %arg4, %0[%1 : i32] : vector<2xi32> |
| 37 | + %4 = llvm.insertelement %arg5, %3[%2 : i32] : vector<2xi32> |
| 38 | + %5 = llvm.mlir.constant(8 : i32) : i32 |
| 39 | + %6 = llvm.alloca %5 x i32 : (i32) -> !llvm.ptr |
| 40 | + llvm.store %arg6, %6 : vector<8xi32>, !llvm.ptr |
| 41 | + // CHECK-LABEL: call spir_func void @_Z42intel_sub_group_2d_block_write_32b_8r16x1cPU3AS1viiiDv2_iPj |
| 42 | + // CHECK-SAME: !spirv.DecorationCacheControlINTEL ![[DECO1:.*]] |
| 43 | + llvm.call spir_funccc @_Z42intel_sub_group_2d_block_write_32b_8r16x1cPU3AS1viiiDv2_iPj(%arg0, %arg1, %arg2, %arg3, %4, %6) |
| 44 | + {function_type = !llvm.func<void (ptr<1>, i32, i32, i32, vector<2xi32>, ptr)>, linkage = #llvm.linkage<external>, no_unwind, |
| 45 | + sym_name = "_Z42intel_sub_group_2d_block_write_32b_8r16x1cPU3AS1viiiDv2_iPj", visibility_ = 0 : i64, will_return, |
| 46 | + xevm.DecorationCacheControl = [[6443 : i32, 0 : i32, 2 : i32, 0 : i32], [6443 : i32, 1 : i32, 2 : i32, 0 : i32]]} |
| 47 | + : (!llvm.ptr<1> {llvm.nonnull, llvm.writeonly}, i32, i32, i32, vector<2xi32>, !llvm.ptr {llvm.nonnull, llvm.readonly}) -> () |
| 48 | + llvm.return |
| 49 | + } |
| 50 | +} |
| 51 | + |
| 52 | +// CHECK: ![[DECO1]] = !{![[DECO2:.*]], ![[DECO3:.*]]} |
| 53 | +// CHECK: ![[DECO2]] = !{i32 6443, i32 0, i32 2, i32 0} |
| 54 | +// CHECK: ![[DECO3]] = !{i32 6443, i32 1, i32 2, i32 0} |
| 55 | + |
| 56 | +// ----- |
| 57 | +module { |
| 58 | + llvm.func spir_funccc @_Z44intel_sub_group_2d_block_prefetch_8b_8r32x1cPU3AS1viiiDv2_i(!llvm.ptr<1> {llvm.nonnull}, i32, i32, i32, vector<2xi32>) attributes {memory_effects = #llvm.memory_effects<other = none, argMem = read, inaccessibleMem = none>, no_unwind} |
| 59 | + llvm.func @blockprefetch2d(%arg0: !llvm.ptr<1>, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: i32) { |
| 60 | + %0 = llvm.mlir.undef : vector<2xi32> |
| 61 | + %1 = llvm.mlir.constant(0 : i32) : i32 |
| 62 | + %2 = llvm.mlir.constant(1 : i32) : i32 |
| 63 | + %3 = llvm.insertelement %arg4, %0[%1 : i32] : vector<2xi32> |
| 64 | + %4 = llvm.insertelement %arg5, %3[%2 : i32] : vector<2xi32> |
| 65 | + // CHECK-LABEL: call spir_func void @_Z44intel_sub_group_2d_block_prefetch_8b_8r32x1cPU3AS1viiiDv2_i |
| 66 | + // CHECK-SAME: !spirv.DecorationCacheControlINTEL ![[DECO1:.*]] |
| 67 | + llvm.call spir_funccc @_Z44intel_sub_group_2d_block_prefetch_8b_8r32x1cPU3AS1viiiDv2_i(%arg0, %arg1, %arg2, %arg3, %4) |
| 68 | + {function_type = !llvm.func<void (ptr<1>, i32, i32, i32, vector<2xi32>)>, linkage = #llvm.linkage<external>, |
| 69 | + memory_effects = #llvm.memory_effects<other = none, argMem = read, inaccessibleMem = none>, no_unwind, |
| 70 | + sym_name = "_Z44intel_sub_group_2d_block_prefetch_8b_8r32x1cPU3AS1viiiDv2_i", visibility_ = 0 : i64, |
| 71 | + xevm.DecorationCacheControl = [[6442 : i32, 0 : i32, 1 : i32, 0 : i32], [6442 : i32, 1 : i32, 1 : i32, 0 : i32]]} |
| 72 | + : (!llvm.ptr<1> {llvm.nonnull}, i32, i32, i32, vector<2xi32>) -> () |
| 73 | + llvm.return |
| 74 | + } |
| 75 | +} |
| 76 | + |
| 77 | +// CHECK: ![[DECO1]] = !{![[DECO2:.*]], ![[DECO3:.*]]} |
| 78 | +// CHECK: ![[DECO2]] = !{i32 6442, i32 0, i32 1, i32 0} |
| 79 | +// CHECK: ![[DECO3]] = !{i32 6442, i32 1, i32 1, i32 0} |
| 80 | + |
| 81 | +// ----- |
| 82 | +module { |
| 83 | + llvm.func spir_funccc @_Z8prefetchPU3AS1Kcm(!llvm.ptr<1>, i64) attributes {memory_effects = #llvm.memory_effects<other = none, argMem = read, inaccessibleMem = none>, no_unwind} |
| 84 | + llvm.func @prefetch(%arg0: !llvm.ptr<1>) { |
| 85 | + %0 = llvm.mlir.constant(1 : i64) : i64 |
| 86 | + // CHECK-LABEL: call spir_func void @_Z8prefetchPU3AS1Kcm |
| 87 | + // CHECK-SAME: !spirv.DecorationCacheControlINTEL ![[DECO1:.*]] |
| 88 | + llvm.call spir_funccc @_Z8prefetchPU3AS1Kcm(%arg0, %0) |
| 89 | + {function_type = !llvm.func<void (ptr<1>, i64)>, linkage = #llvm.linkage<external>, |
| 90 | + memory_effects = #llvm.memory_effects<other = none, argMem = read, inaccessibleMem = none>, |
| 91 | + no_unwind, sym_name = "_Z8prefetchPU3AS1Kcm", visibility_ = 0 : i64, |
| 92 | + xevm.DecorationCacheControl = [[6442 : i32, 0 : i32, 1 : i32, 0 : i32], [6442 : i32, 1 : i32, 1 : i32, 0 : i32]]} |
| 93 | + : (!llvm.ptr<1>, i64) -> () |
| 94 | + llvm.return |
| 95 | + } |
| 96 | +} |
| 97 | + |
| 98 | +// CHECK: ![[DECO1]] = !{![[DECO2:.*]], ![[DECO3:.*]]} |
| 99 | +// CHECK: ![[DECO2]] = !{i32 6442, i32 0, i32 1, i32 0} |
| 100 | +// CHECK: ![[DECO3]] = !{i32 6442, i32 1, i32 1, i32 0} |
| 101 | + |
0 commit comments