1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes
2; RUN: opt < %s -S -openmp-opt-cgscc        | FileCheck %s
3; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s
4
5declare void @unknown()
6
7; __kmpc functions
8define void @__kmpc_noinline() noinline nounwind {
9; CHECK: Function Attrs: nounwind
10; CHECK-LABEL: @__kmpc_noinline(
11; CHECK-NEXT:    call void @unknown()
12; CHECK-NEXT:    ret void
13;
14  call void @unknown()
15  ret void
16}
17; omp_X functions
18define void @omp_noinline() noinline nounwind {
19; CHECK: Function Attrs: nounwind
20; CHECK-LABEL: @omp_noinline(
21; CHECK-NEXT:    call void @unknown()
22; CHECK-NEXT:    ret void
23;
24  call void @unknown()
25  ret void
26}
27; _OMP namespace
28define void @_ZN4_OMP_noinline() noinline nounwind {
29; CHECK: Function Attrs: nounwind
30; CHECK-LABEL: @_ZN4_OMP_noinline(
31; CHECK-NEXT:    call void @unknown()
32; CHECK-NEXT:    ret void
33;
34  call void @unknown()
35  ret void
36}
37
38; Negative tests:
39
40define void @__kmpc_noinline_optnone() noinline optnone nounwind {
41; CHECK: Function Attrs: noinline nounwind optnone
42; CHECK-LABEL: @__kmpc_noinline_optnone(
43; CHECK-NEXT:    call void @unknown()
44; CHECK-NEXT:    ret void
45;
46  call void @unknown()
47  ret void
48}
49define void @omp_noinline_optnone() noinline optnone nounwind {
50; CHECK: Function Attrs: noinline nounwind optnone
51; CHECK-LABEL: @omp_noinline_optnone(
52; CHECK-NEXT:    call void @unknown()
53; CHECK-NEXT:    ret void
54;
55  call void @unknown()
56  ret void
57}
58; _OMP namespace
59define void @_ZN4_OMP_noinline_optnone() noinline optnone nounwind {
60; CHECK: Function Attrs: noinline nounwind optnone
61; CHECK-LABEL: @_ZN4_OMP_noinline_optnone(
62; CHECK-NEXT:    call void @unknown()
63; CHECK-NEXT:    ret void
64;
65  call void @unknown()
66  ret void
67}
68define void @a___kmpc_noinline() noinline nounwind {
69; CHECK: Function Attrs: noinline nounwind
70; CHECK-LABEL: @a___kmpc_noinline(
71; CHECK-NEXT:    call void @unknown()
72; CHECK-NEXT:    ret void
73;
74  call void @unknown()
75  ret void
76}
77define void @a_omp_noinline() noinline nounwind {
78; CHECK: Function Attrs: noinline nounwind
79; CHECK-LABEL: @a_omp_noinline(
80; CHECK-NEXT:    call void @unknown()
81; CHECK-NEXT:    ret void
82;
83  call void @unknown()
84  ret void
85}
86define void @a__ZN4_OMP_noinline() noinline nounwind {
87; CHECK: Function Attrs: noinline nounwind
88; CHECK-LABEL: @a__ZN4_OMP_noinline(
89; CHECK-NEXT:    call void @unknown()
90; CHECK-NEXT:    ret void
91;
92  call void @unknown()
93  ret void
94}
95
96!llvm.module.flags = !{!0, !1}
97
98!0 = !{i32 7, !"openmp", i32 50}
99!1 = !{i32 7, !"openmp-device", i32 50}
100