Skip to content

Commit 033a2de

Browse files
gkluczekigcbot
authored andcommitted
Minor media block and inline sampler changes
Changing operand 0 type of media block intrinsics to any_int. Changing alignment of inline sampler field and not adding zext when not needed.
1 parent fa489af commit 033a2de

File tree

11 files changed

+66
-54
lines changed

11 files changed

+66
-54
lines changed

IGC/AdaptorCommon/ImplicitArgs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static const std::vector<ImplicitArg> IMPLICIT_ARGS = {
6262
ImplicitArg(ImplicitArg::SAMPLER_ADDRESS, "smpAddress", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),
6363
ImplicitArg(ImplicitArg::SAMPLER_NORMALIZED, "smpNormalized", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),
6464
ImplicitArg(ImplicitArg::SAMPLER_SNAP_WA, "smpSnapWA", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),
65-
ImplicitArg(ImplicitArg::INLINE_SAMPLER, "inlineSampler", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),
65+
ImplicitArg(ImplicitArg::INLINE_SAMPLER, "inlineSampler", ImplicitArg::LONG, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_QWORD, true),
6666
ImplicitArg(ImplicitArg::FLAT_IMAGE_BASEOFFSET, "flatImageBaseoffset", ImplicitArg::LONG, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_QWORD, true),
6767
ImplicitArg(ImplicitArg::FLAT_IMAGE_HEIGHT, "flatImageHeight", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),
6868
ImplicitArg(ImplicitArg::FLAT_IMAGE_WIDTH, "flatImageWidth", ImplicitArg::INT, WIAnalysis::UNIFORM_GLOBAL, 1, ImplicitArg::ALIGN_DWORD, true),

IGC/Compiler/Optimizer/OCLBIUtils.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,15 @@ class COCL_sample : public CImagesBI
506506
return nullptr;
507507
}
508508
auto *binOp = cast<BinaryOperator>(samplerValue);
509-
auto *argExt = new ZExtInst(arg, Type::getInt64Ty(*m_pCtx), "", binOp);
510-
binOp->setOperand(0, argExt);
509+
if (arg->getType() == Type::getInt64Ty(*m_pCtx))
510+
{
511+
binOp->setOperand(0, arg);
512+
}
513+
else
514+
{
515+
auto * argExt = new ZExtInst(arg, Type::getInt64Ty(*m_pCtx), "", binOp);
516+
binOp->setOperand(0, argExt);
517+
}
511518

512519
unsigned addressSpace = IGC::EncodeAS4GFXResource(*samplerIndex, BufferType::BINDLESS_SAMPLER);
513520
Type *ptrTy = PointerType::get(m_pFloatType, addressSpace);

IGC/Compiler/Optimizer/OpenCLPasses/SubGroupFuncs/SubGroupFuncsResolution.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -300,22 +300,24 @@ void SubGroupFuncsResolution::mediaBlockRead(llvm::CallInst& CI)
300300

301301
if (use && isa<BitCastInst>(use) && (use->getType()->getScalarType()->isFloatTy() || use->getType()->getScalarType()->isHalfTy()))
302302
{
303+
Type* types[] = { use->getType(), CI.getArgOperand(0)->getType() };
303304
BitCastInst* bitCast = cast<BitCastInst>(use);
304305
Function* simdMediaBlockReadFunc = GenISAIntrinsic::getDeclaration(
305306
CI.getCalledFunction()->getParent(),
306307
GenISAIntrinsic::GenISA_simdMediaBlockRead,
307-
use->getType());
308+
types);
308309
Instruction* simdMediaBlockRead = CallInst::Create(simdMediaBlockReadFunc, args, "", &CI);
309310
use->replaceAllUsesWith(simdMediaBlockRead);
310311
updateDebugLoc(&CI, simdMediaBlockRead);
311312
m_instsToDelete.push_back(bitCast);
312313
m_instsToDelete.push_back(&CI);
313314
}
314315
else {
316+
Type* types[] = { CI.getType(), CI.getArgOperand(0)->getType() };
315317
Function* simdMediaBlockReadFunc = GenISAIntrinsic::getDeclaration(
316318
CI.getCalledFunction()->getParent(),
317319
GenISAIntrinsic::GenISA_simdMediaBlockRead,
318-
CI.getType());
320+
types);
319321
Instruction* simdMediaBlockRead = CallInst::Create(simdMediaBlockReadFunc, args, "", &CI);
320322
updateDebugLoc(&CI, simdMediaBlockRead);
321323
CI.replaceAllUsesWith(simdMediaBlockRead);
@@ -330,10 +332,11 @@ void SubGroupFuncsResolution::mediaBlockWrite(llvm::CallInst& CI)
330332
pushMediaBlockArgs(args, CI);
331333
args.push_back(CI.getArgOperand(2)); // push data
332334

