[SPIR-V] Address comments on SPV_INTEL_masked_gather_scatter extension implementation (#186336)

Address comments left after merge of #185418
This commit is contained in:
Arseniy Obolenskiy 2026-03-16 11:55:34 +01:00 committed by GitHub
parent e4a2d9cd8a
commit 2708cd9db2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 31 additions and 13 deletions

View File

@ -3306,7 +3306,7 @@ bool SPIRVEmitIntrinsics::processMaskedMemIntrinsic(IntrinsicInst &I) {
Value *Mask = I.getArgOperand(1);
Value *Passthru = I.getArgOperand(2);
// Alignment is stored as a parameter attribute, not as a regular parameter
// Alignment is stored as a parameter attribute, not as a regular parameter.
uint32_t Alignment = I.getParamAlign(0).valueOrOne().value();
SmallVector<Value *, 4> Args = {Ptrs, B.getInt32(Alignment), Mask,
@ -3338,7 +3338,7 @@ bool SPIRVEmitIntrinsics::processMaskedMemIntrinsic(IntrinsicInst &I) {
Value *Mask = I.getArgOperand(2);
// Alignment is stored as a parameter attribute on the ptrs parameter (arg
// 1)
// 1).
uint32_t Alignment = I.getParamAlign(1).valueOrOne().value();
SmallVector<Value *, 4> Args = {Values, Ptrs, B.getInt32(Alignment), Mask};

View File

@ -316,7 +316,6 @@ SPIRVTypeInst
SPIRVGlobalRegistry::getOpTypeVector(uint32_t NumElems, SPIRVTypeInst ElemType,
MachineIRBuilder &MIRBuilder) {
auto EleOpc = ElemType->getOpcode();
(void)EleOpc;
assert(NumElems >= 2 && "SPIR-V OpTypeVector requires at least 2 components");
if (EleOpc == SPIRV::OpTypePointer) {

View File

@ -1760,11 +1760,11 @@ bool SPIRVInstructionSelector::selectMaskedGather(Register ResVReg,
// 3: alignment (i32 immediate)
// 4: mask (vector of i1)
// 5: passthru/fill value
Register PtrsReg = I.getOperand(2).getReg();
uint32_t Alignment = I.getOperand(3).getImm();
Register MaskReg = I.getOperand(4).getReg();
Register PassthruReg = I.getOperand(5).getReg();
Register AlignmentReg = buildI32Constant(Alignment, I);
const Register PtrsReg = I.getOperand(2).getReg();
const uint32_t Alignment = I.getOperand(3).getImm();
const Register MaskReg = I.getOperand(4).getReg();
const Register PassthruReg = I.getOperand(5).getReg();
const Register AlignmentReg = buildI32Constant(Alignment, I);
MachineBasicBlock &BB = *I.getParent();
auto MIB =
@ -1787,11 +1787,11 @@ bool SPIRVInstructionSelector::selectMaskedScatter(MachineInstr &I) const {
// 2: vector of pointers
// 3: alignment (i32 immediate)
// 4: mask (vector of i1)
Register ValuesReg = I.getOperand(1).getReg();
Register PtrsReg = I.getOperand(2).getReg();
uint32_t Alignment = I.getOperand(3).getImm();
Register MaskReg = I.getOperand(4).getReg();
Register AlignmentReg = buildI32Constant(Alignment, I);
const Register ValuesReg = I.getOperand(1).getReg();
const Register PtrsReg = I.getOperand(2).getReg();
const uint32_t Alignment = I.getOperand(3).getImm();
const Register MaskReg = I.getOperand(4).getReg();
const Register AlignmentReg = buildI32Constant(Alignment, I);
MachineBasicBlock &BB = *I.getParent();
auto MIB =

View File

@ -1,3 +1,7 @@
; Test that llvm.masked.gather produces an error when the
; SPV_INTEL_masked_gather_scatter extension is not enabled, since vector of
; pointers is not supported in SPIR-V without this extension.
; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s
declare <4 x i32> @llvm.masked.gather.v4i32.v4p1(<4 x ptr addrspace(1)>, i32, <4 x i1>, <4 x i32>)

View File

@ -1,3 +1,7 @@
; Test that llvm.masked.gather and llvm.masked.scatter intrinsics are correctly
; lowered to OpMaskedGatherINTEL and OpMaskedScatterINTEL SPIR-V instructions
; when the SPV_INTEL_masked_gather_scatter extension is enabled.
; RUN: llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_masked_gather_scatter %s -o - | FileCheck %s
; TODO: spirv-val does not support vector operands in OpConvertPtrToU and OpConvertUToPtr with SPV_INTEL_masked_gather_scatter
; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_masked_gather_scatter %s -o - -filetype=obj | spirv-val %}

View File

@ -1,3 +1,7 @@
; Test that llvm.masked.scatter produces an error when the
; SPV_INTEL_masked_gather_scatter extension is not enabled, since vector of
; pointers is not supported in SPIR-V without this extension.
; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s
declare void @llvm.masked.scatter.v4i32.v4p1(<4 x i32>, <4 x ptr addrspace(1)>, i32, <4 x i1>)

View File

@ -1,3 +1,6 @@
; Test that ptrtoint on a vector of pointers without the
; SPV_INTEL_masked_gather_scatter extension produces an error.
; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s
; CHECK: error:{{.*}}Vector of pointers requires SPV_INTEL_masked_gather_scatter extension

View File

@ -1,3 +1,7 @@
; Test that ptrtoint and inttoptr on vectors of pointers are correctly lowered
; to OpConvertPtrToU and OpConvertUToPtr when SPV_INTEL_masked_gather_scatter
; extension is enabled.
; RUN: llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_masked_gather_scatter %s -o - | FileCheck %s
; TODO: spirv-val does not support vector operands in OpConvertPtrToU and OpConvertUToPtr with SPV_INTEL_masked_gather_scatter
; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_masked_gather_scatter %s -o - -filetype=obj | spirv-val %}