[llvm] 33909c8 - [InstCombine] Add test for unreachable loop (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 7 06:20:19 PDT 2023


Author: Nikita Popov
Date: 2023-07-07T15:20:06+02:00
New Revision: 33909c8fad9383600540b9004095a83e8517c824

URL: https://github.com/llvm/llvm-project/commit/33909c8fad9383600540b9004095a83e8517c824
DIFF: https://github.com/llvm/llvm-project/commit/33909c8fad9383600540b9004095a83e8517c824.diff

LOG: [InstCombine] Add test for unreachable loop (NFC)

We only catch this case on the second InstCombine iteration.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/unreachable-code.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/unreachable-code.ll b/llvm/test/Transforms/InstCombine/unreachable-code.ll
index 89a7fbb41cf235..bfea1e3789d12c 100644
--- a/llvm/test/Transforms/InstCombine/unreachable-code.ll
+++ b/llvm/test/Transforms/InstCombine/unreachable-code.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
-; RUN: opt -S -passes=instcombine -instcombine-infinite-loop-threshold=2 < %s | FileCheck %s
+; RUN: opt -S -passes=instcombine -instcombine-infinite-loop-threshold=2 < %s | FileCheck %s --check-prefixes=CHECK,DEFAULT
+; RUN: opt -S -passes='instcombine<max-iterations=1>' < %s | FileCheck %s --check-prefixes=CHECK,MAX1
 
 declare void @dummy()
 
@@ -226,3 +227,57 @@ join:
   %phi = phi i32 [ 1, %if], [ 2, %entry ]
   ret i32 %phi
 }
+
+define void @br_not_into_loop(i1 %x) {
+; DEFAULT-LABEL: define void @br_not_into_loop
+; DEFAULT-SAME: (i1 [[X:%.*]]) {
+; DEFAULT-NEXT:    br i1 true, label [[EXIT:%.*]], label [[LOOP:%.*]]
+; DEFAULT:       loop:
+; DEFAULT-NEXT:    br label [[LOOP]]
+; DEFAULT:       exit:
+; DEFAULT-NEXT:    call void @dummy()
+; DEFAULT-NEXT:    ret void
+;
+; MAX1-LABEL: define void @br_not_into_loop
+; MAX1-SAME: (i1 [[X:%.*]]) {
+; MAX1-NEXT:    br i1 true, label [[EXIT:%.*]], label [[LOOP:%.*]]
+; MAX1:       loop:
+; MAX1-NEXT:    call void @dummy()
+; MAX1-NEXT:    br label [[LOOP]]
+; MAX1:       exit:
+; MAX1-NEXT:    call void @dummy()
+; MAX1-NEXT:    ret void
+;
+  %c = or i1 %x, true
+  br i1 %c, label %exit, label %loop
+
+loop:
+  call void @dummy()
+  br label %loop
+
+exit:
+  call void @dummy()
+  ret void
+}
+
+define void @br_into_loop(i1 %x) {
+; CHECK-LABEL: define void @br_into_loop
+; CHECK-SAME: (i1 [[X:%.*]]) {
+; CHECK-NEXT:    br i1 true, label [[LOOP:%.*]], label [[EXIT:%.*]]
+; CHECK:       loop:
+; CHECK-NEXT:    call void @dummy()
+; CHECK-NEXT:    br label [[LOOP]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+  %c = or i1 %x, true
+  br i1 %c, label %loop, label %exit
+
+loop:
+  call void @dummy()
+  br label %loop
+
+exit:
+  call void @dummy()
+  ret void
+}


        


More information about the llvm-commits mailing list