Skip to content

Commit 0cd10e8

Browse files
committed
fix: move expr_name_counter_ sync to after expr cloning in Fusion::copy
1 parent 9143881 commit 0cd10e8

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

csrc/fusion.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,15 @@ IrCloner Fusion::copy(const Fusion* from, Fusion* to) {
211211
ir_cloner.clone(val);
212212
}
213213

214+
// Wire up definitions and uses on cloned vals
215+
for (auto val : from->vals()) {
216+
ir_cloner.clone(val)->setDefinition(ir_cloner.clone(val->definition_));
217+
ir_cloner.clone(val)->setUses(ir_cloner.clone(val->uses_));
218+
}
219+
214220
// Sync per-Fusion name counters from source to dest.
221+
// Must be AFTER all cloning (vals and exprs) so that registerVal/registerExpr
222+
// increments during cloning do not inflate the final counter values.
215223
// During cloning, registerVal increments the dest Fusion's counter for each
216224
// val, then IrBuilder::clone overrides the name with setName(src->name()).
217225
// If source names are non-sequential (e.g., {0..10, 22..27} from segmenter
@@ -221,12 +229,6 @@ IrCloner Fusion::copy(const Fusion* from, Fusion* to) {
221229
to->val_type_name_map_ = from->val_type_name_map_;
222230
to->expr_name_counter_ = from->expr_name_counter_;
223231

224-
// Wire up definitions and uses on cloned vals
225-
for (auto val : from->vals()) {
226-
ir_cloner.clone(val)->setDefinition(ir_cloner.clone(val->definition_));
227-
ir_cloner.clone(val)->setUses(ir_cloner.clone(val->uses_));
228-
}
229-
230232
// Remap cached special val pointers
231233
if (from->zero_val_) {
232234
to->zero_val_ = ir_cloner.clone(from->zero_val_);

0 commit comments

Comments
 (0)