@@ -1043,6 +1043,24 @@ static bool buildExtendedBitOpsInst(const SPIRV::IncomingCall *Call,
10431043 return true ;
10441044}
10451045
1046+ // / Helper function for building Intel's bindless image instructions.
1047+ static bool buildBindlessImageINTELInst (const SPIRV::IncomingCall *Call,
1048+ unsigned Opcode,
1049+ MachineIRBuilder &MIRBuilder,
1050+ SPIRVGlobalRegistry *GR) {
1051+ // Generate SPIRV instruction accordingly.
1052+ if (Call->isSpirvOp ())
1053+ return buildOpFromWrapper (MIRBuilder, Opcode, Call,
1054+ GR->getSPIRVTypeID (Call->ReturnType ));
1055+
1056+ auto MIB = MIRBuilder.buildInstr (Opcode)
1057+ .addDef (Call->ReturnRegister )
1058+ .addUse (GR->getSPIRVTypeID (Call->ReturnType ))
1059+ .addUse (Call->Arguments [0 ]);
1060+
1061+ return true ;
1062+ }
1063+
10461064static unsigned getNumComponentsForDim (SPIRV::Dim::Dim dim) {
10471065 switch (dim) {
10481066 case SPIRV::Dim::DIM_1D:
@@ -2232,6 +2250,17 @@ static bool generateExtendedBitOpsInst(const SPIRV::IncomingCall *Call,
22322250 return buildExtendedBitOpsInst (Call, Opcode, MIRBuilder, GR);
22332251}
22342252
2253+ static bool generateBindlessImageINTELInst (const SPIRV::IncomingCall *Call,
2254+ MachineIRBuilder &MIRBuilder,
2255+ SPIRVGlobalRegistry *GR) {
2256+ // Lookup the instruction opcode in the TableGen records.
2257+ const SPIRV::DemangledBuiltin *Builtin = Call->Builtin ;
2258+ unsigned Opcode =
2259+ SPIRV::lookupNativeBuiltin (Builtin->Name , Builtin->Set )->Opcode ;
2260+
2261+ return buildBindlessImageINTELInst (Call, Opcode, MIRBuilder, GR);
2262+ }
2263+
22352264static bool buildNDRange (const SPIRV::IncomingCall *Call,
22362265 MachineIRBuilder &MIRBuilder,
22372266 SPIRVGlobalRegistry *GR) {
@@ -2809,6 +2838,8 @@ std::optional<bool> lowerBuiltin(const StringRef DemangledCall,
28092838 return generateCoopMatrInst (Call.get (), MIRBuilder, GR);
28102839 case SPIRV::ExtendedBitOps:
28112840 return generateExtendedBitOpsInst (Call.get (), MIRBuilder, GR);
2841+ case SPIRV::BindlessINTEL:
2842+ return generateBindlessImageINTELInst (Call.get (), MIRBuilder, GR);
28122843 }
28132844 return false ;
28142845}
0 commit comments