37 lines
1.4 KiB
C++
37 lines
1.4 KiB
C++
//===- TestTransformStateExtension.cpp ------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "TestTransformStateExtension.h"
|
|
|
|
using namespace mlir;
|
|
|
|
LogicalResult
|
|
test::TestTransformStateExtension::updateMapping(Operation *previous,
|
|
Operation *updated) {
|
|
// Update value handles. The new ops should have at least as many results as
|
|
// the replacement op. Fewer results are acceptable, if those results are not
|
|
// mapped to any handle.
|
|
for (auto r = updated->getNumResults(); r < previous->getNumResults(); ++r) {
|
|
SmallVector<Value> handles;
|
|
(void)getTransformState().getHandlesForPayloadValue(previous->getResult(r),
|
|
handles);
|
|
if (!handles.empty())
|
|
return emitError(previous->getLoc())
|
|
<< "cannot replace an op with another op producing fewer results "
|
|
"while tracking handles";
|
|
}
|
|
|
|
for (auto [oldValue, newValue] :
|
|
llvm::zip(previous->getResults(), updated->getResults()))
|
|
if (failed(replacePayloadValue(oldValue, newValue)))
|
|
return failure();
|
|
|
|
// Update op handle.
|
|
return replacePayloadOp(previous, updated);
|
|
}
|