Skip to content

Commit 9dfde5e

Browse files
authored
[Comb] Fix another recursive mux canonicalizer (#9144)
1 parent 1f536ce commit 9dfde5e

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

lib/Dialect/Comb/CombFolds.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2552,7 +2552,8 @@ LogicalResult MuxRewriter::matchAndRewrite(MuxOp op,
25522552
if (auto falseMux = op.getFalseValue().getDefiningOp<MuxOp>();
25532553
falseMux && falseMux != op) {
25542554
// mux(selector, x, mux(selector, y, z) = mux(selector, x, z)
2555-
if (op.getCond() == falseMux.getCond()) {
2555+
if (op.getCond() == falseMux.getCond() &&
2556+
falseMux.getFalseValue() != falseMux) {
25562557
replaceOpWithNewOpAndCopyNamehint<MuxOp>(
25572558
rewriter, op, op.getCond(), op.getTrueValue(),
25582559
falseMux.getFalseValue(), op.getTwoStateAttr());

test/Dialect/Comb/canonicalization.mlir

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,7 +1284,7 @@ hw.module @muxCommon(in %cond: i1, in %cond2: i1, in %cond3: i1,
12841284
in %arg0 : i32, in %arg1 : i32, in %arg2: i32, in %arg3: i32,
12851285
out o1: i32, out o2: i32, out o3: i32, out o4: i32, out o5: i32,
12861286
out orResult: i32, out o6: i32, out o7: i32, out o8 : i1, out o9: i32,
1287-
out o10: i32, out o11: i1, out o12: i32) {
1287+
out o10: i32, out o11: i1, out o12: i32, out o13: i32) {
12881288
// CHECK: [[TRUE:%.+]] = hw.constant true
12891289
// CHECK: [[FALSE:%.+]] = hw.constant false
12901290
%true = hw.constant true
@@ -1352,10 +1352,13 @@ hw.module @muxCommon(in %cond: i1, in %cond2: i1, in %cond3: i1,
13521352
%3 = comb.mux %cond2, %arg0, %2 : i32
13531353
%o12 = comb.mux %cond3, %arg0, %3 : i32
13541354

1355+
// CHECK: [[O13:%.+]] = comb.mux %cond, %arg0, [[LOOPMUX]] : i32
1356+
%o13 = comb.mux %cond, %arg0, %2 : i32
1357+
13551358
// CHECK: hw.output [[O1]], [[O2]], [[O3]], [[O4]], [[O5]], [[ORRESULT]],
13561359
// CHECK: [[O6]], [[O7]], [[O8]], [[O9]], [[O10]]
1357-
hw.output %o1, %o2, %o3, %o4, %o5, %orResult, %o6, %o7, %o8, %o9, %o10, %o11, %o12
1358-
: i32, i32, i32, i32, i32, i32, i32, i32, i1, i32, i32, i1, i32
1360+
hw.output %o1, %o2, %o3, %o4, %o5, %orResult, %o6, %o7, %o8, %o9, %o10, %o11, %o12, %o13
1361+
: i32, i32, i32, i32, i32, i32, i32, i32, i1, i32, i32, i1, i32, i32
13591362
}
13601363

13611364
// CHECK-LABEL: @flatten_multi_use_and

0 commit comments

Comments
 (0)