8
8
valid_kernel () = return
9
9
invalid_kernel () = 1
10
10
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 ))
12
13
13
14
# module should contain our function + a generic call wrapper
14
15
@test occursin (" define void @julia_valid_kernel" , ir)
21
22
@test_throws CUDAnative. KernelError CUDAnative. code_llvm (devnull , invalid_kernel, Tuple{}; kernel= true ) == nothing
22
23
end
23
24
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
-
29
25
@testset " exceptions" begin
30
26
foobar () = throw (DivideError ())
31
27
ir = sprint (io-> CUDAnative. code_llvm (io, foobar, Tuple{}))
52
48
@noinline child (i) = sink (i)
53
49
parent (i) = child (i)
54
50
55
- ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}))
51
+ ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}; contextualize = false ))
56
52
@test occursin (r" call .+ @julia_child_" , ir)
57
53
end
58
54
76
72
x:: Int
77
73
end
78
74
79
- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}))
75
+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; contextualize = false ))
80
76
@test occursin (r" @julia_kernel_\d +\( ({ i64 }|\[ 1 x i64\] ) addrspace\(\d +\) ?\* " , ir)
81
77
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 ))
83
79
@test occursin (r" @ptxcall_kernel_\d +\( ({ i64 }|\[ 1 x i64\] )\) " , ir)
84
80
end
85
81
135
131
closure = ()-> return
136
132
137
133
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... ))
139
135
@test occursin (name, code)
140
136
end
141
137
221
217
return
222
218
end
223
219
224
- asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}))
220
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}; contextualize = false ))
225
221
@test occursin (r" call.uni\s +julia_child_" m , asm)
226
222
end
227
223
232
228
return
233
229
end
234
230
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 ))
236
232
@test occursin (r" \. visible \. entry ptxcall_entry_" , asm)
237
233
@test ! occursin (r" \. visible \. func julia_nonentry_" , asm)
238
234
@test occursin (r" \. func julia_nonentry_" , asm)
@@ -279,15 +275,15 @@ end
279
275
return
280
276
end
281
277
282
- asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}))
278
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}; contextualize = false ))
283
279
@test occursin (r" .func julia_child_" , asm)
284
280
285
281
function parent2 (i)
286
282
child (i+ 1 )
287
283
return
288
284
end
289
285
290
- asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}))
286
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}; contextualize = false ))
291
287
@test occursin (r" .func julia_child_" , asm)
292
288
end
293
289
357
353
closure = ()-> nothing
358
354
359
355
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... ))
361
357
@test occursin (name, code)
362
358
end
363
359
429
425
return
430
426
end
431
427
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 ))
433
429
@test occursin (" jl_box_float32" , ir)
434
430
CUDAnative. code_ptx (devnull , kernel, Tuple{Float32,Ptr{Float32}})
435
431
end
@@ -444,18 +440,20 @@ end
444
440
445
441
# some validation happens in the emit_function hook, which is called by code_llvm
446
442
443
+ # NOTE: contextualization changes order of frames
447
444
@testset " recursion" begin
448
445
@eval recurse_outer (i) = i > 0 ? i : recurse_inner (i)
449
446
@eval @noinline recurse_inner (i) = i < 0 ? i : recurse_outer (i)
450
447
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
452
449
occursin (" recursion is currently not supported" , msg) &&
453
450
occursin (" [1] recurse_outer" , msg) &&
454
451
occursin (" [2] recurse_inner" , msg) &&
455
452
occursin (" [3] recurse_outer" , msg)
456
453
end
457
454
end
458
455
456
+ # FIXME : contextualization removes all frames here -- changed inlining behavior?
459
457
@testset " base intrinsics" begin
460
458
foobar (i) = sin (i)
461
459
0 commit comments