@@ -2876,49 +2876,46 @@ static SPIRVType *getInlineSpirvType(const TargetExtType *ExtensionType,
28762876 " parameter" );
28772877 auto Opcode = ExtensionType->getIntParameter (0 );
28782878
2879- return GR->getOrCreateUnknownType (
2880- ExtensionType, MIRBuilder, Opcode,
2881- [&ExtensionType, &GR, &MIRBuilder](llvm::MachineInstrBuilder Instr) {
2882- for (llvm::Type *Param : ExtensionType->type_params ()) {
2883- if (const TargetExtType *ParamEType =
2884- dyn_cast<TargetExtType>(Param)) {
2885- if (ParamEType->getName () == " spirv.IntegralConstant" ) {
2886- assert (ParamEType->getNumTypeParameters () == 1 &&
2887- " Inline SPIR-V integral constant builtin must have a type "
2888- " parameter" );
2889- assert (ParamEType->getNumIntParameters () == 1 &&
2890- " Inline SPIR-V integral constant builtin must have a "
2891- " value parameter" );
2892-
2893- auto OperandValue = ParamEType->getIntParameter (0 );
2894- auto *OperandType = ParamEType->getTypeParameter (0 );
2895-
2896- const SPIRVType *OperandSPIRVType =
2897- GR->getOrCreateSPIRVType (OperandType, MIRBuilder);
2898-
2899- Instr = Instr.addUse (GR->buildConstantInt (
2900- OperandValue, MIRBuilder, OperandSPIRVType, true ));
2901- continue ;
2902- } else if (ParamEType->getName () == " spirv.Literal" ) {
2903- assert (ParamEType->getNumTypeParameters () == 0 &&
2904- " Inline SPIR-V literal builtin does not take type "
2905- " parameters" );
2906- assert (ParamEType->getNumIntParameters () == 1 &&
2907- " Inline SPIR-V literal builtin must have an integer "
2908- " parameter" );
2909-
2910- auto OperandValue = ParamEType->getIntParameter (0 );
2911-
2912- Instr = Instr.addImm (OperandValue);
2913- continue ;
2914- }
2915- }
2916- const SPIRVType *TypeOperand =
2917- GR->getOrCreateSPIRVType (Param, MIRBuilder);
2918- Instr = Instr.addUse (GR->getSPIRVTypeID (TypeOperand));
2919- }
2920- return Instr;
2921- });
2879+ SmallVector<MCOperand> Operands;
2880+ for (llvm::Type *Param : ExtensionType->type_params ()) {
2881+ if (const TargetExtType *ParamEType = dyn_cast<TargetExtType>(Param)) {
2882+ if (ParamEType->getName () == " spirv.IntegralConstant" ) {
2883+ assert (ParamEType->getNumTypeParameters () == 1 &&
2884+ " Inline SPIR-V integral constant builtin must have a type "
2885+ " parameter" );
2886+ assert (ParamEType->getNumIntParameters () == 1 &&
2887+ " Inline SPIR-V integral constant builtin must have a "
2888+ " value parameter" );
2889+
2890+ auto OperandValue = ParamEType->getIntParameter (0 );
2891+ auto *OperandType = ParamEType->getTypeParameter (0 );
2892+
2893+ const SPIRVType *OperandSPIRVType =
2894+ GR->getOrCreateSPIRVType (OperandType, MIRBuilder);
2895+
2896+ Operands.push_back (MCOperand::createReg (GR->buildConstantInt (
2897+ OperandValue, MIRBuilder, OperandSPIRVType, true )));
2898+ continue ;
2899+ } else if (ParamEType->getName () == " spirv.Literal" ) {
2900+ assert (ParamEType->getNumTypeParameters () == 0 &&
2901+ " Inline SPIR-V literal builtin does not take type "
2902+ " parameters" );
2903+ assert (ParamEType->getNumIntParameters () == 1 &&
2904+ " Inline SPIR-V literal builtin must have an integer "
2905+ " parameter" );
2906+
2907+ auto OperandValue = ParamEType->getIntParameter (0 );
2908+
2909+ Operands.push_back (MCOperand::createImm (OperandValue));
2910+ continue ;
2911+ }
2912+ }
2913+ const SPIRVType *TypeOperand = GR->getOrCreateSPIRVType (Param, MIRBuilder);
2914+ Operands.push_back (MCOperand::createReg (GR->getSPIRVTypeID (TypeOperand)));
2915+ }
2916+
2917+ return GR->getOrCreateUnknownType (ExtensionType, MIRBuilder, Opcode,
2918+ Operands);
29222919}
29232920
29242921namespace SPIRV {
0 commit comments