11// RUN: triton-opt -convert-tritongen-to-llvm -split-input-file %s | FileCheck %s
22
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+
331// 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}
432
533llvm.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
4977
5078// -----
5179
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+
52108llvm.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 >) {
53109 // CHECK: llvm.mlir.constant(2 : i32) : i32
54110 // 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
62118
63119// -----
64120
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+
65149llvm.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 >) {
66150 // CHECK: llvm.mlir.constant(4 : i32) : i32
67151 // CHECK: [[ElemSize:%.*]] = llvm.mlir.constant(4 : i32) : i32
0 commit comments