xref: /aosp_15_r20/external/llvm/test/CodeGen/NVPTX/load-with-non-coherent-cache.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck -check-prefix=SM20 %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx64 -mcpu=sm_35 | FileCheck -check-prefix=SM35 %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"
5*9880d681SAndroid Build Coastguard Workertarget triple = "nvptx64-unknown-unknown"
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo1(
8*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.f32
9*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo1(
10*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.f32
11*9880d681SAndroid Build Coastguard Workerdefine void @foo1(float * noalias readonly %from, float * %to) {
12*9880d681SAndroid Build Coastguard Worker  %1 = load float, float * %from
13*9880d681SAndroid Build Coastguard Worker  store float %1, float * %to
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo2(
18*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.f64
19*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo2(
20*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.f64
21*9880d681SAndroid Build Coastguard Workerdefine void @foo2(double * noalias readonly %from, double * %to) {
22*9880d681SAndroid Build Coastguard Worker  %1 = load double, double * %from
23*9880d681SAndroid Build Coastguard Worker  store double %1, double * %to
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo3(
28*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u16
29*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo3(
30*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u16
31*9880d681SAndroid Build Coastguard Workerdefine void @foo3(i16 * noalias readonly %from, i16 * %to) {
32*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16 * %from
33*9880d681SAndroid Build Coastguard Worker  store i16 %1, i16 * %to
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo4(
38*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u32
39*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo4(
40*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u32
41*9880d681SAndroid Build Coastguard Workerdefine void @foo4(i32 * noalias readonly %from, i32 * %to) {
42*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32 * %from
43*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 * %to
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo5(
48*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u64
49*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo5(
50*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u64
51*9880d681SAndroid Build Coastguard Workerdefine void @foo5(i64 * noalias readonly %from, i64 * %to) {
52*9880d681SAndroid Build Coastguard Worker  %1 = load i64, i64 * %from
53*9880d681SAndroid Build Coastguard Worker  store i64 %1, i64 * %to
54*9880d681SAndroid Build Coastguard Worker  ret void
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; i128 is non standard integer in nvptx64
58*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo6(
59*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u64
60*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u64
61*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo6(
62*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u64
63*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u64
64*9880d681SAndroid Build Coastguard Workerdefine void @foo6(i128 * noalias readonly %from, i128 * %to) {
65*9880d681SAndroid Build Coastguard Worker  %1 = load i128, i128 * %from
66*9880d681SAndroid Build Coastguard Worker  store i128 %1, i128 * %to
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo7(
71*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.u8
72*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo7(
73*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.u8
74*9880d681SAndroid Build Coastguard Workerdefine void @foo7(<2 x i8> * noalias readonly %from, <2 x i8> * %to) {
75*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i8>, <2 x i8> * %from
76*9880d681SAndroid Build Coastguard Worker  store <2 x i8> %1, <2 x i8> * %to
77*9880d681SAndroid Build Coastguard Worker  ret void
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo8(
81*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.u16
82*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo8(
83*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.u16
84*9880d681SAndroid Build Coastguard Workerdefine void @foo8(<2 x i16> * noalias readonly %from, <2 x i16> * %to) {
85*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i16>, <2 x i16> * %from
86*9880d681SAndroid Build Coastguard Worker  store <2 x i16> %1, <2 x i16> * %to
87*9880d681SAndroid Build Coastguard Worker  ret void
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo9(
91*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.u32
92*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo9(
93*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.u32
94*9880d681SAndroid Build Coastguard Workerdefine void @foo9(<2 x i32> * noalias readonly %from, <2 x i32> * %to) {
95*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i32>, <2 x i32> * %from
96*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %1, <2 x i32> * %to
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo10(
101*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.u64
102*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo10(
103*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.u64
104*9880d681SAndroid Build Coastguard Workerdefine void @foo10(<2 x i64> * noalias readonly %from, <2 x i64> * %to) {
105*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64> * %from
106*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %1, <2 x i64> * %to
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo11(
111*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.f32
112*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo11(
113*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.f32
114*9880d681SAndroid Build Coastguard Workerdefine void @foo11(<2 x float> * noalias readonly %from, <2 x float> * %to) {
115*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x float>, <2 x float> * %from
116*9880d681SAndroid Build Coastguard Worker  store <2 x float> %1, <2 x float> * %to
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo12(
121*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.f64
122*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo12(
123*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.f64
124*9880d681SAndroid Build Coastguard Workerdefine void @foo12(<2 x double> * noalias readonly %from, <2 x double> * %to) {
125*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double> * %from
126*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double> * %to
127*9880d681SAndroid Build Coastguard Worker  ret void
128*9880d681SAndroid Build Coastguard Worker}
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo13(
131*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v4.u8
132*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo13(
133*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v4.u8
134*9880d681SAndroid Build Coastguard Workerdefine void @foo13(<4 x i8> * noalias readonly %from, <4 x i8> * %to) {
135*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8> * %from
136*9880d681SAndroid Build Coastguard Worker  store <4 x i8> %1, <4 x i8> * %to
137*9880d681SAndroid Build Coastguard Worker  ret void
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo14(
141*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v4.u16
142*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo14(
143*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v4.u16
144*9880d681SAndroid Build Coastguard Workerdefine void @foo14(<4 x i16> * noalias readonly %from, <4 x i16> * %to) {
145*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16> * %from
146*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %1, <4 x i16> * %to
147*9880d681SAndroid Build Coastguard Worker  ret void
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo15(
151*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v4.u32
152*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo15(
153*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v4.u32
154*9880d681SAndroid Build Coastguard Workerdefine void @foo15(<4 x i32> * noalias readonly %from, <4 x i32> * %to) {
155*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32> * %from
156*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %1, <4 x i32> * %to
157*9880d681SAndroid Build Coastguard Worker  ret void
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo16(
161*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v4.f32
162*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo16(
163*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v4.f32
164*9880d681SAndroid Build Coastguard Workerdefine void @foo16(<4 x float> * noalias readonly %from, <4 x float> * %to) {
165*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float> * %from
166*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float> * %to
167*9880d681SAndroid Build Coastguard Worker  ret void
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo17(
171*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.f64
172*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.v2.f64
173*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo17(
174*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.f64
175*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.v2.f64
176*9880d681SAndroid Build Coastguard Workerdefine void @foo17(<4 x double> * noalias readonly %from, <4 x double> * %to) {
177*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double> * %from
178*9880d681SAndroid Build Coastguard Worker  store <4 x double> %1, <4 x double> * %to
179*9880d681SAndroid Build Coastguard Worker  ret void
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo18(
183*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.u64
184*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo18(
185*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.u64
186*9880d681SAndroid Build Coastguard Workerdefine void @foo18(float ** noalias readonly %from, float ** %to) {
187*9880d681SAndroid Build Coastguard Worker  %1 = load float *, float ** %from
188*9880d681SAndroid Build Coastguard Worker  store float * %1, float ** %to
189*9880d681SAndroid Build Coastguard Worker  ret void
190*9880d681SAndroid Build Coastguard Worker}
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker; Test that we can infer a cached load for a pointer induction variable.
193*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: .visible .entry foo19(
194*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.f32
195*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: .visible .entry foo19(
196*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.nc.f32
197*9880d681SAndroid Build Coastguard Workerdefine void @foo19(float * noalias readonly %from, float * %to, i32 %n) {
198*9880d681SAndroid Build Coastguard Workerentry:
199*9880d681SAndroid Build Coastguard Worker  br label %loop
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Workerloop:
202*9880d681SAndroid Build Coastguard Worker  %i = phi i32 [ 0, %entry ], [ %nexti, %loop ]
203*9880d681SAndroid Build Coastguard Worker  %sum = phi float [ 0.0, %entry ], [ %nextsum, %loop ]
204*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr inbounds float, float * %from, i32 %i
205*9880d681SAndroid Build Coastguard Worker  %value = load float, float * %ptr, align 4
206*9880d681SAndroid Build Coastguard Worker  %nextsum = fadd float %value, %sum
207*9880d681SAndroid Build Coastguard Worker  %nexti = add nsw i32 %i, 1
208*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %nexti, %n
209*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %exit, label %loop
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Workerexit:
212*9880d681SAndroid Build Coastguard Worker  store float %nextsum, float * %to
213*9880d681SAndroid Build Coastguard Worker  ret void
214*9880d681SAndroid Build Coastguard Worker}
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker; This test captures the case of a non-kernel function. In a
217*9880d681SAndroid Build Coastguard Worker; non-kernel function, without interprocedural analysis, we do not
218*9880d681SAndroid Build Coastguard Worker; know that the parameter is global. We also do not know that the
219*9880d681SAndroid Build Coastguard Worker; pointed-to memory is never written to (for the duration of the
220*9880d681SAndroid Build Coastguard Worker; kernel). For both reasons, we cannot use a cached load here.
221*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: notkernel(
222*9880d681SAndroid Build Coastguard Worker; SM20: ld.f32
223*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: notkernel(
224*9880d681SAndroid Build Coastguard Worker; SM35: ld.f32
225*9880d681SAndroid Build Coastguard Workerdefine void @notkernel(float * noalias readonly %from, float * %to) {
226*9880d681SAndroid Build Coastguard Worker  %1 = load float, float * %from
227*9880d681SAndroid Build Coastguard Worker  store float %1, float * %to
228*9880d681SAndroid Build Coastguard Worker  ret void
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; As @notkernel, but with the parameter explicitly marked as global. We still
232*9880d681SAndroid Build Coastguard Worker; do not know that the parameter is never written to (for the duration of the
233*9880d681SAndroid Build Coastguard Worker; kernel). This case does not currently come up normally since we do not infer
234*9880d681SAndroid Build Coastguard Worker; that pointers are global interprocedurally as of 2015-08-05.
235*9880d681SAndroid Build Coastguard Worker; SM20-LABEL: notkernel2(
236*9880d681SAndroid Build Coastguard Worker; SM20: ld.global.f32
237*9880d681SAndroid Build Coastguard Worker; SM35-LABEL: notkernel2(
238*9880d681SAndroid Build Coastguard Worker; SM35: ld.global.f32
239*9880d681SAndroid Build Coastguard Workerdefine void @notkernel2(float addrspace(1) * noalias readonly %from, float * %to) {
240*9880d681SAndroid Build Coastguard Worker  %1 = load float, float addrspace(1) * %from
241*9880d681SAndroid Build Coastguard Worker  store float %1, float * %to
242*9880d681SAndroid Build Coastguard Worker  ret void
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker!nvvm.annotations = !{!1 ,!2 ,!3 ,!4 ,!5 ,!6, !7 ,!8 ,!9 ,!10 ,!11 ,!12, !13, !14, !15, !16, !17, !18, !19}
246*9880d681SAndroid Build Coastguard Worker!1 = !{void (float *, float *)* @foo1, !"kernel", i32 1}
247*9880d681SAndroid Build Coastguard Worker!2 = !{void (double *, double *)* @foo2, !"kernel", i32 1}
248*9880d681SAndroid Build Coastguard Worker!3 = !{void (i16 *, i16 *)* @foo3, !"kernel", i32 1}
249*9880d681SAndroid Build Coastguard Worker!4 = !{void (i32 *, i32 *)* @foo4, !"kernel", i32 1}
250*9880d681SAndroid Build Coastguard Worker!5 = !{void (i64 *, i64 *)* @foo5, !"kernel", i32 1}
251*9880d681SAndroid Build Coastguard Worker!6 = !{void (i128 *, i128 *)* @foo6, !"kernel", i32 1}
252*9880d681SAndroid Build Coastguard Worker!7 = !{void (<2 x i8> *, <2 x i8> *)* @foo7, !"kernel", i32 1}
253*9880d681SAndroid Build Coastguard Worker!8 = !{void (<2 x i16> *, <2 x i16> *)* @foo8, !"kernel", i32 1}
254*9880d681SAndroid Build Coastguard Worker!9 = !{void (<2 x i32> *, <2 x i32> *)* @foo9, !"kernel", i32 1}
255*9880d681SAndroid Build Coastguard Worker!10 = !{void (<2 x i64> *, <2 x i64> *)* @foo10, !"kernel", i32 1}
256*9880d681SAndroid Build Coastguard Worker!11 = !{void (<2 x float> *, <2 x float> *)* @foo11, !"kernel", i32 1}
257*9880d681SAndroid Build Coastguard Worker!12 = !{void (<2 x double> *, <2 x double> *)* @foo12, !"kernel", i32 1}
258*9880d681SAndroid Build Coastguard Worker!13 = !{void (<4 x i8> *, <4 x i8> *)* @foo13, !"kernel", i32 1}
259*9880d681SAndroid Build Coastguard Worker!14 = !{void (<4 x i16> *, <4 x i16> *)* @foo14, !"kernel", i32 1}
260*9880d681SAndroid Build Coastguard Worker!15 = !{void (<4 x i32> *, <4 x i32> *)* @foo15, !"kernel", i32 1}
261*9880d681SAndroid Build Coastguard Worker!16 = !{void (<4 x float> *, <4 x float> *)* @foo16, !"kernel", i32 1}
262*9880d681SAndroid Build Coastguard Worker!17 = !{void (<4 x double> *, <4 x double> *)* @foo17, !"kernel", i32 1}
263*9880d681SAndroid Build Coastguard Worker!18 = !{void (float **, float **)* @foo18, !"kernel", i32 1}
264*9880d681SAndroid Build Coastguard Worker!19 = !{void (float *, float *, i32)* @foo19, !"kernel", i32 1}
265