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)
52
53
@noinline child (i) = sink (i)
53
54
parent (i) = child (i)
54
55
55
- ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}))
56
+ ir = sprint (io-> CUDAnative. code_llvm (io, parent, Tuple{Int}; contextualize = false ))
56
57
@test occursin (r" call .+ @julia_child_" , ir)
57
58
end
58
59
76
77
x:: Int
77
78
end
78
79
79
- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}))
80
+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; contextualize = false ))
80
81
@test occursin (r" @julia_kernel_\d +\( ({ i64 }|\[ 1 x i64\] ) addrspace\(\d +\) ?\* " , ir)
81
82
82
- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; kernel= true ))
83
+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Aggregate}; contextualize = false , kernel= true ))
83
84
@test occursin (r" @ptxcall_kernel_\d +\( ({ i64 }|\[ 1 x i64\] )\) " , ir)
84
85
end
85
86
135
136
closure = ()-> return
136
137
137
138
function test_name (f, name; kwargs... )
138
- code = sprint (io-> CUDAnative. code_llvm (io, f, Tuple{}; kwargs... ))
139
+ code = sprint (io-> CUDAnative. code_llvm (io, f, Tuple{}; contextualize = false , kwargs... ))
139
140
@test occursin (name, code)
140
141
end
141
142
221
222
return
222
223
end
223
224
224
- asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}))
225
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent, Tuple{Int64}; contextualize = false ))
225
226
@test occursin (r" call.uni\s +julia_child_" m , asm)
226
227
end
227
228
232
233
return
233
234
end
234
235
235
- asm = sprint (io-> CUDAnative. code_ptx (io, entry, Tuple{Int64}; kernel= true ))
236
+ asm = sprint (io-> CUDAnative. code_ptx (io, entry, Tuple{Int64}; contextualize = false , kernel= true ))
236
237
@test occursin (r" \. visible \. entry ptxcall_entry_" , asm)
237
238
@test ! occursin (r" \. visible \. func julia_nonentry_" , asm)
238
239
@test occursin (r" \. func julia_nonentry_" , asm)
@@ -279,15 +280,15 @@ end
279
280
return
280
281
end
281
282
282
- asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}))
283
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent1, Tuple{Int}; contextualize = false ))
283
284
@test occursin (r" .func julia_child_" , asm)
284
285
285
286
function parent2 (i)
286
287
child (i+ 1 )
287
288
return
288
289
end
289
290
290
- asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}))
291
+ asm = sprint (io-> CUDAnative. code_ptx (io, parent2, Tuple{Int}; contextualize = false ))
291
292
@test occursin (r" .func julia_child_" , asm)
292
293
end
293
294
357
358
closure = ()-> nothing
358
359
359
360
function test_name (f, name; kwargs... )
360
- code = sprint (io-> CUDAnative. code_ptx (io, f, Tuple{}; kwargs... ))
361
+ code = sprint (io-> CUDAnative. code_ptx (io, f, Tuple{}; contextualize = false , kwargs... ))
361
362
@test occursin (name, code)
362
363
end
363
364
429
430
return
430
431
end
431
432
432
- ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Float32,Ptr{Float32}}))
433
+ ir = sprint (io-> CUDAnative. code_llvm (io, kernel, Tuple{Float32,Ptr{Float32}}; contextualize = false ))
433
434
@test occursin (" jl_box_float32" , ir)
434
435
CUDAnative. code_ptx (devnull , kernel, Tuple{Float32,Ptr{Float32}})
435
436
end
@@ -444,18 +445,20 @@ end
444
445
445
446
# some validation happens in the emit_function hook, which is called by code_llvm
446
447
448
+ # NOTE: contextualization changes order of frames
447
449
@testset " recursion" begin
448
450
@eval recurse_outer (i) = i > 0 ? i : recurse_inner (i)
449
451
@eval @noinline recurse_inner (i) = i < 0 ? i : recurse_outer (i)
450
452
451
- @test_throws_message (CUDAnative. KernelError, CUDAnative. code_llvm (devnull , recurse_outer, Tuple{Int})) do msg
453
+ @test_throws_message (CUDAnative. KernelError, CUDAnative. code_llvm (devnull , recurse_outer, Tuple{Int}; contextualize = false )) do msg
452
454
occursin (" recursion is currently not supported" , msg) &&
453
455
occursin (" [1] recurse_outer" , msg) &&
454
456
occursin (" [2] recurse_inner" , msg) &&
455
457
occursin (" [3] recurse_outer" , msg)
456
458
end
457
459
end
458
460
461
+ # FIXME : contextualization removes all frames here -- changed inlining behavior?
459
462
@testset " base intrinsics" begin
460
463
foobar (i) = sin (i)
461
464
0 commit comments