blob: ae89beabcdaff99ea8bf809519517d3000b45528 [file] [log] [blame]
Krzysztof Parzyszek046090d2018-03-12 14:01:28 +00001; RUN: llc -march=hexagon < %s | FileCheck %s
2
3target triple = "hexagon"
4
5@g0 = external global i32
6@g1 = external global i32, align 4
7@g2 = external hidden unnamed_addr constant [49 x i8], align 8
8@g3 = external hidden unnamed_addr constant [76 x i8], align 8
9@g4 = external unnamed_addr constant { i8*, i8* }
10@g5 = external hidden unnamed_addr constant [36 x i8], align 8
11
12declare void @f0()
13
14declare i32 @f1()
15
16declare i32 @f2(i32)
17
18declare void @f3()
19
20; Function Attrs: nounwind
21declare void ()* @f4(void ()*) #0
22
23; Function Attrs: nounwind
24declare void ()* @f5(void ()*) #0
25
26; CHECK: f6:
27; CHECK-DAG: call f4
28; CHECK-DAG: r0 = ##f3
29; CHECK-DAG: call f5
30; CHECK-DAG: r0 = ##f0
31; CHECK-DAG: call f8
32; CHECK-DAG: r0 = ##g2
33; CHECK-DAG: call f9
34; CHECK-DAG: call f8
35; CHECK-DAG: r0 = ##g3
36; CHECK-DAG: call f10
37; CHECK-DAG: r0 = #4
38; CHECK-DAG: r{{[0-9]+}} = ##g1
39define i32 @f6() personality i8* bitcast (i32 (...)* @f11 to i8*) {
40b0:
41 tail call void @f7()
42 %v0 = tail call void ()* @f4(void ()* @f3) #0
43 %v1 = tail call void ()* @f5(void ()* @f0) #0
44 tail call void (i8*, ...) @f8(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @g2, i32 0, i32 0))
45 tail call void @f9()
46 tail call void (i8*, ...) @f8(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @g3, i32 0, i32 0))
47 %v2 = tail call i8* @f10(i32 4) #0
48 %v3 = load i32, i32* @g1, align 4, !tbaa !0
49 %v4 = add nsw i32 %v3, 1
50 store i32 %v4, i32* @g1, align 4, !tbaa !0
51 invoke void @f12(i8* %v2, i8* bitcast ({ i8*, i8* }* @g4 to i8*), i8* null) #1
52 to label %b7 unwind label %b1
53
54b1: ; preds = %b0
55 %v5 = landingpad { i8*, i32 }
56 catch i8* null
57 %v6 = extractvalue { i8*, i32 } %v5, 0
58 %v7 = tail call i8* @f13(i8* %v6) #0
59 store i32 0, i32* @g1, align 4, !tbaa !0
60 invoke void @f14() #1
61 to label %b7 unwind label %b2
62
63b2: ; preds = %b1
64 %v8 = landingpad { i8*, i32 }
65 catch i8* null
66 invoke void @f15()
67 to label %b3 unwind label %b6
68
69b3: ; preds = %b2
70 %v9 = extractvalue { i8*, i32 } %v8, 0
71 %v10 = tail call i8* @f13(i8* %v9) #0
72 tail call void @f15()
73 %v11 = load i32, i32* @g1, align 4, !tbaa !0
74 %v12 = icmp eq i32 %v11, 0
75 br i1 %v12, label %b5, label %b4
76
77b4: ; preds = %b3
78 tail call void (i8*, ...) @f8(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @g5, i32 0, i32 0))
79 store i32 1, i32* @g0, align 4, !tbaa !0
80 br label %b5
81
82b5: ; preds = %b4, %b3
83 %v13 = tail call i32 @f1()
84 %v14 = tail call i32 @f2(i32 1)
85 ret i32 %v14
86
87b6: ; preds = %b2
88 %v15 = landingpad { i8*, i32 }
89 catch i8* null
90 tail call void @f16() #2
91 unreachable
92
93b7: ; preds = %b1, %b0
94 unreachable
95}
96
97declare void @f7()
98
99declare void @f8(i8*, ...)
100
101declare void @f9()
102
103declare i8* @f10(i32)
104
105declare i32 @f11(...)
106
107declare void @f12(i8*, i8*, i8*)
108
109declare i8* @f13(i8*)
110
111declare void @f14()
112
113declare void @f15()
114
115declare void @f16()
116
117attributes #0 = { nounwind }
118attributes #1 = { noreturn }
119attributes #2 = { noreturn nounwind }
120
121!0 = !{!1, !1, i64 0}
122!1 = !{!"int", !2}
123!2 = !{!"omnipotent char", !3}
124!3 = !{!"Simple C/C++ TBAA"}