|
8 | 8 |
|
9 | 9 | ; RUN: %opt %use_old_pass_manager% -GenXLoadStoreLegalization -march=genx64 -mcpu=Xe2 -mtriple=spir64-unknown-unknown -S %s | FileCheck %s
|
10 | 10 |
|
11 |
| -declare <6 x i32> @llvm.vc.internal.lsc.load.block.2d.ugm.v6i32.v2i8(i1, i8, <2 x i8>, i8, i16, i16, i64, i32, i32, i32, i32, i32, i32, i32, <6 x i32>) |
12 | 11 | declare <32 x i16> @llvm.vc.internal.lsc.load.block.2d.ugm.v32i16.v2i8(i1, i8, <2 x i8>, i8, i16, i16, i64, i32, i32, i32, i32, i32, i32, i32, <32 x i16>)
|
13 | 12 | declare <16 x i8> @llvm.vc.internal.lsc.load.2d.ugm.desc.v16i8.v2i8(i1, <2 x i8>, i8, i16, i16, <16 x i32>, i32, i32, <16 x i8>)
|
14 | 13 | declare <16 x i32> @llvm.vc.internal.lsc.load.2d.ugm.desc.v16i32.v2i8(i1, <2 x i8>, i8, i16, i16, <16 x i32>, i32, i32, <16 x i32>)
|
15 | 14 | declare <65 x i8> @llvm.vc.internal.lsc.load.2d.ugm.desc.transpose.v65i8.v2i8(i1, <2 x i8>, i8, i16, i16, <16 x i32>, i32, i32, <65 x i8>)
|
| 15 | +declare <80 x i16> @llvm.vc.internal.lsc.load.block.2d.ugm.vnni.v80i16.v2i8(i1, i8, <2 x i8>, i8, i16, i16, i64, i32, i32, i32, i32, i32, i32, i32, <80 x i16>) |
16 | 16 |
|
17 | 17 | ; CHECK-LABEL: @test_load(
|
18 |
| -define <6 x i32> @test_load(i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, <6 x i32> %passthru) { |
19 |
| -; CHECK: [[WRREG:%[^ ]+]] = call <16 x i32> @llvm.genx.wrregioni.v16i32.v6i32.i16.i1(<16 x i32> undef, <6 x i32> %passthru, i32 1, i32 1, i32 0, i16 0, i32 undef, i1 true) |
20 |
| -; CHECK: [[LOAD:%[^ ]+]] = call <16 x i32> @llvm.vc.internal.lsc.load.block.2d.ugm.v16i32.v2i8(i1 true, i8 3, <2 x i8> <i8 1, i8 2>, i8 1, i16 2, i16 3, i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, i32 0, i32 0, <16 x i32> [[WRREG]]) |
21 |
| -; CHECK: [[RDREG:%[^ ]+]] = call <6 x i32> @llvm.genx.rdregioni.v6i32.v16i32.i16(<16 x i32> [[LOAD]], i32 1, i32 1, i32 0, i16 0, i32 undef) |
22 |
| -; CHECK: ret <6 x i32> [[RDREG]] |
| 18 | +define <80 x i16> @test_load(i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, <80 x i16> %passthru) { |
23 | 19 |
|
24 |
| - %load = call <6 x i32> @llvm.vc.internal.lsc.load.block.2d.ugm.v6i32.v2i8(i1 true, i8 3, <2 x i8> <i8 1, i8 2>, i8 1, i16 2, i16 3, i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, i32 0, i32 0, <6 x i32> %passthru) |
25 |
| - ret <6 x i32> %load |
| 20 | +; CHECK: [[WRREG:%[^ ]+]] = call <96 x i16> @llvm.genx.wrregioni.v96i16.v80i16.i16.i1(<96 x i16> undef, <80 x i16> %passthru, i32 1, i32 1, i32 0, i16 0, i32 undef, i1 true) |
| 21 | +; CHECK: [[LOAD:%[^ ]+]] = call <96 x i16> @llvm.vc.internal.lsc.load.block.2d.ugm.vnni.v96i16.v2i8(i1 true, i8 2, <2 x i8> zeroinitializer, i8 1, i16 6, i16 10, i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, i32 0, i32 0, <96 x i16> [[WRREG]]) |
| 22 | +; CHECK: [[RDREG:%[^ ]+]] = call <80 x i16> @llvm.genx.rdregioni.v80i16.v96i16.i16(<96 x i16> [[LOAD]], i32 1, i32 1, i32 0, i16 0, i32 undef) |
| 23 | +; CHECK: ret <80 x i16> [[RDREG]] |
| 24 | + |
| 25 | + %load = call <80 x i16> @llvm.vc.internal.lsc.load.block.2d.ugm.vnni.v80i16.v2i8(i1 true, i8 2, <2 x i8> zeroinitializer, i8 1, i16 6, i16 10, i64 %base, i32 %width, i32 %height, i32 %pitch, i32 %x, i32 %y, i32 0, i32 0, <80 x i16> %passthru) |
| 26 | + ret <80 x i16> %load |
26 | 27 | }
|
27 | 28 |
|
28 | 29 | ; CHECK-LABEL: @test_load_whole_grf(
|
@@ -56,8 +57,8 @@ define <16 x i32> @test_load_desc_whole_grf(<16 x i32> %addr) {
|
56 | 57 |
|
57 | 58 | ; CHECK-LABEL: test_load_desc_transpose_undef(
|
58 | 59 | define <65 x i8> @test_load_desc_transpose_undef(<16 x i32> %addr) {
|
59 |
| -; CHECK: [[LOAD:%[^ ]+]] = call <64 x i8> @llvm.vc.internal.lsc.load.2d.ugm.desc.transpose.v64i8.v2i8(i1 true, <2 x i8> <i8 2, i8 2>, i8 1, i16 13, i16 5, <16 x i32> %addr, i32 0, i32 0, <64 x i8> undef) |
60 |
| -; CHECK: [[RDREG:%[^ ]+]] = call <65 x i8> @llvm.genx.rdregioni.v65i8.v64i8.i16(<64 x i8> [[LOAD]], i32 1, i32 1, i32 0, i16 0, i32 undef) |
| 60 | +; CHECK: [[LOAD:%[^ ]+]] = call <128 x i8> @llvm.vc.internal.lsc.load.2d.ugm.desc.transpose.v128i8.v2i8(i1 true, <2 x i8> <i8 2, i8 2>, i8 1, i16 13, i16 5, <16 x i32> %addr, i32 0, i32 0, <128 x i8> undef) |
| 61 | +; CHECK: [[RDREG:%[^ ]+]] = call <65 x i8> @llvm.genx.rdregioni.v65i8.v128i8.i16(<128 x i8> %1, i32 1, i32 1, i32 0, i16 0, i32 undef) |
61 | 62 | ; CHECK: ret <65 x i8> [[RDREG]]
|
62 | 63 |
|
63 | 64 | %load = call <65 x i8> @llvm.vc.internal.lsc.load.2d.ugm.desc.transpose.v65i8.v2i8(i1 true, <2 x i8> <i8 2, i8 2>, i8 1, i16 13, i16 5, <16 x i32> %addr, i32 0, i32 0, <65 x i8> undef)
|
|
0 commit comments