20#include "mlir/Transforms/GreedyPatternRewriteDriver.h" 
   26#define GEN_PASS_DEF_SIMPLIFYASSUMEEQPASS 
   27#include "circt/Dialect/Verif/Passes.h.inc" 
   35struct SimplifyAssumeEqPass
 
   36    : verif::impl::SimplifyAssumeEqPassBase<SimplifyAssumeEqPass> {
 
   37  void runOnOperation() 
override;
 
   40LogicalResult tryReplaceEqualValues(mlir::Value &from, mlir::Value &to,
 
   41                                    AssumeOp &op, PatternRewriter &rewriter) {
 
   42  auto *fromOp = from.getDefiningOp();
 
   43  if (fromOp && dyn_cast<verif::SymbolicValueOp>(fromOp)) {
 
   44    rewriter.replaceAllUsesWith(from, to);
 
   45    rewriter.eraseOp(fromOp);
 
   47    return llvm::success();
 
   55  LogicalResult matchAndRewrite(AssumeOp op,
 
   56                                PatternRewriter &rewriter)
 const override {
 
   57    auto prop = op.getProperty();
 
   58    auto icmp = prop.getDefiningOp<comb::ICmpOp>();
 
   60      return llvm::failure();
 
   62    if (icmp.getPredicate() != comb::ICmpPredicate::eq)
 
   63      return llvm::failure();
 
   65    auto lhs = icmp.getLhs();
 
   66    auto rhs = icmp.getRhs();
 
   69    if (succeeded(tryReplaceEqualValues(lhs, rhs, op, rewriter)))
 
   71    if (succeeded(tryReplaceEqualValues(rhs, lhs, op, rewriter)))
 
   73    return llvm::failure();
 
   78void SimplifyAssumeEqPass::runOnOperation() {
 
   79  RewritePatternSet 
patterns(&getContext());
 
   82  if (failed(applyPatternsGreedily(getOperation(), std::move(
patterns))))
 
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.