[llvm] [VPlan] Account for early-exit dispatch blocks when updating LI. (PR #185618)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 10 08:25:39 PDT 2026
================
@@ -119,3 +119,197 @@ loop.latch:
exit:
ret i32 1
}
+
+; Tests that when an early-exit inner loop has multiple exits and all exits
+; leave the outer loop.
+define i32 @multi_early_exit_all_leave_outer_loop(i1 %c) {
+; CHECK-LABEL: Loop info for function 'multi_early_exit_all_leave_outer_loop':
+; CHECK: Loop at depth 1 containing: %outer.header<header>,%outer.latch<latch><exiting>,%vector.ph,%vector.body<exiting>,%vector.body.interim,%middle.block
+; CHECK: {{.*}}Loop at depth 2 containing: %vector.body<header><exiting>,%vector.body.interim<latch><exiting>
+entry:
+ br label %outer.header
+
+outer.header:
+ br label %inner.header
+
+inner.header:
+ %iv = phi i64 [ 0, %outer.header ], [ %iv.next, %inner.latch ]
+ br i1 %c, label %early.exit.1, label %inner.body
+
+inner.body:
+ %trunc = trunc i64 %iv to i16
+ %cmp = icmp ult i16 %trunc, 0
+ br i1 %cmp, label %early.exit.2, label %inner.latch
+
+inner.latch:
+ %iv.next = add i64 %iv, 1
+ %exit.cond = icmp ult i64 %iv, 1
+ br i1 %exit.cond, label %inner.header, label %outer.latch
+
+outer.latch:
+ br i1 %c, label %early.exit.1, label %outer.header
+
+early.exit.1:
+ ret i32 1
+
+early.exit.2:
+ ret i32 0
+}
+
+; Tests that when an inner loop has two early exits at different loop levels
----------------
david-arm wrote:
nit: `Tests when an inner loop ...`
https://github.com/llvm/llvm-project/pull/185618
More information about the llvm-commits
mailing list