mirror of
https://github.com/intel/llvm.git
synced 2026-01-24 08:30:34 +08:00
[mlir][IR] Fix overload resolution on MSVC build (#84589)
#82629 added additional overloads to `replaceAllUsesWith` and `replaceUsesWithIf`. This caused a build breakage with MSVC when called with ops that can implicitly convert to `Value`. ``` external/llvm-project/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp(881): error C2666: 'mlir::RewriterBase::replaceAllUsesWith': 2 overloads have similar conversions external/llvm-project/mlir/include\mlir/IR/PatternMatch.h(631): note: could be 'void mlir::RewriterBase::replaceAllUsesWith(mlir::Operation *,mlir::ValueRange)' external/llvm-project/mlir/include\mlir/IR/PatternMatch.h(626): note: or 'void mlir::RewriterBase::replaceAllUsesWith(mlir::ValueRange,mlir::ValueRange)' external/llvm-project/mlir/include\mlir/IR/PatternMatch.h(616): note: or 'void mlir::RewriterBase::replaceAllUsesWith(mlir::Value,mlir::Value)' external/llvm-project/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp(882): note: while trying to match the argument list '(mlir::tensor::ExtractSliceOp, T)' with [ T=mlir::Value ] ``` Note: The LLVM build bots (Linux and Windows) did not break, this seems to be an issue with `Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.exe`. This change renames the newly added overloads to `replaceAllOpUsesWith` and `replaceOpUsesWithIf`.
This commit is contained in:
committed by
GitHub
parent
d4569d42b5
commit
f1aa783788
@@ -648,7 +648,10 @@ public:
|
||||
for (auto it : llvm::zip(from, to))
|
||||
replaceAllUsesWith(std::get<0>(it), std::get<1>(it));
|
||||
}
|
||||
void replaceAllUsesWith(Operation *from, ValueRange to) {
|
||||
// Note: This function cannot be called `replaceAllUsesWith` because the
|
||||
// overload resolution, when called with an op that can be implicitly
|
||||
// converted to a Value, would be ambiguous.
|
||||
void replaceAllOpUsesWith(Operation *from, ValueRange to) {
|
||||
replaceAllUsesWith(from->getResults(), to);
|
||||
}
|
||||
|
||||
@@ -662,9 +665,12 @@ public:
|
||||
void replaceUsesWithIf(ValueRange from, ValueRange to,
|
||||
function_ref<bool(OpOperand &)> functor,
|
||||
bool *allUsesReplaced = nullptr);
|
||||
void replaceUsesWithIf(Operation *from, ValueRange to,
|
||||
function_ref<bool(OpOperand &)> functor,
|
||||
bool *allUsesReplaced = nullptr) {
|
||||
// Note: This function cannot be called `replaceOpUsesWithIf` because the
|
||||
// overload resolution, when called with an op that can be implicitly
|
||||
// converted to a Value, would be ambiguous.
|
||||
void replaceOpUsesWithIf(Operation *from, ValueRange to,
|
||||
function_ref<bool(OpOperand &)> functor,
|
||||
bool *allUsesReplaced = nullptr) {
|
||||
replaceUsesWithIf(from->getResults(), to, functor, allUsesReplaced);
|
||||
}
|
||||
|
||||
@@ -672,9 +678,9 @@ public:
|
||||
/// the listener about every in-place op modification (for every use that was
|
||||
/// replaced). The optional `allUsesReplaced` flag is set to "true" if all
|
||||
/// uses were replaced.
|
||||
void replaceUsesWithinBlock(Operation *op, ValueRange newValues, Block *block,
|
||||
bool *allUsesReplaced = nullptr) {
|
||||
replaceUsesWithIf(
|
||||
void replaceOpUsesWithinBlock(Operation *op, ValueRange newValues,
|
||||
Block *block, bool *allUsesReplaced = nullptr) {
|
||||
replaceOpUsesWithIf(
|
||||
op, newValues,
|
||||
[block](OpOperand &use) {
|
||||
return block->getParentOp()->isProperAncestor(use.getOwner());
|
||||
|
||||
@@ -370,8 +370,8 @@ DecomposeLinalgOp::matchAndRewrite(GenericOp genericOp,
|
||||
scalarReplacements.push_back(
|
||||
residualGenericOpBody->getArgument(num + origNumInputs));
|
||||
bool allUsesReplaced = false;
|
||||
rewriter.replaceUsesWithinBlock(peeledScalarOperation, scalarReplacements,
|
||||
residualGenericOpBody, &allUsesReplaced);
|
||||
rewriter.replaceOpUsesWithinBlock(peeledScalarOperation, scalarReplacements,
|
||||
residualGenericOpBody, &allUsesReplaced);
|
||||
assert(!allUsesReplaced &&
|
||||
"peeled scalar operation is erased when it wasnt expected to be");
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ void RewriterBase::replaceOp(Operation *op, ValueRange newValues) {
|
||||
rewriteListener->notifyOperationReplaced(op, newValues);
|
||||
|
||||
// Replace all result uses. Also notifies the listener of modifications.
|
||||
replaceAllUsesWith(op, newValues);
|
||||
replaceAllOpUsesWith(op, newValues);
|
||||
|
||||
// Erase op and notify listener.
|
||||
eraseOp(op);
|
||||
@@ -141,7 +141,7 @@ void RewriterBase::replaceOp(Operation *op, Operation *newOp) {
|
||||
rewriteListener->notifyOperationReplaced(op, newOp);
|
||||
|
||||
// Replace all result uses. Also notifies the listener of modifications.
|
||||
replaceAllUsesWith(op, newOp->getResults());
|
||||
replaceAllOpUsesWith(op, newOp->getResults());
|
||||
|
||||
// Erase op and notify listener.
|
||||
eraseOp(op);
|
||||
|
||||
@@ -161,7 +161,7 @@ SmallVector<Value> mlir::makeRegionIsolatedFromAbove(
|
||||
rewriter.setInsertionPointToStart(newEntryBlock);
|
||||
for (auto *clonedOp : clonedOperations) {
|
||||
Operation *newOp = rewriter.clone(*clonedOp, map);
|
||||
rewriter.replaceUsesWithIf(clonedOp, newOp->getResults(), replaceIfFn);
|
||||
rewriter.replaceOpUsesWithIf(clonedOp, newOp->getResults(), replaceIfFn);
|
||||
}
|
||||
rewriter.mergeBlocks(
|
||||
entryBlock, newEntryBlock,
|
||||
|
||||
Reference in New Issue
Block a user