@@ -761,6 +761,22 @@ SPIRVToOCLBase::mutateCallImageOperands(CallInst *CI, StringRef NewFuncName,
761761 return Mutator;
762762}
763763
764+ static bool isOCLDepthImage (Type *Ty) {
765+ if (auto *TET = dyn_cast<TargetExtType>(Ty)) {
766+ if (TET->getName () != " spirv.Image" )
767+ return false ;
768+ assert (TET->getNumIntParameters () > 2 &&
769+ " unexpected image TargetExtType parameter count" );
770+ return TET->getIntParameter (1 );
771+ }
772+
773+ StringRef ImageTypeName;
774+ if (isOCLImageType (Ty, &ImageTypeName))
775+ return ImageTypeName.contains (" _depth_" );
776+
777+ return false ;
778+ }
779+
764780void SPIRVToOCLBase::visitCallSPIRVImageSampleExplicitLodBuiltIn (CallInst *CI,
765781 Op OC) {
766782 Type *T = CI->getType ();
@@ -772,12 +788,8 @@ void SPIRVToOCLBase::visitCallSPIRVImageSampleExplicitLodBuiltIn(CallInst *CI,
772788 CallInst *CallSampledImg = cast<CallInst>(CI->getArgOperand (0 ));
773789 auto Img = getCallValue (CallSampledImg, 0 );
774790 auto Sampler = getCallValue (CallSampledImg, 1 );
775- bool IsDepthImage = false ;
791+ const bool IsDepthImage = isOCLDepthImage (Img. second ) ;
776792 Mutator.mapArg (0 , [&](Value *SampledImg) {
777- StringRef ImageTypeName;
778- if (isOCLImageType (Img.second , &ImageTypeName))
779- IsDepthImage = ImageTypeName.contains (" _depth_" );
780-
781793 if (CallSampledImg->hasOneUse ()) {
782794 CallSampledImg->replaceAllUsesWith (
783795 PoisonValue::get (CallSampledImg->getType ()));
0 commit comments