2727 end
2828
2929 ir = sprint (io-> PTX. code_llvm (io, mod. kernel, Tuple{mod. Aggregate}))
30- @test occursin (r" @\w *kernel \w *\( ({ i64 }|\[ 1 x i64\] )\* " , ir) ||
31- occursin (r" @\w *kernel \w *\( ptr " , ir)
30+ @test occursin (r" @julia_kernel \w *\( ({ i64 }|\[ 1 x i64\] )\* " , ir) ||
31+ occursin (r" @julia_kernel \w *\( ptr " , ir)
3232
3333 ir = sprint (io-> PTX. code_llvm (io, mod. kernel, Tuple{mod. Aggregate}; kernel= true ))
34- @test occursin (r" @\w *kernel \w * \( .*({ i64 }|\[ 1 x i64\] ) " , ir)
34+ @test occursin (r" @_Z6kernel9Aggregate \( .*({ i64 }|\[ 1 x i64\] ) " , ir)
3535end
3636
3737@testset " property_annotations" begin
8383@testset " kernel state" begin
8484 # state should be passed by value to kernel functions
8585
86- kernel () = return
86+ mod = @eval module $ (gensym ())
87+ export kernel
88+ kernel () = return
89+ end
8790
88- ir = sprint (io-> PTX. code_llvm (io, kernel, Tuple{}))
89- @test occursin (r" @\w *kernel \w *\(\) " , ir)
91+ ir = sprint (io-> PTX. code_llvm (io, mod . kernel, Tuple{}))
92+ @test occursin (r" @julia_kernel \w *\(\) " , ir)
9093
91- ir = sprint (io-> PTX. code_llvm (io, kernel, Tuple{}; kernel= true ))
92- @test occursin (r" @ \w *kernel \w * \(\ [ 1 x i64\ ] %state\ )" , ir)
94+ ir = sprint (io-> PTX. code_llvm (io, mod . kernel, Tuple{}; kernel= true ))
95+ @test occursin (" @_Z6kernel( [1 x i64] %state)" , ir)
9396
9497 # state should only passed to device functions that use it
9598
@@ -111,13 +114,13 @@ end
111114 kernel= true , dump_module= true ))
112115
113116 # kernel should take state argument before all else
114- @test occursin (r" @\w *kernel \w * \(\[ 1 x i64\] %state" , ir)
117+ @test occursin (r" @_Z6kernelP5Int64 \(\[ 1 x i64\] %state" , ir)
115118
116119 # child1 doesn't use the state
117- @test occursin (r" @\w *child1 \w *\( (i64|i8\* |ptr)" , ir)
120+ @test occursin (r" @julia_child1 \w *\( (i64|i8\* |ptr)" , ir)
118121
119122 # child2 does
120- @test occursin (r" @\w *child2 \w *\(\[ 1 x i64\] %state" , ir)
123+ @test occursin (r" @julia_child2 \w *\(\[ 1 x i64\] %state" , ir)
121124
122125 # can't have the unlowered intrinsic
123126 @test ! occursin (" julia.gpu.state_getter" , ir)
@@ -133,46 +136,58 @@ end
133136@testset " child functions" begin
134137 # we often test using @noinline child functions, so test whether these survive
135138 # (despite not having side-effects)
136- @noinline child (i) = sink (i)
137- function parent (i)
138- child (i)
139- return
139+
140+ mod = @eval module $ (gensym ())
141+ import .. sink
142+ export child, parent
143+
144+ @noinline child (i) = sink (i)
145+ function parent (i)
146+ child (i)
147+ return
148+ end
140149 end
141150
142- asm = sprint (io-> PTX. code_native (io, parent, Tuple{Int64}))
143- @test occursin (r" call.uni\s +julia_.*child_ " m , asm)
151+ asm = sprint (io-> PTX. code_native (io, mod . parent, Tuple{Int64}))
152+ @test occursin (r" call.uni\s +julia_child_ " m , asm)
144153end
145154
146155@testset " kernel functions" begin
147- @noinline nonentry (i) = sink (i)
148- function entry (i)
149- nonentry (i)
150- return
156+ mod = @eval module $ (gensym ())
157+ import .. sink
158+ export nonentry, entry
159+
160+ @noinline nonentry (i) = sink (i)
161+ function entry (i)
162+ nonentry (i)
163+ return
164+ end
151165 end
152166
153- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64}; kernel= true ))
154- @test occursin (r" \. visible \. entry \w *entry" , asm)
155- @test ! occursin (r" \. visible \. func \w *nonentry" , asm)
156- @test occursin (r" \. func \w *nonentry" , asm)
167+ asm = sprint (io-> PTX. code_native (io, mod. entry, Tuple{Int64};
168+ kernel= true , dump_module= true ))
169+ @test occursin (" .visible .entry _Z5entry5Int64" , asm)
170+ @test ! occursin (" .visible .func julia_nonentry" , asm)
171+ @test occursin (" .func julia_nonentry" , asm)
157172
158173@testset " property_annotations" begin
159- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64}; kernel= true ))
174+ asm = sprint (io-> PTX. code_native (io, mod . entry, Tuple{Int64}; kernel= true ))
160175 @test ! occursin (" maxntid" , asm)
161176
162- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64};
177+ asm = sprint (io-> PTX. code_native (io, mod . entry, Tuple{Int64};
163178 kernel= true , maxthreads= 42 ))
164179 @test occursin (" .maxntid 42, 1, 1" , asm)
165180
166- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64};
181+ asm = sprint (io-> PTX. code_native (io, mod . entry, Tuple{Int64};
167182 kernel= true , minthreads= 42 ))
168183 @test occursin (" .reqntid 42, 1, 1" , asm)
169184
170- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64};
185+ asm = sprint (io-> PTX. code_native (io, mod . entry, Tuple{Int64};
171186 kernel= true , blocks_per_sm= 42 ))
172187 @test occursin (" .minnctapersm 42" , asm)
173188
174189 if LLVM. version () >= v " 4.0"
175- asm = sprint (io-> PTX. code_native (io, entry, Tuple{Int64};
190+ asm = sprint (io-> PTX. code_native (io, mod . entry, Tuple{Int64};
176191 kernel= true , maxregs= 42 ))
177192 @test occursin (" .maxnreg 42" , asm)
178193 end
@@ -183,44 +198,55 @@ end
183198 # bug: depending on a child function from multiple parents resulted in
184199 # the child only being present once
185200
186- @noinline child (i) = sink (i)
187- function parent1 (i)
188- child (i)
189- return
190- end
191-
192- asm = sprint (io-> PTX. code_native (io, parent1, Tuple{Int}))
193- @test occursin (r" .func \w *child_" , asm)
201+ mod = @eval module $ (gensym ())
202+ import .. sink
203+ export child, parent1, parent2
194204
195- function parent2 (i)
196- child (i+ 1 )
197- return
205+ @noinline child (i) = sink (i)
206+ function parent1 (i)
207+ child (i)
208+ return
209+ end
210+ function parent2 (i)
211+ child (i+ 1 )
212+ return
213+ end
198214 end
199215
200- asm = sprint (io-> PTX. code_native (io, parent2, Tuple{Int}))
201- @test occursin (r" .func \w *child_" , asm)
216+ asm = sprint (io-> PTX. code_native (io, mod. parent1, Tuple{Int}))
217+ @test occursin (" .func julia_child_" , asm)
218+
219+ asm = sprint (io-> PTX. code_native (io, mod. parent2, Tuple{Int}))
220+ @test occursin (" .func julia_child_" , asm)
202221end
203222
204223@testset " child function reuse bis" begin
205224 # bug: similar, but slightly different issue as above
206225 # in the case of two child functions
207- @noinline child1 (i) = sink (i)
208- @noinline child2 (i) = sink (i+ 1 )
209- function parent1 (i)
210- child1 (i) + child2 (i)
211- return
212- end
213- asm = sprint (io-> PTX. code_native (io, parent1, Tuple{Int}))
214- @test occursin (r" .func \w *child1_" , asm)
215- @test occursin (r" .func \w *child2_" , asm)
216226
217- function parent2 (i)
218- child1 (i+ 1 ) + child2 (i+ 1 )
219- return
227+ mod = @eval module $ (gensym ())
228+ import .. sink
229+ export parent1, parent2, child1, child2
230+
231+ @noinline child1 (i) = sink (i)
232+ @noinline child2 (i) = sink (i+ 1 )
233+ function parent1 (i)
234+ child1 (i) + child2 (i)
235+ return
236+ end
237+ function parent2 (i)
238+ child1 (i+ 1 ) + child2 (i+ 1 )
239+ return
240+ end
220241 end
221- asm = sprint (io-> PTX. code_native (io, parent2, Tuple{Int}))
222- @test occursin (r" .func \w *child1_" , asm)
223- @test occursin (r" .func \w *child2_" , asm)
242+
243+ asm = sprint (io-> PTX. code_native (io, mod. parent1, Tuple{Int}))
244+ @test occursin (" .func julia_child1_" , asm)
245+ @test occursin (" .func julia_child2_" , asm)
246+
247+ asm = sprint (io-> PTX. code_native (io, mod. parent2, Tuple{Int}))
248+ @test occursin (" .func julia_child1_" , asm)
249+ @test occursin (" .func julia_child2_" , asm)
224250end
225251
226252@testset " indirect sysimg function use" begin
261287
262288@testset " GC and TLS lowering" begin
263289 mod = @eval module $ (gensym ())
290+ import .. sink
291+
264292 mutable struct PleaseAllocate
265293 y:: Csize_t
266294 end
0 commit comments