@@ -1331,30 +1331,31 @@ class SPIRVExtInst: public SPIRVFunctionCallGeneric<OpExtInst, 5> {
1331
1331
SPIRVExtInstSetKind ExtSetKind;
1332
1332
};
1333
1333
1334
- class SPIRVCompositeExtract :public SPIRVInstruction {
1334
+ class SPIRVCompositeExtractBase :public SPIRVInstTemplateBase {
1335
1335
public:
1336
- const static Op OC = OpCompositeExtract;
1337
- // Incomplete constructor
1338
- SPIRVCompositeExtract ():SPIRVInstruction(OC), Composite(SPIRVID_INVALID){}
1336
+ SPIRVValue* getComposite () { return getValue (Ops[0 ]); }
1337
+ const std::vector<SPIRVWord> getIndices () const {
1338
+ return std::vector<SPIRVWord>(Ops.begin () + 1 , Ops.end ());
1339
+ }
1339
1340
1340
- SPIRVValue *getComposite () { return getValue (Composite);}
1341
- const std::vector<SPIRVWord>& getIndices ()const { return Indices;}
1342
1341
protected:
1343
- void setWordCount (SPIRVWord TheWordCount) {
1344
- SPIRVEntry::setWordCount (TheWordCount);
1345
- Indices.resize (TheWordCount - 4 );
1346
- }
1347
- _SPIRV_DEF_DEC4 (Type, Id, Composite, Indices)
1348
1342
// ToDo: validate the result type is consistent with the base type and indices
1349
1343
// need to trace through the base type for struct types
1350
- void validate ()const {
1344
+ void validate () const override {
1351
1345
SPIRVInstruction::validate ();
1352
- IGC_ASSERT (getValueType (Composite)->isTypeArray () || getValueType (Composite)->isTypeStruct () || getValueType (Composite)->isTypeVector ());
1346
+ IGC_ASSERT (OpCode == OpCompositeExtract);
1347
+ SPIRVId Composite = Ops[0 ];
1348
+ (void )Composite;
1349
+ IGC_ASSERT (getValueType (Composite)->isTypeArray () ||
1350
+ getValueType (Composite)->isTypeStruct () ||
1351
+ getValueType (Composite)->isTypeVector ());
1353
1352
}
1354
- SPIRVId Composite;
1355
- std::vector<SPIRVWord> Indices;
1356
1353
};
1357
1354
1355
+ typedef SPIRVInstTemplate<SPIRVCompositeExtractBase, OpCompositeExtract, true ,
1356
+ 4 , true >
1357
+ SPIRVCompositeExtract;
1358
+
1358
1359
class SPIRVCompositeInsert :public SPIRVInstruction {
1359
1360
public:
1360
1361
const static Op OC = OpCompositeInsert;
0 commit comments