1
1
// RUN: triton-opt -convert-tritongen-to-llvm -split-input-file %s | FileCheck %s
2
2
3
+ llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
4
+ // CHECK: [[ONE0:%.*]] = llvm.mlir.constant(1 : i32) : i32
5
+ // CHECK: [[PTR:%.*]] = llvm.ptrtoint %arg0 : !llvm.ptr<1> to i64
6
+ // CHECK: [[VAL_63:%.*]] = llvm.mlir.constant(-64 : i64) : i64
7
+ // CHECK: [[VAL_64:%.*]] = llvm.and [[PTR]], [[VAL_63]] : i64
8
+ // CHECK: [[VAL_65:%.*]] = llvm.inttoptr [[VAL_64]] : i64 to !llvm.ptr<1>
9
+ // CHECK: [[CL:%.*]] = llvm.mlir.constant(63 : i64) : i64
10
+ // CHECK: [[AND:%.*]] = llvm.and [[PTR]], [[CL]] : i64
11
+ // CHECK: [[TRUNC:%.*]] = llvm.trunc [[AND]] : i64 to i32
12
+ // CHECK: [[ADD:%.*]] = llvm.add %arg1, [[TRUNC]] : i32
13
+ // CHECK: [[ONE:%.*]] = llvm.mlir.constant(1 : i32) : i32
14
+ // CHECK: [[SHR:%.*]] = llvm.udiv [[TRUNC]], [[ONE]] : i32
15
+ // CHECK: [[X:%.*]] = llvm.add %arg4, [[SHR]] : i32
16
+ // CHECK: [[BASE_ALIGNED:%.*]] = llvm.ptrtoint [[VAL_65]] : !llvm.ptr<1> to i64
17
+ // CHECK: [[BASEWIDTH:%.*]] = llvm.sub [[ADD]], [[ONE0]] : i32
18
+ // CHECK: [[ELEM_BITS:%.*]] = llvm.mlir.constant(8 : i32) : i32
19
+ // CHECK: [[TILE_WIDTH:%.*]] = llvm.mlir.constant(8 : i32) : i32
20
+ // CHECK: [[TILE_HEIGHT:%.*]] = llvm.mlir.constant(8 : i32) : i32
21
+ // CHECK: [[VBLOCKS:%.*]] = llvm.mlir.constant(1 : i32) : i32
22
+ // CHECK: [[TRANSPOSE:%.*]] = llvm.mlir.constant(false) : i1
23
+ // CHECK: [[VNNI:%.*]] = llvm.mlir.constant(false) : i1
24
+ // CHECK: llvm.call spir_funccc @llvm.genx.GenISA.LSC2DBlockWrite.v8i16([[BASE_ALIGNED]], [[BASEWIDTH]], {{.*}}, [[X]], {{.*}}, [[ELEM_BITS]], [[TILE_WIDTH]], [[TILE_HEIGHT]], [[VBLOCKS]], [[TRANSPOSE]], [[VNNI]], {{.*}})
25
+ triton_gen.2Dblockstore %ptr , %base_width , %base_height , %base_pitch , %x , %y , %stored_val {elem_size_in_bits =8 , tile_width =8 , tile_height =8 , v_blocks =1 , cache_control =Default } : (!llvm.ptr <1 >, i32 , i32 , i32 , i32 , i32 , vector <8 xi16 >)
26
+ llvm.return
27
+ }
28
+
29
+ // -----
30
+
3
31
// CHECK: llvm.func spir_funccc @_Z33__spirv_Subgroup2DBlockStoreINTELiiiiPvPU3AS1viiiDv2_i(i32, i32, i32, i32, !llvm.ptr {llvm.nonnull, llvm.readonly}, !llvm.ptr<1> {llvm.nonnull, llvm.writeonly}, i32, i32, i32, vector<2xi32>) attributes {no_unwind, will_return}
4
32
5
33
llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi8 >) {
@@ -49,6 +77,34 @@ llvm.func @triton_gen.2Dblockstore(%ptr : !llvm.ptr<1>, %base_width : i32, %base
49
77
50
78
// -----
51
79
80
+ llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
81
+ // CHECK: [[ELEM_BITS:%.*]] = llvm.mlir.constant(16 : i32) : i32
82
+ // CHECK: [[TILE_WIDTH:%.*]] = llvm.mlir.constant(32 : i32) : i32
83
+ // CHECK: [[TILE_HEIGHT:%.*]] = llvm.mlir.constant(1 : i32) : i32
84
+ // CHECK: [[VBLOCKS:%.*]] = llvm.mlir.constant(1 : i32) : i32
85
+ // CHECK: [[TRANSPOSE:%.*]] = llvm.mlir.constant(false) : i1
86
+ // CHECK: [[VNNI:%.*]] = llvm.mlir.constant(false) : i1
87
+ // CHECK: llvm.call spir_funccc @llvm.genx.GenISA.LSC2DBlockWrite.v8i16({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}, [[ELEM_BITS]], [[TILE_WIDTH]], [[TILE_HEIGHT]], [[VBLOCKS]], [[TRANSPOSE]], [[VNNI]], {{.*}})
88
+ triton_gen.2Dblockstore %ptr , %base_width , %base_height , %base_pitch , %x , %y , %stored_val {elem_size_in_bits =16 , tile_width =32 , tile_height =1 , v_blocks =1 , cache_control =Default } : (!llvm.ptr <1 >, i32 , i32 , i32 , i32 , i32 , vector <8 xi16 >)
89
+ llvm.return
90
+ }
91
+
92
+ // -----
93
+
94
+ llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
95
+ // CHECK: [[ELEM_BITS:%.*]] = llvm.mlir.constant(16 : i32) : i32
96
+ // CHECK: [[TILE_WIDTH:%.*]] = llvm.mlir.constant(8 : i32) : i32
97
+ // CHECK: [[TILE_HEIGHT:%.*]] = llvm.mlir.constant(8 : i32) : i32
98
+ // CHECK: [[VBLOCKS:%.*]] = llvm.mlir.constant(1 : i32) : i32
99
+ // CHECK: [[TRANSPOSE:%.*]] = llvm.mlir.constant(false) : i1
100
+ // CHECK: [[VNNI:%.*]] = llvm.mlir.constant(false) : i1
101
+ // CHECK: llvm.call spir_funccc @llvm.genx.GenISA.LSC2DBlockWrite.v8i16({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}, [[ELEM_BITS]], [[TILE_WIDTH]], [[TILE_HEIGHT]], [[VBLOCKS]], [[TRANSPOSE]], [[VNNI]], {{.*}})
102
+ triton_gen.2Dblockstore %ptr , %base_width , %base_height , %base_pitch , %x , %y , %stored_val {elem_size_in_bits =16 , tile_width =8 , tile_height =8 , v_blocks =1 , cache_control =Default } : (!llvm.ptr <1 >, i32 , i32 , i32 , i32 , i32 , vector <8 xi16 >)
103
+ llvm.return
104
+ }
105
+
106
+ // -----
107
+
52
108
llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
53
109
// CHECK: llvm.mlir.constant(2 : i32) : i32
54
110
// CHECK: [[ElemSize:%.*]] = llvm.mlir.constant(2 : i32) : i32
@@ -62,6 +118,34 @@ llvm.func @triton_gen.2Dblockstore(%ptr : !llvm.ptr<1>, %base_width : i32, %base
62
118
63
119
// -----
64
120
121
+ llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
122
+ // CHECK: [[ELEM_BITS:%.*]] = llvm.mlir.constant(32 : i32) : i32
123
+ // CHECK: [[TILE_WIDTH:%.*]] = llvm.mlir.constant(4 : i32) : i32
124
+ // CHECK: [[TILE_HEIGHT:%.*]] = llvm.mlir.constant(8 : i32) : i32
125
+ // CHECK: [[VBLOCKS:%.*]] = llvm.mlir.constant(1 : i32) : i32
126
+ // CHECK: [[TRANSPOSE:%.*]] = llvm.mlir.constant(false) : i1
127
+ // CHECK: [[VNNI:%.*]] = llvm.mlir.constant(false) : i1
128
+ // CHECK: llvm.call spir_funccc @llvm.genx.GenISA.LSC2DBlockWrite.v8i16({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}, [[ELEM_BITS]], [[TILE_WIDTH]], [[TILE_HEIGHT]], [[VBLOCKS]], [[TRANSPOSE]], [[VNNI]], {{.*}})
129
+ triton_gen.2Dblockstore %ptr , %base_width , %base_height , %base_pitch , %x , %y , %stored_val {elem_size_in_bits =32 , tile_width =4 , tile_height =8 , v_blocks =1 , cache_control =Default } : (!llvm.ptr <1 >, i32 , i32 , i32 , i32 , i32 , vector <8 xi16 >)
130
+ llvm.return
131
+ }
132
+
133
+ // -----
134
+
135
+ llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi16 >) {
136
+ // CHECK: [[ELEM_BITS:%.*]] = llvm.mlir.constant(32 : i32) : i32
137
+ // CHECK: [[TILE_WIDTH:%.*]] = llvm.mlir.constant(8 : i32) : i32
138
+ // CHECK: [[TILE_HEIGHT:%.*]] = llvm.mlir.constant(8 : i32) : i32
139
+ // CHECK: [[VBLOCKS:%.*]] = llvm.mlir.constant(1 : i32) : i32
140
+ // CHECK: [[TRANSPOSE:%.*]] = llvm.mlir.constant(false) : i1
141
+ // CHECK: [[VNNI:%.*]] = llvm.mlir.constant(false) : i1
142
+ // CHECK: llvm.call spir_funccc @llvm.genx.GenISA.LSC2DBlockWrite.v8i16({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}, [[ELEM_BITS]], [[TILE_WIDTH]], [[TILE_HEIGHT]], [[VBLOCKS]], [[TRANSPOSE]], [[VNNI]], {{.*}})
143
+ triton_gen.2Dblockstore %ptr , %base_width , %base_height , %base_pitch , %x , %y , %stored_val {elem_size_in_bits =32 , tile_width =8 , tile_height =8 , v_blocks =1 , cache_control =Default } : (!llvm.ptr <1 >, i32 , i32 , i32 , i32 , i32 , vector <8 xi16 >)
144
+ llvm.return
145
+ }
146
+
147
+ // -----
148
+
65
149
llvm.func @triton_gen.2Dblockstore (%ptr : !llvm.ptr <1 >, %base_width : i32 , %base_height : i32 , %base_pitch : i32 , %x : i32 , %y : i32 , %stored_val : vector <8 xi32 >) {
66
150
// CHECK: llvm.mlir.constant(4 : i32) : i32
67
151
// CHECK: [[ElemSize:%.*]] = llvm.mlir.constant(4 : i32) : i32
0 commit comments