Skip to content

Commit bf77879

Browse files
svenvhdwoodwor-intel
authored andcommitted
Use mutateArgsForImageOperands for SPIRVImageReadBuiltIn
Original commit: KhronosGroup/SPIRV-LLVM-Translator@18d1f41
1 parent d79e810 commit bf77879

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

llvm-spirv/lib/SPIRV/SPIRVToOCL.cpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -765,21 +765,22 @@ static char getTypeSuffix(Type *T) {
765765
return Suffix;
766766
}
767767

768-
void SPIRVToOCLBase::mutateArgsForImageOperands(std::vector<Value *> &Args) {
769-
if (Args.size() > 3) {
770-
ConstantInt *ImOp = dyn_cast<ConstantInt>(Args[3]);
768+
void SPIRVToOCLBase::mutateArgsForImageOperands(std::vector<Value *> &Args,
769+
unsigned ImOpArgIndex) {
770+
if (Args.size() > ImOpArgIndex) {
771+
ConstantInt *ImOp = dyn_cast<ConstantInt>(Args[ImOpArgIndex]);
771772
uint64_t ImOpValue = 0;
772773
if (ImOp)
773774
ImOpValue = ImOp->getZExtValue();
774775
// Drop "Image Operands" argument.
775-
Args.erase(Args.begin() + 3, Args.begin() + 4);
776+
Args.erase(Args.begin() + ImOpArgIndex);
776777

777-
if (Args.size() > 3) {
778-
ConstantFP *LodVal = dyn_cast<ConstantFP>(Args[3]);
778+
if (Args.size() > ImOpArgIndex) {
779+
ConstantFP *LodVal = dyn_cast<ConstantFP>(Args[ImOpArgIndex]);
779780
// If the image operand is LOD and its value is zero, drop it too.
780781
if (LodVal && LodVal->isNullValue() &&
781782
ImOpValue == ImageOperandsMask::ImageOperandsLodMask)
782-
Args.erase(Args.begin() + 3, Args.end());
783+
Args.erase(Args.begin() + ImOpArgIndex, Args.end());
783784
}
784785
}
785786
}
@@ -806,7 +807,7 @@ void SPIRVToOCLBase::visitCallSPIRVImageSampleExplicitLodBuiltIn(CallInst *CI,
806807
auto Sampler = CallSampledImg->getArgOperand(1);
807808
Args[0] = Img;
808809
Args.insert(Args.begin() + 1, Sampler);
809-
mutateArgsForImageOperands(Args);
810+
mutateArgsForImageOperands(Args, 3);
810811
if (CallSampledImg->hasOneUse()) {
811812
CallSampledImg->replaceAllUsesWith(
812813
UndefValue::get(CallSampledImg->getType()));
@@ -841,7 +842,7 @@ void SPIRVToOCLBase::visitCallSPIRVImageWriteBuiltIn(CallInst *CI, Op OC) {
841842
M, CI,
842843
[=](CallInst *, std::vector<Value *> &Args) {
843844
llvm::Type *T = Args[2]->getType();
844-
mutateArgsForImageOperands(Args);
845+
mutateArgsForImageOperands(Args, 3);
845846
if (Args.size() > 3) {
846847
std::swap(Args[2], Args[3]);
847848
}
@@ -856,10 +857,7 @@ void SPIRVToOCLBase::visitCallSPIRVImageReadBuiltIn(CallInst *CI, Op OC) {
856857
mutateCallInstOCL(
857858
M, CI,
858859
[=](CallInst *, std::vector<Value *> &Args) {
859-
// Drop "Image operands" argument
860-
if (Args.size() > 2)
861-
Args.erase(Args.begin() + 2);
862-
860+
mutateArgsForImageOperands(Args, 2);
863861
llvm::Type *T = CI->getType();
864862
return std::string(kOCLBuiltinName::ReadImage) + getTypeSuffix(T);
865863
},

llvm-spirv/lib/SPIRV/SPIRVToOCL.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,10 @@ class SPIRVToOCLBase : public InstVisitor<SPIRVToOCLBase> {
272272

273273
std::string translateOpaqueType(StringRef STName);
274274

275-
/// Mutate the argument list based on (optional) image operands.
276-
void mutateArgsForImageOperands(std::vector<Value *> &Args);
275+
/// Mutate the argument list based on (optional) image operands at position
276+
/// ImOpArgIndex.
277+
void mutateArgsForImageOperands(std::vector<Value *> &Args,
278+
unsigned ImOpArgIndex);
277279

278280
protected:
279281
Module *M;

0 commit comments

Comments
 (0)