[llvm] ee9bb25 - [LoopDeletion] Add test with irreducible control flow in loop.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 14 09:47:33 PDT 2021
Author: Florian Hahn
Date: 2021-06-14T17:42:32+01:00
New Revision: ee9bb258bb76e9c076c19592b3778e2ecc2ff47c
URL: https://github.com/llvm/llvm-project/commit/ee9bb258bb76e9c076c19592b3778e2ecc2ff47c
DIFF: https://github.com/llvm/llvm-project/commit/ee9bb258bb76e9c076c19592b3778e2ecc2ff47c.diff
LOG: [LoopDeletion] Add test with irreducible control flow in loop.
Currently the irreducible cycles in the loops are ignored. The
irreducible cycle may loop infinitely in
irreducible_subloop_no_mustprogress, which is allowed and the loop
should not be removed.
Discussed in D103382.
Added:
llvm/test/Transforms/LoopDeletion/loops-with-irreducible-subloops.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/LoopDeletion/loops-with-irreducible-subloops.ll b/llvm/test/Transforms/LoopDeletion/loops-with-irreducible-subloops.ll
new file mode 100644
index 0000000000000..d82d2c5cf04b2
--- /dev/null
+++ b/llvm/test/Transforms/LoopDeletion/loops-with-irreducible-subloops.ll
@@ -0,0 +1,58 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -loop-deletion -verify-dom-info -S | FileCheck %s
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
+
+define void @irreducible_subloop_no_mustprogress(i1 %c1, i1 %c2, i1 %c3) {
+; CHECK-LABEL: @irreducible_subloop_no_mustprogress(
+; CHECK-NEXT: br label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: ret void
+;
+ br label %loop1
+
+loop1:
+ br i1 %c1, label %loop1.bb1, label %irr.bb1
+
+loop1.bb1:
+ br label %irr.bb2
+
+irr.bb1:
+ br i1 %c2, label %loop1.latch, label %irr.bb2
+
+irr.bb2:
+ br i1 %c3, label %loop1.latch, label %irr.bb1
+
+loop1.latch:
+ br i1 false, label %loop1, label %exit
+
+exit:
+ ret void
+}
+
+define void @irreducible_subloop_with_mustprogress(i1 %c1, i1 %c2, i1 %c3) mustprogress {
+; CHECK-LABEL: @irreducible_subloop_with_mustprogress(
+; CHECK-NEXT: br label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: ret void
+;
+ br label %loop1
+
+loop1:
+ br i1 %c1, label %loop1.bb1, label %irr.bb1
+
+loop1.bb1:
+ br label %irr.bb2
+
+irr.bb1:
+ br i1 %c2, label %loop1.latch, label %irr.bb2
+
+irr.bb2:
+ br i1 %c3, label %loop1.latch, label %irr.bb1
+
+loop1.latch:
+ br i1 false, label %loop1, label %exit
+
+exit:
+ ret void
+}
More information about the llvm-commits
mailing list