1 ; RUN: llc %s -o - | FileCheck %s
2 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
3 target triple = "thumbv7m-arm-none-eabi"
6 ; CHECK: bl OUTLINED_FUNCTION
8 ; CHECK: bl OUTLINED_FUNCTION
10 ; CHECK-NOT: bl OUTLINED_FUNCTION
12 @a = hidden global i32 0, align 4
13 @b = hidden global i32 0, align 4
14 @c = hidden global i32 0, align 4
15 @d = hidden global i32 0, align 4
16 @e = hidden global i32 0, align 4
17 @f = hidden global i32 0, align 4
18 @g = hidden global i32 0, align 4
19 @h = hidden global i32 0, align 4
20 @i = hidden global i32 0, align 4
22 define hidden i32 @x() local_unnamed_addr #0 {
24 %0 = load volatile i32, ptr @a, align 4
25 %1 = load volatile i32, ptr @b, align 4
26 %add = add nsw i32 %1, %0
27 %2 = load volatile i32, ptr @c, align 4
28 %3 = load volatile i32, ptr @d, align 4
29 %add1 = add nsw i32 %3, %2
30 %div = sdiv i32 %add, %add1
31 %4 = load volatile i32, ptr @e, align 4
32 %5 = load volatile i32, ptr @f, align 4
33 %6 = load volatile i32, ptr @g, align 4
34 %div3 = sdiv i32 %5, %6
35 %7 = load volatile i32, ptr @h, align 4
36 %8 = load volatile i32, ptr @i, align 4
37 %add2 = add i32 %div, 1
38 %add4 = add i32 %add2, %4
39 %add5 = add i32 %add4, %div3
40 %add6 = add i32 %add5, %7
41 %add7 = add i32 %add6, %8
45 define hidden i32 @y() local_unnamed_addr #0 {
47 %0 = load volatile i32, ptr @a, align 4
48 %1 = load volatile i32, ptr @b, align 4
49 %add = add nsw i32 %1, %0
50 %2 = load volatile i32, ptr @c, align 4
51 %3 = load volatile i32, ptr @d, align 4
52 %add1 = add nsw i32 %3, %2
53 %div = sdiv i32 %add, %add1
54 %4 = load volatile i32, ptr @e, align 4
55 %5 = load volatile i32, ptr @f, align 4
56 %6 = load volatile i32, ptr @g, align 4
57 %div3 = sdiv i32 %5, %6
58 %7 = load volatile i32, ptr @h, align 4
59 %8 = load volatile i32, ptr @i, align 4
60 %add2 = add i32 %div, 2
61 %add4 = add i32 %add2, %4
62 %add5 = add i32 %add4, %div3
63 %add6 = add i32 %add5, %7
64 %add7 = add i32 %add6, %8
68 define hidden i32 @z() local_unnamed_addr #1 {
70 %0 = load volatile i32, ptr @a, align 4
71 %1 = load volatile i32, ptr @b, align 4
72 %add = add nsw i32 %1, %0
73 %2 = load volatile i32, ptr @c, align 4
74 %3 = load volatile i32, ptr @d, align 4
75 %add1 = add nsw i32 %3, %2
76 %div = sdiv i32 %add, %add1
77 %4 = load volatile i32, ptr @e, align 4
78 %5 = load volatile i32, ptr @f, align 4
79 %6 = load volatile i32, ptr @g, align 4
80 %div3 = sdiv i32 %5, %6
81 %7 = load volatile i32, ptr @h, align 4
82 %8 = load volatile i32, ptr @i, align 4
83 %add2 = add i32 %div, 3
84 %add4 = add i32 %add2, %4
85 %add5 = add i32 %add4, %div3
86 %add6 = add i32 %add5, %7
87 %add7 = add i32 %add6, %8
91 attributes #0 = { minsize nofree norecurse nounwind optsize "sign-return-address"="non-leaf" }
92 attributes #1 = { minsize nofree norecurse nounwind optsize }
94 !llvm.module.flags = !{!0, !1, !2}
96 !0 = !{i32 8, !"branch-target-enforcement", i32 0}
97 !1 = !{i32 8, !"sign-return-address", i32 1}
98 !2 = !{i32 8, !"sign-return-address-all", i32 0}