[Mlir-commits] [mlir] [mlir][RemoveDeadValues] Simplify branch op handling using ub.poison (PR #182711)

Matthias Springer llvmlistbot at llvm.org
Thu Feb 26 07:14:06 PST 2026


================
@@ -35,20 +35,26 @@ module @named_module_acceptable {
 func.func @acceptable_ir_has_cleanable_loop_of_conditional_and_branch_op(%arg0: i1) {
   %non_live = arith.constant 0 : i32
   // CHECK-NOT: arith.constant
+  // CHECK-CANONICALIZE-NOT: arith.constant
   cf.br ^bb1(%non_live : i32)
-  // CHECK: cf.br ^[[BB1:bb[0-9]+]]
+  // CHECK: cf.br ^[[BB1:bb[0-9]+]](%{{.*}} : i32)
+  // CHECK-CANONICALIZE: cf.br ^[[BB1:bb[0-9]+]](%{{.*}} : i32)
 ^bb1(%non_live_1 : i32):
-  // CHECK: ^[[BB1]]:
+  // CHECK: ^[[BB1]](%{{.*}}: i32):
+  // CHECK-CANONICALIZE: ^[[BB1]](%{{.*}}: i32):
   %non_live_5 = arith.constant 1 : i32
   cf.br ^bb3(%non_live_1, %non_live_5 : i32, i32)
-  // CHECK: cf.br ^[[BB3:bb[0-9]+]]
-  // CHECK-NOT: i32
+  // CHECK: cf.br ^[[BB3:bb[0-9]+]](%{{.*}}, %{{.*}} : i32, i32)
+  // CHECK-CANONICALIZE: cf.br ^[[BB3:bb[0-9]+]](%{{.*}}, %{{.*}} : i32, i32)
----------------
matthias-springer wrote:

Looks like CSE is not necessary here. I ran `-canonicalize` on the IR that you posted above and it simplified.

You likely just have to update this to also include branching ops.
```
  // Canonicalize all region branch ops.
  SmallVector<Operation *> opsToCanonicalize;
  module->walk([&](RegionBranchOpInterface regionBranchOp) {
    opsToCanonicalize.push_back(regionBranchOp.getOperation());
  });
```


https://github.com/llvm/llvm-project/pull/182711


More information about the Mlir-commits mailing list