1; RUN: llc -march=hexagon < %s
2; REQUIRES: asserts
3
4; This code causes multiple endloop instructions to be generated for the
5; same loop. The findLoopInstr would encounter for one endloop would encounter
6; the other endloop, and return null in response. This resulted in a crash.
7;
8; Check that with the fix we are able to compile this code successfully.
9
10target triple = "hexagon"
11
12; Function Attrs: norecurse
13define void @fred() local_unnamed_addr #0 align 2 {
14b0:
15  br label %b7
16
17b1:                                               ; preds = %b9
18  br i1 undef, label %b4, label %b2
19
20b2:                                               ; preds = %b1
21  %v3 = sub i32 undef, undef
22  br label %b4
23
24b4:                                               ; preds = %b2, %b1
25  %v5 = phi i32 [ undef, %b1 ], [ %v3, %b2 ]
26  br i1 undef, label %b14, label %b6
27
28b6:                                               ; preds = %b4
29  br label %b10
30
31b7:                                               ; preds = %b0
32  br i1 undef, label %b9, label %b8
33
34b8:                                               ; preds = %b7
35  unreachable
36
37b9:                                               ; preds = %b7
38  br label %b1
39
40b10:                                              ; preds = %b21, %b6
41  %v11 = phi i32 [ %v22, %b21 ], [ %v5, %b6 ]
42  br i1 undef, label %b21, label %b12
43
44b12:                                              ; preds = %b10
45  br label %b15
46
47b13:                                              ; preds = %b21
48  br label %b14
49
50b14:                                              ; preds = %b13, %b4
51  ret void
52
53b15:                                              ; preds = %b12
54  br i1 undef, label %b16, label %b17
55
56b16:                                              ; preds = %b15
57  store i32 0, i32* undef, align 4
58  br label %b21
59
60b17:                                              ; preds = %b15
61  br label %b18
62
63b18:                                              ; preds = %b17
64  br i1 undef, label %b19, label %b20
65
66b19:                                              ; preds = %b18
67  br label %b21
68
69b20:                                              ; preds = %b18
70  store i32 0, i32* undef, align 4
71  br label %b21
72
73b21:                                              ; preds = %b20, %b19, %b16, %b10
74  %v22 = add i32 %v11, -8
75  %v23 = icmp eq i32 %v22, 0
76  br i1 %v23, label %b13, label %b10
77}
78
79attributes #0 = { norecurse "target-cpu"="hexagonv60" "target-features"="-hvx,-long-calls" }
80