335+
Type* types[] = { CI.getArgOperand(0)->getType(), CI.getArgOperand(2)->getType() };
333336
Function* simdMediaBlockWriteFunc = GenISAIntrinsic::getDeclaration(
334337
CI.getCalledFunction()->getParent(),
335338
GenISAIntrinsic::GenISA_simdMediaBlockWrite,
336-
CI.getArgOperand(2)->getType());
339+
types);
337340
Instruction* simdMediaBlockWrite = CallInst::Create(simdMediaBlockWriteFunc, args, "", &CI);
338341
updateDebugLoc(&CI, simdMediaBlockWrite);
339342

@@ -924,10 +927,11 @@ void SubGroupFuncsResolution::visitCallInst(CallInst& CI)
924927
args.push_back(blockWidth);
925928
args.push_back(blockHeight);
926929

930+
Type* types[] = { CI.getCalledFunction()->getReturnType(), CI.getArgOperand(0)->getType() };
927931
Function* MediaBlockReadFunc = GenISAIntrinsic::getDeclaration(
928932
CI.getCalledFunction()->getParent(),
929933
GenISAIntrinsic::GenISA_MediaBlockRead,
930-
CI.getCalledFunction()->getReturnType());
934+
types);
931935

932936
auto* MediaBlockRead = cast<GenIntrinsicInst>(
933937
CallInst::Create(MediaBlockReadFunc, args, "", &CI));
@@ -977,10 +981,11 @@ void SubGroupFuncsResolution::visitCallInst(CallInst& CI)
977981
args.push_back(blockHeight);
978982
args.push_back(CI.getArgOperand(4)); // pixels
979983

984+
Type* types[] = { CI.getArgOperand(0)->getType(), CI.getArgOperand(4)->getType() };
980985
Function* MediaBlockWriteFunc = GenISAIntrinsic::getDeclaration(
981986
CI.getCalledFunction()->getParent(),
982987
GenISAIntrinsic::GenISA_MediaBlockWrite,
983-
CI.getArgOperand(4)->getType());
988+
types);
984989

985990
auto* MediaBlockWrite = cast<GenIntrinsicInst>(
986991
CallInst::Create(MediaBlockWriteFunc, args, "", &CI));

IGC/Compiler/tests/ScalarizeFunction/scalarize-phi-instruction-typed-pointers.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ define spir_kernel void @should_not_scalarize_8(i1 %switch, <16 x i16> %src1, <1
458458
; CHECK-NEXT: br label %[[EXIT]]
459459
; CHECK: [[EXIT]]:
460460
; CHECK-NEXT: [[SHOULD_NOT_SCALARIZE_ME:%.*]] = phi <16 x i16> [ [[SRC1]], %[[FIRST]] ], [ [[SRC2]], %[[SECOND]] ]
461-
; CHECK-NEXT: call void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> [[SHOULD_NOT_SCALARIZE_ME]])
461+
; CHECK-NEXT: call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> [[SHOULD_NOT_SCALARIZE_ME]])
462462
; CHECK-NEXT: ret void
463463
;
464464
entry:
@@ -469,7 +469,7 @@ second:
469469
br label %exit
470470
exit:
471471
%should_not_scalarize_me = phi <16 x i16> [ %src1, %first], [ %src2, %second]
472-
call void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> %should_not_scalarize_me)
472+
call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> %should_not_scalarize_me)
473473
ret void
474474
}
475475

@@ -610,7 +610,7 @@ declare <8 x float> @llvm.genx.GenISA.sub.group.dpas.v8f32.v8f32.v8i16.v8i32(<8
610610
declare i32 @llvm.genx.GenISA.dpas.v8i32(<8 x i32>, <8 x i32>, <8 x i32>, i32, i32, i32, i32, i1)
611611
declare void @llvm.genx.GenISA.simdBlockWrite.v2i32.p1v2i32(<2 x i32> addrspace(1)*, <2 x i32>)
612612
declare void @llvm.genx.GenISA.simdBlockWriteBindless.p2490368i8.v2f32.i32(i8 addrspace(2490368)*, <2 x float>, i32)
613-
declare void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32, i32, i32, i32, <16 x i16>)
613+
declare void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32, i32, i32, i32, <16 x i16>)
614614
declare void @llvm.genx.GenISA.LSC2DBlockWrite.p0i32(i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i1, i1, i32, <8 x i32>)
615615
declare void @llvm.genx.GenISA.LSC2DBlockWriteAddrPayload.p0i32.v16i16(i32*, i32, i32, i32, i32, i32, i32, i1, i1, i32, <16 x i16>)
616616
declare spir_func <8 x i32> @do_math_v8i32_v8i32(<8 x i32>) #1

