diff --git a/lib/Dialect/FIRRTL/Transforms/InferWidths.cpp b/lib/Dialect/FIRRTL/Transforms/InferWidths.cpp index bdc8f89ec61f..54fca4d87ce9 100644 --- a/lib/Dialect/FIRRTL/Transforms/InferWidths.cpp +++ b/lib/Dialect/FIRRTL/Transforms/InferWidths.cpp @@ -1400,21 +1400,6 @@ LogicalResult InferenceMapping::mapOperation(Operation *op) { // We must duplicate the invalid value for each use, since each use can // be inferred to a different width. declareVars(op.getResult(), op.getLoc(), /*isDerived=*/true); - if (op.use_empty()) - return; - - auto type = op.getType(); - ImplicitLocOpBuilder builder(op->getLoc(), op); - for (auto &use : - llvm::make_early_inc_range(llvm::drop_begin(op->getUses()))) { - // - `make_early_inc_range` since `getUses()` is invalidated upon - // `use.set(...)`. - // - `drop_begin` such that the first use can keep the original op. - auto clone = builder.create(type); - declareVars(clone.getResult(), clone.getLoc(), - /*isDerived=*/true); - use.set(clone); - } }) .Case( [&](auto op) { declareVars(op.getResult(), op.getLoc()); }) diff --git a/test/Dialect/FIRRTL/infer-widths.mlir b/test/Dialect/FIRRTL/infer-widths.mlir index 0777c0c40e65..a35a71239cc3 100644 --- a/test/Dialect/FIRRTL/infer-widths.mlir +++ b/test/Dialect/FIRRTL/infer-widths.mlir @@ -35,15 +35,6 @@ firrtl.circuit "Foo" { firrtl.connect %out, %invalid_ui : !firrtl.uint, !firrtl.uint firrtl.connect %out, %c42_ui : !firrtl.uint, !firrtl.uint - // Check that the invalid values are duplicated, and a corner case where the - // wire won't be updated with a width until after updating the invalid value - // above. - // CHECK: %invalid_ui2 = firrtl.invalidvalue : !firrtl.uint<2> - %w = firrtl.wire : !firrtl.uint - %c2_ui = firrtl.constant 2 : !firrtl.uint - firrtl.connect %w, %invalid_ui : !firrtl.uint, !firrtl.uint - firrtl.connect %w, %c2_ui : !firrtl.uint, !firrtl.uint - // Check that invalid values are inferred to width zero if not used in a // connect. // CHECK: firrtl.invalidvalue : !firrtl.uint<0>