blob: b3ecb022d8c1e69b6e68e6a55e3cbf837ad24ff8 [file] [log] [blame]
Krzysztof Parzyszek046090d2018-03-12 14:01:28 +00001; RUN: llc -march=hexagon -machine-sink-split < %s
2; REQUIRES: asserts
3; MachineSink should not sink an MI which is used in a non-phi instruction
4; in an MBB with multiple predecessors.
5
6target triple = "hexagon-unknown--elf"
7
8; Function Attrs: nounwind
9define void @f0() #0 {
10b0:
11 br i1 undef, label %b1, label %b2
12
13b1: ; preds = %b0
14 unreachable
15
16b2: ; preds = %b0
17 %v0 = load i8*, i8** undef, align 4
18 %v1 = getelementptr inbounds i8, i8* %v0, i32 1
19 %v2 = load i8, i8* %v0, align 1, !tbaa !0
20 %v3 = zext i8 %v2 to i32
21 %v4 = shl nuw nsw i32 %v3, 8
22 br i1 undef, label %b3, label %b5
23
24b3: ; preds = %b2
25 br i1 undef, label %b15, label %b4
26
27b4: ; preds = %b3
28 br label %b5
29
30b5: ; preds = %b4, %b2
31 %v5 = phi i8* [ undef, %b4 ], [ %v1, %b2 ]
32 %v6 = load i8, i8* %v5, align 1, !tbaa !0
33 %v7 = zext i8 %v6 to i32
34 %v8 = add nsw i32 %v7, %v4
35 %v9 = add nsw i32 %v8, -2
36 br label %b6
37
38b6: ; preds = %b8, %b5
39 br i1 false, label %b7, label %b8
40
41b7: ; preds = %b6
42 unreachable
43
44b8: ; preds = %b6
45 br i1 undef, label %b6, label %b9
46
47b9: ; preds = %b8
48 br i1 undef, label %b10, label %b14
49
50b10: ; preds = %b9
51 br i1 undef, label %b11, label %b13
52
53b11: ; preds = %b10
54 br i1 undef, label %b12, label %b13
55
56b12: ; preds = %b11
57 unreachable
58
59b13: ; preds = %b11, %b10
60 store i32 %v9, i32* undef, align 4, !tbaa !3
61 unreachable
62
63b14: ; preds = %b9
64 unreachable
65
66b15: ; preds = %b3
67 ret void
68}
69
70attributes #0 = { nounwind }
71
72!0 = !{!1, !1, i64 0}
73!1 = !{!"omnipotent char", !2, i64 0}
74!2 = !{!"Simple C/C++ TBAA"}
75!3 = !{!4, !4, i64 0}
76!4 = !{!"int", !1, i64 0}