[RISCV] Rename a lambda to have plural nouns to reflect that it contains a loop. NFC
[llvm-project.git] / llvm / test / Transforms / Inline / inline_ssp.ll
blobab6f8d5158007367b982c5f94869a085ee912a0c
1 ; RUN: opt -passes=inline %s -S | FileCheck %s
2 ; RUN: opt -passes='cgscc(inline)' %s -S | FileCheck %s
3 ; Ensure SSP attributes are propagated correctly when inlining.
5 @.str = private unnamed_addr constant [11 x i8] c"fun_nossp\0A\00", align 1
6 @.str1 = private unnamed_addr constant [9 x i8] c"fun_ssp\0A\00", align 1
7 @.str2 = private unnamed_addr constant [15 x i8] c"fun_sspstrong\0A\00", align 1
8 @.str3 = private unnamed_addr constant [12 x i8] c"fun_sspreq\0A\00", align 1
10 ; These first four functions (@fun_sspreq, @fun_sspstrong, @fun_ssp, @fun_nossp)
11 ; are used by the remaining functions to ensure that the SSP attributes are
12 ; propagated correctly.  If the caller had an SSP attribute before inlining, it
13 ; should have its new SSP attribute set as:
14 ; strictest(caller-ssp-attr, callee-ssp-attr), where strictness is ordered as:
15 ;  sspreq > sspstrong > ssp
17 define internal void @fun_sspreq() sspreq {
18 entry:
19   %call = call i32 (ptr, ...) @printf(ptr @.str3)
20   ret void
23 define internal void @fun_sspreq_alwaysinline() sspreq alwaysinline {
24 entry:
25   %call = call i32 (ptr, ...) @printf(ptr @.str3)
26   ret void
29 define internal void @fun_sspstrong() sspstrong {
30 entry:
31   %call = call i32 (ptr, ...) @printf(ptr @.str2)
32   ret void
35 define internal void @fun_ssp() ssp {
36 entry:
37   %call = call i32 (ptr, ...) @printf(ptr @.str1)
38   ret void
41 define internal void @fun_nossp() {
42 entry:
43   %call = call i32 (ptr, ...) @printf(ptr @.str)
44   ret void
47 ; Tests start below.
49 define void @inline_req_req() sspreq {
50 entry:
51 ; CHECK: @inline_req_req() #[[SSPREQ:[0-9]]]
52   call void @fun_sspreq()
53   ret void
56 define void @inline_req_strong() sspstrong {
57 entry:
58 ; CHECK: @inline_req_strong() #[[SSPREQ]]
59   call void @fun_sspreq()
60   ret void
63 define void @inline_req_ssp() ssp {
64 entry:
65 ; CHECK: @inline_req_ssp() #[[SSPREQ]]
66   call void @fun_sspreq()
67   ret void
70 define void @inline_req_nossp() {
71 entry:
72 ; CHECK: @inline_req_nossp() {
73   call void @fun_sspreq()
74   ret void
77 define void @alwaysinline_req_nossp() {
78 entry:
79 ; CHECK: @alwaysinline_req_nossp() {
80   call void @fun_sspreq_alwaysinline()
81   ret void
84 define void @inline_strong_req() sspreq {
85 entry:
86 ; CHECK: @inline_strong_req() #[[SSPREQ]]
87   call void @fun_sspstrong()
88   ret void
92 define void @inline_strong_strong() sspstrong {
93 entry:
94 ; CHECK: @inline_strong_strong() #[[SSPSTRONG:[0-9]]]
95   call void @fun_sspstrong()
96   ret void
99 define void @inline_strong_ssp() ssp {
100 entry:
101 ; CHECK: @inline_strong_ssp() #[[SSPSTRONG]]
102   call void @fun_sspstrong()
103   ret void
106 define void @inline_strong_nossp() {
107 entry:
108 ; CHECK: @inline_strong_nossp() {
109   call void @fun_sspstrong()
110   ret void
113 define void @inline_ssp_req() sspreq {
114 entry:
115 ; CHECK: @inline_ssp_req() #[[SSPREQ]]
116   call void @fun_ssp()
117   ret void
121 define void @inline_ssp_strong() sspstrong {
122 entry:
123 ; CHECK: @inline_ssp_strong() #[[SSPSTRONG]]
124   call void @fun_ssp()
125   ret void
128 define void @inline_ssp_ssp() ssp {
129 entry:
130 ; CHECK: @inline_ssp_ssp() #[[SSP:[0-9]]]
131   call void @fun_ssp()
132   ret void
135 define void @inline_ssp_nossp() {
136 entry:
137 ; CHECK: @inline_ssp_nossp() {
138   call void @fun_ssp()
139   ret void
142 define void @inline_nossp_req() sspreq {
143 entry:
144 ; CHECK: @inline_nossp_req() #[[SSPREQ]]
145   call void @fun_nossp()
146   ret void
150 define void @inline_nossp_strong() sspstrong {
151 entry:
152 ; CHECK: @inline_nossp_strong() #[[SSPSTRONG]]
153   call void @fun_nossp()
154   ret void
157 define void @inline_nossp_ssp() ssp {
158 entry:
159 ; CHECK: @inline_nossp_ssp() #[[SSP]]
160   call void @fun_nossp()
161   ret void
164 define void @inline_nossp_nossp() {
165 entry:
166 ; CHECK: @inline_nossp_nossp() {
167   call void @fun_nossp()
168   ret void
171 declare i32 @printf(ptr, ...)
173 ; CHECK: attributes #[[SSPREQ]] = { sspreq }
174 ; CHECK: attributes #[[SSPSTRONG]] = { sspstrong }
175 ; CHECK: attributes #[[SSP]] = { ssp }