Skip to content

Commit ced39bb

Browse files
committed
drop AbstractGPUInterpreter
1 parent a018c17 commit ced39bb

File tree

4 files changed

+20
-11
lines changed

4 files changed

+20
-11
lines changed

src/driver.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,10 @@ const __llvm_initialized = Ref(false)
162162
entry = functions(ir)[entry_fn]
163163
end
164164

165-
# finalize the current module. this needs to happen before linking deferred modules,
166-
# since those modules have been finalized themselves, and we don't want to re-finalize.
165+
# finalize the current module.
167166
entry = finish_module!(job, ir, entry)
168167

169-
# deferred code generation
168+
# rewrite "gpuc.lookup" for deferred code generation
170169
run_optimization_for_deferred = false
171170
if haskey(functions(ir), "gpuc.lookup")
172171
run_optimization_for_deferred = true
@@ -230,13 +229,13 @@ const __llvm_initialized = Ref(false)
230229
end
231230
replace_uses!(call, fptr)
232231
end
233-
unsafe_delete!(LLVM.parent(call), call)
232+
erase!( call)
234233
end
235234
end
236235

237236
# all deferred compilations should have been resolved
238237
@compiler_assert isempty(uses(dyn_marker)) job
239-
unsafe_delete!(ir, dyn_marker)
238+
erase!(dyn_marker)
240239
end
241240

242241
if libraries

src/irgen.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ function irgen(@nospecialize(job::CompilerJob))
9191
compiled[mi] = (; ci, func=safe_name(func), specfunc=safe_name(specfunc))
9292
end
9393

94+
# TODO: Should we rewrite gpuc.lookup here?
95+
9496
# minimal required optimization
9597
@timeit_debug to "rewrite" begin
9698
if job.config.kernel && needs_byval(job)
@@ -106,9 +108,16 @@ function irgen(@nospecialize(job::CompilerJob))
106108
end
107109
end
108110

109-
# internalize all functions and, but keep exported global variables.
111+
# internalize all functions, but keep exported global variables.
110112
linkage!(entry, LLVM.API.LLVMExternalLinkage)
111113
preserved_gvs = String[LLVM.name(entry)]
114+
for mi in keys(compiled)
115+
# delay internalizing of deferred calls since
116+
# gpuc.lookup is not yet rewriten.
117+
mi == job.source && continue
118+
_, _, specfunc = compiled[mi]
119+
push!(preserved_gvs, specfunc) # this could be deleted if we rewrite gpuc.lookup earlier
120+
end
112121
for gvar in globals(mod)
113122
push!(preserved_gvs, LLVM.name(gvar))
114123
end

src/jlgen.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,7 @@ else
319319
get_method_table_view(world::UInt, mt::MTType) = OverlayMethodTable(world, mt)
320320
end
321321

322-
abstract type AbstractGPUInterpreter <: CC.AbstractInterpreter end
323-
struct GPUInterpreter <: AbstractGPUInterpreter
322+
struct GPUInterpreter <: CC.AbstractInterpreter
324323
world::UInt
325324
method_table::GPUMethodTableView
326325

@@ -446,7 +445,7 @@ struct DeferredCallInfo <: CC.CallInfo
446445
end
447446

448447
# recognize calls to gpuc.deferred and save DeferredCallInfo metadata
449-
function CC.abstract_call_known(interp::AbstractGPUInterpreter, @nospecialize(f),
448+
function CC.abstract_call_known(interp::GPUInterpreter, @nospecialize(f),
450449
arginfo::CC.ArgInfo, si::CC.StmtInfo, sv::CC.AbsIntState,
451450
max_methods::Int = CC.get_max_methods(interp, f, sv))
452451
(; fargs, argtypes) = arginfo
@@ -519,7 +518,7 @@ function find_deferred_edges(ir::CC.IRCode)
519518
end
520519

521520
if VERSION >= v"1.11.0-"
522-
function CC.ipo_dataflow_analysis!(interp::AbstractGPUInterpreter, ir::CC.IRCode,
521+
function CC.ipo_dataflow_analysis!(interp::GPUInterpreter, ir::CC.IRCode,
523522
caller::CC.InferenceResult)
524523
edges = find_deferred_edges(ir)
525524
if !isempty(edges)
@@ -530,7 +529,7 @@ function CC.ipo_dataflow_analysis!(interp::AbstractGPUInterpreter, ir::CC.IRCode
530529
end
531530
else # v1.10
532531
# 1.10 doesn't have stack_analysis_result or ipo_dataflow_analysis
533-
function CC.finish(interp::AbstractGPUInterpreter, opt::CC.OptimizationState, ir::CC.IRCode,
532+
function CC.finish(interp::GPUInterpreter, opt::CC.OptimizationState, ir::CC.IRCode,
534533
caller::CC.InferenceResult)
535534
edges = find_deferred_edges(ir)
536535
if !isempty(edges)

test/native_tests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ end
171171
# smoke test
172172
job, _ = Native.create_job(eval(kernel), (Int64,))
173173

174+
# TODO: Add a `kernel=true` test
175+
174176
ci, rt = only(GPUCompiler.code_typed(job))
175177
@test rt === Ptr{Cvoid}
176178

0 commit comments

Comments
 (0)