xref: /llvm-project/llvm/test/Transforms/JumpThreading/degenerate-phi.ll (revision b6909fe9ca1789db98c3481977468d33e9886182)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
3; PR9112
4
5; This is actually a test for value tracking. Jump threading produces
6; "%phi = phi i16" when it removes all edges leading to %unreachable.
7; The .ll parser won't let us write that directly since it's invalid code.
8
9define void @func() nounwind {
10; CHECK-LABEL: @func(
11; CHECK-NEXT:  entry:
12; CHECK-NEXT:    br label [[BB:%.*]]
13; CHECK:       bb:
14; CHECK-NEXT:    br label [[BB]]
15; CHECK:       unreachable:
16; CHECK-NEXT:    [[PHI:%.*]] = phi i16 [ [[ADD:%.*]], [[UNREACHABLE:%.*]] ], [ 0, [[NEXT:%.*]] ]
17; CHECK-NEXT:    [[ADD]] = add i16 0, [[PHI]]
18; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i16 [[PHI]], 0
19; CHECK-NEXT:    br i1 [[CMP]], label [[UNREACHABLE]], label [[NEXT]]
20; CHECK:       next:
21; CHECK-NEXT:    br label [[UNREACHABLE]]
22;
23entry:
24  br label %bb
25
26bb:
27  br label %bb
28
29unreachable:
30  %phi = phi i16 [ %add, %unreachable ], [ 0, %next ]
31  %add = add i16 0, %phi
32  %cmp = icmp slt i16 %phi, 0
33  br i1 %cmp, label %unreachable, label %next
34
35next:
36  br label %unreachable
37}
38
39