IGC/Compiler/tests/ScalarizeFunction/scalarize-phi-instruction.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ define spir_kernel void @should_not_scalarize_8(i1 %switch, <16 x i16> %src1, <1
459459
; CHECK-NEXT: br label %[[EXIT]]
460460
; CHECK: [[EXIT]]:
461461
; CHECK-NEXT: [[SHOULD_NOT_SCALARIZE_ME:%.*]] = phi <16 x i16> [ [[SRC1]], %[[FIRST]] ], [ [[SRC2]], %[[SECOND]] ]
462-
; CHECK-NEXT: call void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> [[SHOULD_NOT_SCALARIZE_ME]])
462+
; CHECK-NEXT: call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> [[SHOULD_NOT_SCALARIZE_ME]])
463463
; CHECK-NEXT: ret void
464464
;
465465
entry:
@@ -470,7 +470,7 @@ second:
470470
br label %exit
471471
exit:
472472
%should_not_scalarize_me = phi <16 x i16> [ %src1, %first], [ %src2, %second]
473-
call void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> %should_not_scalarize_me)
473+
call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32 1, i32 1, i32 1, i32 1, <16 x i16> %should_not_scalarize_me)
474474
ret void
475475
}
476476

@@ -612,7 +612,7 @@ declare <8 x float> @llvm.genx.GenISA.sub.group.dpas.v8f32.v8f32.v8i16.v8i32(<8
612612
declare i32 @llvm.genx.GenISA.dpas.v8i32(<8 x i32>, <8 x i32>, <8 x i32>, i32, i32, i32, i32, i1)
613613
declare void @llvm.genx.GenISA.simdBlockWrite.v2i32.p1v2i32(ptr addrspace(1), <2 x i32>)
614614
declare void @llvm.genx.GenISA.simdBlockWriteBindless.p2490368i8.v2f32.i32(ptr addrspace(2490368), <2 x float>, i32)
615-
declare void @llvm.genx.GenISA.simdMediaBlockWrite.v16i16(i32, i32, i32, i32, <16 x i16>)
615+
declare void @llvm.genx.GenISA.simdMediaBlockWrite.i32.v16i16(i32, i32, i32, i32, <16 x i16>)
616616
declare void @llvm.genx.GenISA.LSC2DBlockWrite.p0i32(i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i1, i1, i32, <8 x i32>)
617617
declare void @llvm.genx.GenISA.LSC2DBlockWriteAddrPayload.p0i32.v16i16(ptr, i32, i32, i32, i32, i32, i32, i1, i1, i32, <16 x i16>)
618618
declare spir_func <8 x i32> @do_math_v8i32_v8i32(<8 x i32>) #1

IGC/Compiler/tests/SubGroupFuncsResolution/media_blockread.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ define spir_kernel void @test_bread(i32 addrspace(1)* %dst, %opencl.image2d_t.re
3737
; CHECK: [[TMP1:%.*]] = load <2 x i32>, <2 x i32>* [[COORD_ADDR]], align 8
3838
; CHECK: [[XOFFSET:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0
3939
; CHECK: [[YOFFSET:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1
40-
; CHECK: [[TMP2:%.*]] = call i32 @llvm.genx.GenISA.simdMediaBlockRead.i32(i32 0, i32 [[XOFFSET]], i32 [[YOFFSET]], i32 0)
40+
; CHECK: [[TMP2:%.*]] = call i32 @llvm.genx.GenISA.simdMediaBlockRead.i32.i32(i32 0, i32 [[XOFFSET]], i32 [[YOFFSET]], i32 0)
4141
; CHECK: store i32 [[TMP2]], i32* [[B_READ]], align 4
4242
;
43-
; CHECK: declare i32 @llvm.genx.GenISA.simdMediaBlockRead.i32(i32, i32, i32, i32) [[ATTR:#.*]]
43+
; CHECK: declare i32 @llvm.genx.GenISA.simdMediaBlockRead.i32.i32(i32, i32, i32, i32) [[ATTR:#.*]]
4444
; CHECK: attributes [[ATTR]] = { {{.*convergent.*}} }
4545
;
4646
entry:

IGC/Compiler/tests/SubGroupFuncsResolution/media_blockread_bindless.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ define spir_kernel void @test_kernel_sub_group_block_read_image(%spirv.Image._vo
1616
entry:
1717
; CHECK: [[IMG:%.*]] = ptrtoint %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)* %image to i64
1818
; CHECK-NEXT: [[IMG_TRUNC:%.*]] = trunc i64 [[IMG]] to i32
19-
; CHECK: call i16 @llvm.genx.GenISA.simdMediaBlockRead.i16(i32 [[IMG_TRUNC]], i32 %xOffset, i32 %yOffset, i32 0)
19+
; CHECK: call i16 @llvm.genx.GenISA.simdMediaBlockRead.i16.i32(i32 [[IMG_TRUNC]], i32 %xOffset, i32 %yOffset, i32 0)
2020
;
21-
; CHECK: declare i16 @llvm.genx.GenISA.simdMediaBlockRead.i16(i32, i32, i32, i32) [[ATTR:#.*]]
21+
; CHECK: declare i16 @llvm.genx.GenISA.simdMediaBlockRead.i16.i32(i32, i32, i32, i32) [[ATTR:#.*]]
2222
; CHECK: attributes [[ATTR]] = { {{.*convergent.*}} }
2323
;
2424
%0 = ptrtoint %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)* %image to i64

IGC/Compiler/tests/SubGroupFuncsResolution/media_blockwrite.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ define spir_kernel void @test_bwrite(%opencl.image2d_t.write_only addrspace(1)*
3636
; CHECK: [[TMP2:%.*]] = load i32, i32* [[SRC_ADDR]], align 4
3737
; CHECK: [[XOFFSET:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0
3838
; CHECK: [[YOFFSET:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1
39-
; CHECK: call void @llvm.genx.GenISA.simdMediaBlockWrite.i32(i32 1, i32 [[XOFFSET]], i32 [[YOFFSET]], i32 1, i32 [[TMP2]])
39+
; CHECK: call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.i32(i32 1, i32 [[XOFFSET]], i32 [[YOFFSET]], i32 1, i32 [[TMP2]])
4040
; CHECK: ret void
4141
;
42-
; CHECK: declare void @llvm.genx.GenISA.simdMediaBlockWrite.i32(i32, i32, i32, i32, i32) [[ATTR:#.*]]
42+
; CHECK: declare void @llvm.genx.GenISA.simdMediaBlockWrite.i32.i32(i32, i32, i32, i32, i32) [[ATTR:#.*]]
4343
; CHECK: attributes [[ATTR]] = { {{.*convergent.*}} }
4444
;
4545
entry:

IGC/Compiler/tests/SubGroupFuncsResolution/media_blockwrite_bindless.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ define spir_kernel void @test_kernel_sub_group_block_write_image(%spirv.Image._v
1616
entry:
1717
; CHECK: [[IMG:%.*]] = ptrtoint %spirv.Image._void_1_0_0_0_0_0_1 addrspace(1)* %image to i64
1818
; CHECK-NEXT: [[IMG_TRUNC:%.*]] = trunc i64 [[IMG]] to i32
19-
; CHECK: call void @llvm.genx.GenISA.simdMediaBlockWrite.i16(i32 [[IMG_TRUNC]], i32 %xOffset, i32 %yOffset, i32 0, i16
19+
; CHECK: call void @llvm.genx.GenISA.simdMediaBlockWrite.i32.i16(i32 [[IMG_TRUNC]], i32 %xOffset, i32 %yOffset, i32 0, i16
2020
;
21-
; CHECK: declare void @llvm.genx.GenISA.simdMediaBlockWrite.i16(i32, i32, i32, i32, i16) [[ATTR:#.*]]
21+
; CHECK: declare void @llvm.genx.GenISA.simdMediaBlockWrite.i32.i16(i32, i32, i32, i32, i16) [[ATTR:#.*]]
2222
; CHECK: attributes [[ATTR]] = { {{.*convergent.*}} }
2323
;
2424
%0 = ptrtoint %spirv.Image._void_1_0_0_0_0_0_1 addrspace(1)* %image to i64

IGC/GenISAIntrinsics/generator/input/Intrinsic_definitions.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ intrinsics:
11201120
arguments:
11211121
- !<ArgumentDefinition>
11221122
name: Arg0
1123-
type_definition: *i32
1123+
type_definition: *any_int
11241124
comment: "image id"
11251125
- !<ArgumentDefinition>
11261126
name: Arg1
@@ -1190,7 +1190,7 @@ intrinsics:
11901190
arguments:
11911191
- !<ArgumentDefinition>
11921192
name: Arg0
1193-
type_definition: *i32
1193+
type_definition: *any_int
11941194
comment: "image id"
11951195
- !<ArgumentDefinition>
11961196
name: Arg1
@@ -7773,7 +7773,7 @@ intrinsics:
77737773
arguments:
77747774
- !<ArgumentDefinition>
77757775
name: Arg0
7776-
type_definition: *i32
7776+
type_definition: *any_int
77777777
comment: ""
77787778
- !<ArgumentDefinition>
77797779
name: Arg1
@@ -7802,7 +7802,7 @@ intrinsics:
78027802
arguments:
78037803
- !<ArgumentDefinition>
78047804
name: Arg0
7805-
type_definition: *i32
7805+
type_definition: *any_int
78067806
comment: ""
78077807
- !<ArgumentDefinition>
78087808
name: Arg1

0 commit comments

Comments
 (0)