================ @@ -618,21 +618,27 @@ class SparseCallConverter : public OpConversionPattern<func::CallOp> { assert(!sparseFlat.empty()); if (sparseFlat.size() > 1) { auto flatSize = sparseFlat.size(); - ValueRange fields(iterator_range<ResultRange::iterator>( - newCall.result_begin() + retOffset, - newCall.result_begin() + retOffset + flatSize)); - castedRet.push_back(genTuple(rewriter, loc, retType, fields)); + packedResultVals.push_back(SmallVector<Value>()); + llvm::append_range(packedResultVals.back(), + iterator_range<ResultRange::iterator>( + newCall.result_begin() + retOffset, + newCall.result_begin() + retOffset + flatSize)); retOffset += flatSize; } else { // If this is an 1:1 conversion, no need for casting. - castedRet.push_back(newCall.getResult(retOffset)); + packedResultVals.push_back(SmallVector<Value>()); + packedResultVals.back().push_back(newCall.getResult(retOffset)); retOffset++; } sparseFlat.clear(); } - assert(castedRet.size() == op.getNumResults()); - rewriter.replaceOp(op, castedRet); + assert(packedResultVals.size() == op.getNumResults()); + SmallVector<ValueRange> ranges; + ranges.reserve(packedResultVals.size()); + for (const SmallVector<Value> &vec : packedResultVals) + ranges.push_back(ValueRange(vec)); + rewriter.replaceOpWithMultiple(op, ranges); ---------------- zero9178 wrote:
```suggestion rewriter.replaceOpWithMultiple(op, llvm::to_vector_of<ValueRange>(packedResultVals)); ``` IIRC this should work, otherwise I'd use `emplace_back` instead of `push_back` at the very least https://github.com/llvm/llvm-project/pull/115816 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits