@@ -4443,17 +4443,22 @@ SPIRVValue *LLVMToSPIRVBase::transIntrinsicInst(IntrinsicInst *II,
4443
4443
SPIRVValue *StartingSVal = transValue (II->getArgOperand (0 ), BB);
4444
4444
SPIRVTypeInt *I32STy = BM->addIntegerType (32 );
4445
4445
unsigned VecSize = VecTy->getElementCount ().getFixedValue ();
4446
- SmallVector<SPIRVValue *, 16 > Extracts (VecSize);
4447
- for (unsigned Idx = 0 ; Idx < VecSize; ++Idx) {
4448
- Extracts[Idx] = BM->addVectorExtractDynamicInst (
4449
- VecSVal, BM->addIntegerConstant (I32STy, Idx), BB);
4450
- }
4451
- SPIRVValue *V = BM->addBinaryInst (Op, StartingSVal->getType (), StartingSVal,
4452
- Extracts[0 ], BB);
4453
- for (unsigned Idx = 1 ; Idx < VecSize; ++Idx) {
4454
- V = BM->addBinaryInst (Op, StartingSVal->getType (), V, Extracts[Idx], BB);
4446
+ if (VecSize > 0 ) {
4447
+ SmallVector<SPIRVValue *, 16 > Extracts (VecSize);
4448
+ for (unsigned Idx = 0 ; Idx < VecSize; ++Idx) {
4449
+ Extracts[Idx] = BM->addVectorExtractDynamicInst (
4450
+ VecSVal, BM->addIntegerConstant (I32STy, Idx), BB);
4451
+ }
4452
+ SPIRVValue *V = BM->addBinaryInst (Op, StartingSVal->getType (),
4453
+ StartingSVal, Extracts[0 ], BB);
4454
+ for (unsigned Idx = 1 ; Idx < VecSize; ++Idx) {
4455
+ V = BM->addBinaryInst (Op, StartingSVal->getType (), V, Extracts[Idx],
4456
+ BB);
4457
+ }
4458
+ return V;
4455
4459
}
4456
- return V;
4460
+ assert (VecSize && " Zero Extracts size for vector reduce lowering" );
4461
+ return nullptr ;
4457
4462
}
4458
4463
case Intrinsic::vector_reduce_smax:
4459
4464
case Intrinsic::vector_reduce_smin:
0 commit comments