xref: /llvm-project/llvm/test/Transforms/FunctionAttrs/phi_cycle.ll (revision 5a90168fa34e15b544d7749ca4d247a16d360119)
1; RUN: opt -passes=function-attrs -S < %s
2
3; Regression test for a null-returning bug of getUnderlyingObjectAggressive().
4; This should not crash.
5define void @phi_cycle() {
6bb:
7  unreachable
8
9bb1:                                              ; preds = %bb17
10  br label %bb2
11
12bb2:                                              ; preds = %bb5, %bb1
13  %phi = phi ptr [ %phi6, %bb1 ], [ %phi6, %bb5 ]
14  br i1 poison, label %bb4, label %bb3
15
16bb3:                                              ; preds = %bb2
17  %getelementptr = getelementptr inbounds i8, ptr %phi, i32 poison
18  br label %bb5
19
20bb4:                                              ; preds = %bb2
21  br label %bb7
22
23bb5:                                              ; preds = %bb15, %bb3
24  %phi6 = phi ptr [ %getelementptr, %bb3 ], [ %phi16, %bb15 ]
25  br i1 poison, label %bb17, label %bb2
26
27bb7:                                              ; preds = %bb15, %bb4
28  %phi8 = phi ptr [ %phi, %bb4 ], [ %phi16, %bb15 ]
29  br i1 poison, label %bb11, label %bb9
30
31bb9:                                              ; preds = %bb7
32  %getelementptr10 = getelementptr inbounds i8, ptr %phi8, i32 1
33  store i8 poison, ptr %phi8, align 1
34  br label %bb15
35
36bb11:                                             ; preds = %bb7
37  br i1 poison, label %bb13, label %bb12
38
39bb12:                                             ; preds = %bb11
40  br label %bb13
41
42bb13:                                             ; preds = %bb12, %bb11
43  %getelementptr14 = getelementptr inbounds i8, ptr %phi8, i32 poison
44  br label %bb15
45
46bb15:                                             ; preds = %bb13, %bb9
47  %phi16 = phi ptr [ %getelementptr14, %bb13 ], [ %getelementptr10, %bb9 ]
48  br i1 poison, label %bb5, label %bb7
49
50bb17:                                             ; preds = %bb5
51  br label %bb1
52}
53