Skip to content

Commit b8eecbf

Browse files
authored
Convert pointer address spaces when calling rtlib functions. (#704)
We currently emit runtime functions in the generic address space, while source arguments may reside in a specific address space, e.g., when pointing to global variables. This only affects Julia 1.12, where Julia functions use actual pointers, and LLVM.jl 9.4.1+, which emits global strings in the correct address space.
1 parent 772a78c commit b8eecbf

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/rtlib.jl

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,16 @@ function LLVM.call!(builder, rt::Runtime.RuntimeMethodInstance, args=LLVM.Value[
4949
end
5050
for (i,arg) in enumerate(args)
5151
if value_type(arg) != parameters(ft)[i]
52-
if (value_type(arg) isa LLVM.PointerType) &&
52+
args[i] = if (value_type(arg) isa LLVM.PointerType) &&
5353
(parameters(ft)[i] isa LLVM.IntegerType)
54-
# Julia pointers are passed as integers
55-
args[i] = ptrtoint!(builder, args[i], parameters(ft)[i])
54+
# pointers are passed as integers on Julia 1.11 and earlier
55+
ptrtoint!(builder, args[i], parameters(ft)[i])
56+
elseif value_type(arg) isa LLVM.PointerType &&
57+
parameters(ft)[i] isa LLVM.PointerType &&
58+
addrspace(value_type(arg)) != addrspace(parameters(ft)[i])
59+
# runtime functions are always in the default address space,
60+
# while arguments may come from globals in other address spaces.
61+
addrspacecast!(builder, args[i], parameters(ft)[i])
5662
else
5763
error("Don't know how to convert ", arg, " argument to ", parameters(ft)[i])
5864
end

0 commit comments

Comments
 (0)