@@ -4383,17 +4383,22 @@ SPIRVValue *LLVMToSPIRVBase::transIntrinsicInst(IntrinsicInst *II,
43834383 SPIRVValue *StartingSVal = transValue (II->getArgOperand (0 ), BB);
43844384 SPIRVTypeInt *I32STy = BM->addIntegerType (32 );
43854385 unsigned VecSize = VecTy->getElementCount ().getFixedValue ();
4386- SmallVector<SPIRVValue *, 16 > Extracts (VecSize);
4387- for (unsigned Idx = 0 ; Idx < VecSize; ++Idx) {
4388- Extracts[Idx] = BM->addVectorExtractDynamicInst (
4389- VecSVal, BM->addIntegerConstant (I32STy, Idx), BB);
4390- }
4391- SPIRVValue *V = BM->addBinaryInst (Op, StartingSVal->getType (), StartingSVal,
4392- Extracts[0 ], BB);
4393- for (unsigned Idx = 1 ; Idx < VecSize; ++Idx) {
4394- V = BM->addBinaryInst (Op, StartingSVal->getType (), V, Extracts[Idx], BB);
4386+ if (VecSize > 0 ) {
4387+ SmallVector<SPIRVValue *, 16 > Extracts (VecSize);
4388+ for (unsigned Idx = 0 ; Idx < VecSize; ++Idx) {
4389+ Extracts[Idx] = BM->addVectorExtractDynamicInst (
4390+ VecSVal, BM->addIntegerConstant (I32STy, Idx), BB);
4391+ }
4392+ SPIRVValue *V = BM->addBinaryInst (Op, StartingSVal->getType (),
4393+ StartingSVal, Extracts[0 ], BB);
4394+ for (unsigned Idx = 1 ; Idx < VecSize; ++Idx) {
4395+ V = BM->addBinaryInst (Op, StartingSVal->getType (), V, Extracts[Idx],
4396+ BB);
4397+ }
4398+ return V;
43954399 }
4396- return V;
4400+ assert (VecSize && " Zero Extracts size for vector reduce lowering" );
4401+ return nullptr ;
43974402 }
43984403 case Intrinsic::vector_reduce_smax:
43994404 case Intrinsic::vector_reduce_smin:
0 commit comments