[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