@@ -2113,31 +2113,10 @@ static bool generateSelectInst(const SPIRV::IncomingCall *Call,
21132113static bool generateConstructInst (const SPIRV::IncomingCall *Call,
21142114 MachineIRBuilder &MIRBuilder,
21152115 SPIRVGlobalRegistry *GR) {
2116- auto MIB = MIRBuilder.buildInstr (SPIRV::OpCompositeConstruct)
2117- .addDef (Call->ReturnRegister )
2118- .addUse (GR->getSPIRVTypeID (Call->ReturnType ));
2119-
2120- constexpr unsigned MaxWordCount = UINT16_MAX;
2121- const size_t NumElements = Call->Arguments .size ();
2122- size_t MaxNumElements = MaxWordCount - 3 ;
2123- size_t SPIRVStructNumElements = NumElements;
2124-
2125- if (NumElements > MaxNumElements) {
2126- // Do adjustments for continued instructions.
2127- SPIRVStructNumElements = MaxNumElements;
2128- MaxNumElements = MaxWordCount - 1 ;
2129- }
2130-
2131- for (size_t I = 0 ; I < SPIRVStructNumElements; ++I)
2132- MIB.addUse (Call->Arguments [I]);
2133-
2134- for (size_t I = SPIRVStructNumElements; I < NumElements;
2135- I += MaxNumElements) {
2136- auto MIB = MIRBuilder.buildInstr (SPIRV::OpCompositeConstructContinuedINTEL);
2137- for (size_t J = I; J < std::min (I + MaxNumElements, NumElements); ++J)
2138- MIB.addUse (Call->Arguments [J]);
2139- }
2140-
2116+ createContinuedInstructions (MIRBuilder, SPIRV::OpCompositeConstruct, 3 ,
2117+ SPIRV::OpCompositeConstructContinuedINTEL,
2118+ Call->Arguments , Call->ReturnRegister ,
2119+ GR->getSPIRVTypeID (Call->ReturnType ));
21412120 return true ;
21422121}
21432122
@@ -2251,28 +2230,10 @@ static bool generateSpecConstantInst(const SPIRV::IncomingCall *Call,
22512230 return true ;
22522231 }
22532232 case SPIRV::OpSpecConstantComposite: {
2254- auto MIB = MIRBuilder.buildInstr (Opcode)
2255- .addDef (Call->ReturnRegister )
2256- .addUse (GR->getSPIRVTypeID (Call->ReturnType ));
2257-
2258- constexpr unsigned MaxWordCount = UINT16_MAX;
2259- const size_t NumElements = Call->Arguments .size ();
2260- size_t MaxNumElements = MaxWordCount - 3 ;
2261- size_t SPIRVStructNumElements = NumElements;
2262- if (NumElements > MaxNumElements) {
2263- SPIRVStructNumElements = MaxNumElements;
2264- MaxNumElements = MaxWordCount - 1 ;
2265- }
2266- for (size_t I = 0 ; I < SPIRVStructNumElements; ++I)
2267- MIB.addUse (Call->Arguments [I]);
2268-
2269- for (size_t I = SPIRVStructNumElements; I < NumElements;
2270- I += MaxNumElements) {
2271- auto MIB =
2272- MIRBuilder.buildInstr (SPIRV::OpSpecConstantCompositeContinuedINTEL);
2273- for (size_t J = I; J < std::min (I + MaxNumElements, NumElements); ++J)
2274- MIB.addUse (Call->Arguments [J]);
2275- }
2233+ createContinuedInstructions (MIRBuilder, Opcode, 3 ,
2234+ SPIRV::OpSpecConstantCompositeContinuedINTEL,
2235+ Call->Arguments , Call->ReturnRegister ,
2236+ GR->getSPIRVTypeID (Call->ReturnType ));
22762237 return true ;
22772238 }
22782239 default :
0 commit comments