Skip to content

Commit 631a6bb

Browse files
committed
Don't remove trap instructions from the generated code.
They are semantically meaningful. In the cases where we expect recovery, e.g. when handling an exception, the caller should make sure to exit the thread before reaching the trap.
1 parent 75765bf commit 631a6bb

File tree

2 files changed

+0
-32
lines changed

2 files changed

+0
-32
lines changed

src/precompile.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ end
5252
function _precompile_()
5353
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
5454
@assert precompile(Tuple{typeof(GPUCompiler.assign_args!),Expr,Vector{Any}})
55-
@assert precompile(Tuple{typeof(GPUCompiler.lower_trap!),LLVM.Module})
5655
@assert precompile(Tuple{typeof(GPUCompiler.lower_unreachable!),LLVM.Function})
5756
@assert precompile(Tuple{typeof(GPUCompiler.lower_gc_frame!),LLVM.Function})
5857
@assert precompile(Tuple{typeof(GPUCompiler.lower_throw!),LLVM.Module})

src/ptx.jl

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ end
187187

188188
function finish_ir!(@nospecialize(job::CompilerJob{PTXCompilerTarget}),
189189
mod::LLVM.Module, entry::LLVM.Function)
190-
lower_trap!(mod)
191190
for f in functions(mod)
192191
lower_unreachable!(f)
193192
end
@@ -246,36 +245,6 @@ end
246245

247246
## LLVM passes
248247

249-
# replace calls to `trap` with inline assembly calling `exit`, which isn't fatal
250-
function lower_trap!(mod::LLVM.Module)
251-
job = current_job::CompilerJob
252-
changed = false
253-
@timeit_debug to "lower trap" begin
254-
255-
if haskey(functions(mod), "llvm.trap")
256-
trap = functions(mod)["llvm.trap"]
257-
258-
# inline assembly to exit a thread
259-
exit_ft = LLVM.FunctionType(LLVM.VoidType())
260-
exit = InlineAsm(exit_ft, "exit;", "", true)
261-
262-
for use in uses(trap)
263-
val = user(use)
264-
if isa(val, LLVM.CallInst)
265-
@dispose builder=IRBuilder() begin
266-
position!(builder, val)
267-
call!(builder, exit_ft, exit)
268-
end
269-
unsafe_delete!(LLVM.parent(val), val)
270-
changed = true
271-
end
272-
end
273-
end
274-
275-
end
276-
return changed
277-
end
278-
279248
# lower `unreachable` to `exit` so that the emitted PTX has correct control flow
280249
#
281250
# During back-end compilation, `ptxas` inserts instructions to manage the harware's

0 commit comments

Comments
 (0)