[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