15 #define GEN_PASS_DEF_RECONCILEUNREALIZEDCASTS
16 #include "mlir/Conversion/Passes.h.inc"
37 struct ReconcileUnrealizedCasts
38 :
public impl::ReconcileUnrealizedCastsBase<ReconcileUnrealizedCasts> {
39 ReconcileUnrealizedCasts() =
default;
41 void runOnOperation()
override {
45 [&](UnrealizedConversionCastOp castOp) { worklist.insert(castOp); });
49 auto enqueueOperands = [&](UnrealizedConversionCastOp castOp) {
50 for (
Value v : castOp.getInputs())
51 if (
auto inputCastOp = v.getDefiningOp<UnrealizedConversionCastOp>())
52 worklist.insert(inputCastOp);
59 [](UnrealizedConversionCastOp castOp) -> UnrealizedConversionCastOp {
60 if (castOp.getInputs().empty())
62 auto inputCastOp = castOp.getInputs()
64 .getDefiningOp<UnrealizedConversionCastOp>();
67 if (inputCastOp.getOutputs() != castOp.getInputs())
73 while (!worklist.empty()) {
74 UnrealizedConversionCastOp castOp = worklist.pop_back_val();
75 if (castOp->use_empty()) {
78 enqueueOperands(castOp);
85 UnrealizedConversionCastOp nextCast = castOp;
87 if (nextCast.getInputs().getTypes() == castOp.getResultTypes()) {
91 enqueueOperands(castOp);
92 castOp.replaceAllUsesWith(nextCast.getInputs());
96 nextCast = getInputCast(nextCast);
105 return std::make_unique<ReconcileUnrealizedCasts>();
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
Include the generated interface declarations.
std::unique_ptr< Pass > createReconcileUnrealizedCastsPass()
Creates a pass that eliminates noop unrealized_conversion_cast operation sequences.