xref: /aosp_15_r20/external/llvm/test/Transforms/Inline/attributes.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine i32 @noattr_callee(i32 %i) {
5*9880d681SAndroid Build Coastguard Worker  ret i32 %i
6*9880d681SAndroid Build Coastguard Worker}
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_address_callee(i32 %i) sanitize_address {
9*9880d681SAndroid Build Coastguard Worker  ret i32 %i
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_thread_callee(i32 %i) sanitize_thread {
13*9880d681SAndroid Build Coastguard Worker  ret i32 %i
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_memory_callee(i32 %i) sanitize_memory {
17*9880d681SAndroid Build Coastguard Worker  ret i32 %i
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine i32 @safestack_callee(i32 %i) safestack {
21*9880d681SAndroid Build Coastguard Worker  ret i32 %i
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_callee(i32 %i) alwaysinline {
25*9880d681SAndroid Build Coastguard Worker  ret i32 %i
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_address_callee(i32 %i) alwaysinline sanitize_address {
29*9880d681SAndroid Build Coastguard Worker  ret i32 %i
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_thread_callee(i32 %i) alwaysinline sanitize_thread {
33*9880d681SAndroid Build Coastguard Worker  ret i32 %i
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_memory_callee(i32 %i) alwaysinline sanitize_memory {
37*9880d681SAndroid Build Coastguard Worker  ret i32 %i
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_safestack_callee(i32 %i) alwaysinline safestack {
41*9880d681SAndroid Build Coastguard Worker  ret i32 %i
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; Check that:
46*9880d681SAndroid Build Coastguard Worker;  * noattr callee is inlined into noattr caller,
47*9880d681SAndroid Build Coastguard Worker;  * sanitize_(address|memory|thread) callee is not inlined into noattr caller,
48*9880d681SAndroid Build Coastguard Worker;  * alwaysinline callee is always inlined no matter what sanitize_* attributes are present.
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_address(i32 %arg) {
51*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
52*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_address_callee(i32 %x1)
53*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
54*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_address_callee(i32 %x3)
55*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_address(
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_address_callee
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_memory(i32 %arg) {
62*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
63*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_memory_callee(i32 %x1)
64*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
65*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_memory_callee(i32 %x3)
66*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_memory(
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_memory_callee
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_thread(i32 %arg) {
73*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
74*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_thread_callee(i32 %x1)
75*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
76*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3)
77*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_thread(
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_thread_callee
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker; Check that:
85*9880d681SAndroid Build Coastguard Worker;  * noattr callee is not inlined into sanitize_(address|memory|thread) caller,
86*9880d681SAndroid Build Coastguard Worker;  * sanitize_(address|memory|thread) callee is inlined into the caller with the same attribute,
87*9880d681SAndroid Build Coastguard Worker;  * alwaysinline callee is always inlined no matter what sanitize_* attributes are present.
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_address(i32 %arg) sanitize_address {
90*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
91*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_address_callee(i32 %x1)
92*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
93*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_address_callee(i32 %x3)
94*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_address(
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_memory(i32 %arg) sanitize_memory {
101*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
102*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_memory_callee(i32 %x1)
103*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
104*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_memory_callee(i32 %x3)
105*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_memory(
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_thread(i32 %arg) sanitize_thread {
112*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
113*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @sanitize_thread_callee(i32 %x1)
114*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
115*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3)
116*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_thread(
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine i32 @test_safestack(i32 %arg) safestack {
123*9880d681SAndroid Build Coastguard Worker  %x1 = call i32 @noattr_callee(i32 %arg)
124*9880d681SAndroid Build Coastguard Worker  %x2 = call i32 @safestack_callee(i32 %x1)
125*9880d681SAndroid Build Coastguard Worker  %x3 = call i32 @alwaysinline_callee(i32 %x2)
126*9880d681SAndroid Build Coastguard Worker  %x4 = call i32 @alwaysinline_safestack_callee(i32 %x3)
127*9880d681SAndroid Build Coastguard Worker  ret i32 %x4
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_safestack(
129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker; Check that a function doesn't get inlined if target-cpu strings don't match
134*9880d681SAndroid Build Coastguard Worker; exactly.
135*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu_callee0(i32 %i) "target-cpu"="corei7" {
136*9880d681SAndroid Build Coastguard Worker  ret i32 %i
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu0(i32 %i) "target-cpu"="corei7" {
140*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @test_target_cpu_callee0(i32 %i)
141*9880d681SAndroid Build Coastguard Worker  ret i32 %1
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_cpu0(
143*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: @test_target_cpu_callee0
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu_callee1(i32 %i) "target-cpu"="x86-64" {
147*9880d681SAndroid Build Coastguard Worker  ret i32 %i
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu1(i32 %i) "target-cpu"="corei7" {
151*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @test_target_cpu_callee1(i32 %i)
152*9880d681SAndroid Build Coastguard Worker  ret i32 %1
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_cpu1(
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @test_target_cpu_callee1
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; Check that a function doesn't get inlined if target-features strings don't
159*9880d681SAndroid Build Coastguard Worker; match exactly.
160*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features_callee0(i32 %i)  "target-features"="+sse4.2" {
161*9880d681SAndroid Build Coastguard Worker  ret i32 %i
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features0(i32 %i) "target-features"="+sse4.2" {
165*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @test_target_features_callee0(i32 %i)
166*9880d681SAndroid Build Coastguard Worker  ret i32 %1
167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_features0(
168*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: @test_target_features_callee0
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features_callee1(i32 %i) "target-features"="+avx2" {
172*9880d681SAndroid Build Coastguard Worker  ret i32 %i
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features1(i32 %i) "target-features"="+sse4.2" {
176*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @test_target_features_callee1(i32 %i)
177*9880d681SAndroid Build Coastguard Worker  ret i32 %1
178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_features1(
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @test_target_features_callee1
180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Workerdefine i32 @less-precise-fpmad_callee0(i32 %i) "less-precise-fpmad"="false" {
184*9880d681SAndroid Build Coastguard Worker  ret i32 %i
185*9880d681SAndroid Build Coastguard Worker; CHECK: @less-precise-fpmad_callee0(i32 %i) [[FPMAD_FALSE:#[0-9]+]] {
186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine i32 @less-precise-fpmad_callee1(i32 %i) "less-precise-fpmad"="true" {
190*9880d681SAndroid Build Coastguard Worker  ret i32 %i
191*9880d681SAndroid Build Coastguard Worker; CHECK: @less-precise-fpmad_callee1(i32 %i) [[FPMAD_TRUE:#[0-9]+]] {
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad0(i32 %i) "less-precise-fpmad"="false" {
196*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @less-precise-fpmad_callee0(i32 %i)
197*9880d681SAndroid Build Coastguard Worker  ret i32 %1
198*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad0(i32 %i) [[FPMAD_FALSE]] {
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad1(i32 %i) "less-precise-fpmad"="false" {
203*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @less-precise-fpmad_callee1(i32 %i)
204*9880d681SAndroid Build Coastguard Worker  ret i32 %1
205*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad1(i32 %i) [[FPMAD_FALSE]] {
206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
207*9880d681SAndroid Build Coastguard Worker}
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad2(i32 %i) "less-precise-fpmad"="true" {
210*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @less-precise-fpmad_callee0(i32 %i)
211*9880d681SAndroid Build Coastguard Worker  ret i32 %1
212*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad2(i32 %i) [[FPMAD_FALSE]] {
213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
214*9880d681SAndroid Build Coastguard Worker}
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad3(i32 %i) "less-precise-fpmad"="true" {
217*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @less-precise-fpmad_callee1(i32 %i)
218*9880d681SAndroid Build Coastguard Worker  ret i32 %1
219*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad3(i32 %i) [[FPMAD_TRUE]] {
220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Workerdefine i32 @no-implicit-float_callee0(i32 %i) {
224*9880d681SAndroid Build Coastguard Worker  ret i32 %i
225*9880d681SAndroid Build Coastguard Worker; CHECK: @no-implicit-float_callee0(i32 %i) {
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine i32 @no-implicit-float_callee1(i32 %i) noimplicitfloat {
230*9880d681SAndroid Build Coastguard Worker  ret i32 %i
231*9880d681SAndroid Build Coastguard Worker; CHECK: @no-implicit-float_callee1(i32 %i) [[NOIMPLICITFLOAT:#[0-9]+]] {
232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float0(i32 %i) {
236*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-implicit-float_callee0(i32 %i)
237*9880d681SAndroid Build Coastguard Worker  ret i32 %1
238*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float0(i32 %i) {
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float1(i32 %i) {
243*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-implicit-float_callee1(i32 %i)
244*9880d681SAndroid Build Coastguard Worker  ret i32 %1
245*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float1(i32 %i) [[NOIMPLICITFLOAT]] {
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
247*9880d681SAndroid Build Coastguard Worker}
248*9880d681SAndroid Build Coastguard Worker
249*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float2(i32 %i) noimplicitfloat {
250*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-implicit-float_callee0(i32 %i)
251*9880d681SAndroid Build Coastguard Worker  ret i32 %1
252*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float2(i32 %i) [[NOIMPLICITFLOAT]] {
253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
254*9880d681SAndroid Build Coastguard Worker}
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float3(i32 %i) noimplicitfloat {
257*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-implicit-float_callee1(i32 %i)
258*9880d681SAndroid Build Coastguard Worker  ret i32 %1
259*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float3(i32 %i) [[NOIMPLICITFLOAT]] {
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
261*9880d681SAndroid Build Coastguard Worker}
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker; Check that no-jump-tables flag propagates from inlined callee to caller
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdefine i32 @no-use-jump-tables_callee0(i32 %i) {
266*9880d681SAndroid Build Coastguard Worker  ret i32 %i
267*9880d681SAndroid Build Coastguard Worker; CHECK: @no-use-jump-tables_callee0(i32 %i) {
268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
269*9880d681SAndroid Build Coastguard Worker}
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Workerdefine i32 @no-use-jump-tables_callee1(i32 %i) "no-jump-tables"="true" {
272*9880d681SAndroid Build Coastguard Worker  ret i32 %i
273*9880d681SAndroid Build Coastguard Worker; CHECK: @no-use-jump-tables_callee1(i32 %i) [[NOUSEJUMPTABLES:#[0-9]+]] {
274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables0(i32 %i) {
278*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-use-jump-tables_callee0(i32 %i)
279*9880d681SAndroid Build Coastguard Worker  ret i32 %1
280*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables0(i32 %i) {
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
282*9880d681SAndroid Build Coastguard Worker}
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables1(i32 %i) {
285*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-use-jump-tables_callee1(i32 %i)
286*9880d681SAndroid Build Coastguard Worker  ret i32 %1
287*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables1(i32 %i) [[NOUSEJUMPTABLES]] {
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables2(i32 %i) "no-jump-tables"="true" {
292*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-use-jump-tables_callee0(i32 %i)
293*9880d681SAndroid Build Coastguard Worker  ret i32 %1
294*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables2(i32 %i) [[NOUSEJUMPTABLES]] {
295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
296*9880d681SAndroid Build Coastguard Worker}
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables3(i32 %i) "no-jump-tables"="true" {
299*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @no-use-jump-tables_callee1(i32 %i)
300*9880d681SAndroid Build Coastguard Worker  ret i32 %1
301*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables3(i32 %i) [[NOUSEJUMPTABLES]] {
302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[FPMAD_FALSE]] = { "less-precise-fpmad"="false" }
306*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[FPMAD_TRUE]] = { "less-precise-fpmad"="true" }
307*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[NOIMPLICITFLOAT]] = { noimplicitfloat }
308*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[NOUSEJUMPTABLES]] = { "no-jump-tables"="true" }