@@ -173,6 +173,10 @@ struct ConversionValueMapping {
173
173
}
174
174
}
175
175
176
+ void map (Value oldVal, SmallVector<Value> &&newVal) {
177
+ map (ValueVector{oldVal}, ValueVector (std::move (newVal)));
178
+ }
179
+
176
180
// / Drop the last mapping for the given values.
177
181
void erase (const ValueVector &value) { mapping.erase (value); }
178
182
@@ -946,7 +950,8 @@ struct ConversionPatternRewriterImpl : public RewriterBase::Listener {
946
950
OpBuilder::InsertPoint previous) override ;
947
951
948
952
// / Notifies that an op is about to be replaced with the given values.
949
- void notifyOpReplaced (Operation *op, ArrayRef<ValueRange> newValues);
953
+ void notifyOpReplaced (Operation *op,
954
+ SmallVector<SmallVector<Value>> &&newValues);
950
955
951
956
// / Notifies that a block is about to be erased.
952
957
void notifyBlockIsBeingErased (Block *block);
@@ -1519,7 +1524,7 @@ void ConversionPatternRewriterImpl::notifyOperationInserted(
1519
1524
}
1520
1525
1521
1526
void ConversionPatternRewriterImpl::notifyOpReplaced (
1522
- Operation *op, ArrayRef<ValueRange> newValues) {
1527
+ Operation *op, SmallVector<SmallVector<Value>> && newValues) {
1523
1528
assert (newValues.size () == op->getNumResults ());
1524
1529
assert (!ignoredOps.contains (op) && " operation was already replaced" );
1525
1530
@@ -1561,7 +1566,7 @@ void ConversionPatternRewriterImpl::notifyOpReplaced(
1561
1566
// Remap result to replacement value.
1562
1567
if (repl.empty ())
1563
1568
continue ;
1564
- mapping.map (result, repl);
1569
+ mapping.map (static_cast <Value>( result), std::move ( repl) );
1565
1570
}
1566
1571
1567
1572
appendRewrite<ReplaceOperationRewrite>(op, currentTypeConverter);
@@ -1639,35 +1644,31 @@ void ConversionPatternRewriter::replaceOp(Operation *op, ValueRange newValues) {
1639
1644
impl->logger .startLine ()
1640
1645
<< " ** Replace : '" << op->getName () << " '(" << op << " )\n " ;
1641
1646
});
1642
- SmallVector<ValueRange> newVals;
1643
- for (size_t i = 0 ; i < newValues.size (); ++i) {
1644
- if (newValues[i]) {
1645
- newVals.push_back (newValues.slice (i, 1 ));
1646
- } else {
1647
- newVals.push_back (ValueRange ());
1648
- }
1649
- }
1650
- impl->notifyOpReplaced (op, newVals);
1647
+ SmallVector<SmallVector<Value>> newVals =
1648
+ llvm::map_to_vector (newValues, [](Value v) -> SmallVector<Value> {
1649
+ return v ? SmallVector<Value>{v} : SmallVector<Value>();
1650
+ });
1651
+ impl->notifyOpReplaced (op, std::move (newVals));
1651
1652
}
1652
1653
1653
1654
void ConversionPatternRewriter::replaceOpWithMultiple (
1654
- Operation *op, ArrayRef<ValueRange> newValues) {
1655
+ Operation *op, SmallVector<SmallVector<Value>> && newValues) {
1655
1656
assert (op->getNumResults () == newValues.size () &&
1656
1657
" incorrect # of replacement values" );
1657
1658
LLVM_DEBUG ({
1658
1659
impl->logger .startLine ()
1659
1660
<< " ** Replace : '" << op->getName () << " '(" << op << " )\n " ;
1660
1661
});
1661
- impl->notifyOpReplaced (op, newValues);
1662
+ impl->notifyOpReplaced (op, std::move ( newValues) );
1662
1663
}
1663
1664
1664
1665
void ConversionPatternRewriter::eraseOp (Operation *op) {
1665
1666
LLVM_DEBUG ({
1666
1667
impl->logger .startLine ()
1667
1668
<< " ** Erase : '" << op->getName () << " '(" << op << " )\n " ;
1668
1669
});
1669
- SmallVector<ValueRange > nullRepls (op->getNumResults (), {});
1670
- impl->notifyOpReplaced (op, nullRepls);
1670
+ SmallVector<SmallVector<Value> > nullRepls (op->getNumResults (), {});
1671
+ impl->notifyOpReplaced (op, std::move ( nullRepls) );
1671
1672
}
1672
1673
1673
1674
void ConversionPatternRewriter::eraseBlock (Block *block) {
0 commit comments