88 valid_kernel () = return
99 invalid_kernel () = 1
1010
11- ir = sprint (io-> CUDAnative. code_llvm (io, valid_kernel, Tuple{}; optimize= false , dump_module= true ))
11+ ir = sprint (io-> CUDAnative. code_llvm (io, valid_kernel, Tuple{}; dump_module= true ,
12+ contextualize= false , optimize= false ))
1213
1314 # module should contain our function + a generic call wrapper
1415 @test occursin (" define void @julia_valid_kernel" , ir)
2122 @test_throws CUDAnative. KernelError CUDAnative. code_llvm (devnull , invalid_kernel, Tuple{}; kernel= true ) == nothing
2223end
2324
24- @testset " unbound typevars" begin
25- invalid_kernel () where {unbound} = return
26- @test_throws CUDAnative. KernelError CUDAnative. code_llvm (devnull , invalid_kernel, Tuple{})
27- end
28-
2925@testset " exceptions" begin
3026 foobar () = throw (DivideError ())
3127 ir = sprint (io-> CUDAnative. code_llvm (io, foobar, Tuple{}))
5248 @noinline child (i) = sink (i)
5349 parent (i) = child (i)
5450
55- ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}))
51+ ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}; contextualize = false ))
5652 @test occursin (r" call .+ @julia_child_" , ir)
5753end
5854
7672 x:: Int
7773 end
7874
79- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}))
75+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; contextualize = false ))
8076 @test occursin (r" @julia_kernel_\d +\( ({ i64 }|\[ 1 x i64\] ) addrspace\(\d +\) ?\* " , ir)
8177
82- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; kernel= true ))
78+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; contextualize = false , kernel= true ))
8379 @test occursin (r" @ptxcall_kernel_\d +\( ({ i64 }|\[ 1 x i64\] )\) " , ir)
8480end
8581
135131 closure = ()-> return
136132
137133 function test_name (f, name; kwargs... )
138- code = sprint (io-> CUDAnative. code_llvm (io, f, Tuple{}; kwargs... ))
134+ code = sprint (io-> CUDAnative. code_llvm (io, f, Tuple{}; contextualize = false , kwargs... ))
139135 @test occursin (name, code)
140136 end
141137
221217 return
222218 end
223219
224- asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}))
220+ asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}; contextualize = false ))
225221 @test occursin (r" call.uni\s +julia_child_" m , asm)
226222end
227223
232228 return
233229 end
234230
235- asm = sprint (io-> CUDAnative. code_ptx (io, entry, Tuple{Int64}; kernel= true ))
231+ asm = sprint (io-> CUDAnative. code_ptx (io, entry, Tuple{Int64}; contextualize = false , kernel= true ))
236232 @test occursin (r" \. visible \. entry ptxcall_entry_" , asm)
237233 @test ! occursin (r" \. visible \. func julia_nonentry_" , asm)
238234 @test occursin (r" \. func julia_nonentry_" , asm)
@@ -279,15 +275,15 @@ end
279275 return
280276 end
281277
282- asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}))
278+ asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}; contextualize = false ))
283279 @test occursin (r" .func julia_child_" , asm)
284280
285281 function parent2 (i)
286282 child (i+ 1 )
287283 return
288284 end
289285
290- asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}))
286+ asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}; contextualize = false ))
291287 @test occursin (r" .func julia_child_" , asm)
292288end
293289
357353 closure = ()-> nothing
358354
359355 function test_name (f, name; kwargs... )
360- code = sprint (io-> CUDAnative. code_ptx (io, f, Tuple{}; kwargs... ))
356+ code = sprint (io-> CUDAnative. code_ptx (io, f, Tuple{}; contextualize = false , kwargs... ))
361357 @test occursin (name, code)
362358 end
363359
429425 return
430426 end
431427
432- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Float32,Ptr{Float32}}))
428+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Float32,Ptr{Float32}}; contextualize = false ))
433429 @test occursin (" jl_box_float32" , ir)
434430 CUDAnative. code_ptx (devnull , kernel, Tuple{Float32,Ptr{Float32}})
435431end
@@ -444,18 +440,20 @@ end
444440
445441# some validation happens in the emit_function hook, which is called by code_llvm
446442
443+ # NOTE: contextualization changes order of frames
447444@testset " recursion" begin
448445 @eval recurse_outer (i) = i > 0 ? i : recurse_inner (i)
449446 @eval @noinline recurse_inner (i) = i < 0 ? i : recurse_outer (i)
450447
451- @test_throws_message (CUDAnative. KernelError, CUDAnative. code_llvm (devnull , recurse_outer, Tuple{Int})) do msg
448+ @test_throws_message (CUDAnative. KernelError, CUDAnative. code_llvm (devnull , recurse_outer, Tuple{Int}; contextualize = false )) do msg
452449 occursin (" recursion is currently not supported" , msg) &&
453450 occursin (" [1] recurse_outer" , msg) &&
454451 occursin (" [2] recurse_inner" , msg) &&
455452 occursin (" [3] recurse_outer" , msg)
456453 end
457454end
458455
456+ # FIXME : contextualization removes all frames here -- changed inlining behavior?
459457@testset " base intrinsics" begin
460458 foobar (i) = sin (i)
461459
0 commit comments