Skip to content

Commit 2855625

Browse files
authored
Merge pull request #36059 from JuliaLang/tb/llvmptr
Rename AddrSpacePtr
2 parents 5d6a910 + a6354d9 commit 2855625

File tree

8 files changed

+29
-26
lines changed

8 files changed

+29
-26
lines changed

base/refpointer.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,13 @@ setindex!(b::RefArray, x) = (b.x[b.i] = x; b)
144144
###
145145

146146
"""
147-
AddrSpacePtr{T, AS}
147+
LLVMPtr{T, AS}
148148
149-
When passed as a `ccall` argument with the `llvmcall` calling convention, an `AddrSpacePtr` will be converted to an LLVM pointer type with the correct address space.
150-
This type is mainly used to ensure Julia's codegen uses the correct address space when calling LLVM intrinsics.
149+
A pointer type that more closely resembles LLVM semantics: It includes the pointer address
150+
space, and will be passed as an actual pointer instead of an integer.
151+
152+
This type is mainly used to interface with code that has strict requirements about pointers,
153+
e.g., intrinsics that are selected based on the address space, or back-ends that require
154+
pointers to be identifiable by their types.
151155
"""
152-
Core.AddrSpacePtr
156+
Core.LLVMPtr

src/builtins.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ void jl_init_primitives(void) JL_GC_DISABLED
15581558
add_builtin("CodeInfo", (jl_value_t*)jl_code_info_type);
15591559
add_builtin("Ref", (jl_value_t*)jl_ref_type);
15601560
add_builtin("Ptr", (jl_value_t*)jl_pointer_type);
1561-
add_builtin("AddrSpacePtr", (jl_value_t*)jl_addrspace_pointer_type);
1561+
add_builtin("LLVMPtr", (jl_value_t*)jl_llvmpointer_type);
15621562
add_builtin("Task", (jl_value_t*)jl_task_type);
15631563

15641564
add_builtin("AbstractArray", (jl_value_t*)jl_abstractarray_type);

src/ccall.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ std::string generate_func_sig(const char *fname)
11851185
t = T_pint8;
11861186
isboxed = false;
11871187
}
1188-
else if (llvmcall && jl_is_addrspace_ptr_type(tti)) {
1188+
else if (llvmcall && jl_is_llvmpointer_type(tti)) {
11891189
t = bitstype_to_llvm(tti, true);
11901190
tti = (jl_value_t*)jl_voidpointer_type;
11911191
isboxed = false;

src/cgutils.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -590,17 +590,15 @@ static Type *bitstype_to_llvm(jl_value_t *bt, bool llvmcall = false)
590590
return T_float32;
591591
if (bt == (jl_value_t*)jl_float64_type)
592592
return T_float64;
593-
if (jl_is_addrspace_ptr_type(bt)) {
594-
int as = 0;
595-
596-
jl_datatype_t *typ = (jl_datatype_t*)bt;
597-
jl_value_t *as_param = jl_svecref(typ->parameters, 1);
598-
593+
if (jl_is_llvmpointer_type(bt)) {
594+
jl_value_t *as_param = jl_tparam1(bt);
595+
int as;
599596
if (jl_is_int32(as_param))
600597
as = jl_unbox_int32(as_param);
601598
else if (jl_is_int64(as_param))
602599
as = jl_unbox_int64(as_param);
603-
600+
else
601+
jl_error("invalid pointer address space");
604602
return PointerType::get(T_int8, as);
605603
}
606604
int nb = jl_datatype_size(bt);

src/jltypes.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ jl_datatype_t *jl_lineinfonode_type;
119119
jl_unionall_t *jl_ref_type;
120120
jl_unionall_t *jl_pointer_type;
121121
jl_typename_t *jl_pointer_typename;
122-
jl_unionall_t *jl_addrspace_pointer_type;
123-
jl_typename_t *jl_addrspace_pointer_typename;
122+
jl_unionall_t *jl_llvmpointer_type;
123+
jl_typename_t *jl_llvmpointer_typename;
124124
jl_datatype_t *jl_void_type; // deprecated
125125
jl_datatype_t *jl_nothing_type;
126126
jl_datatype_t *jl_voidpointer_type;
@@ -2379,14 +2379,14 @@ void jl_init_types(void) JL_GC_DISABLED
23792379
sizeof(void*)*8)->name->wrapper;
23802380
jl_pointer_typename = ((jl_datatype_t*)jl_unwrap_unionall((jl_value_t*)jl_pointer_type))->name;
23812381

2382-
// AddrSpacePtr{T, AS} where {T, AS}
2382+
// LLVMPtr{T, AS} where {T, AS}
23832383
tv = jl_svec2(tvar("T"), tvar("AS"));
23842384
jl_svec_t *tv_base = jl_svec1(tvar("T"));
2385-
jl_addrspace_pointer_type = (jl_unionall_t*)
2386-
jl_new_primitivetype((jl_value_t*)jl_symbol("AddrSpacePtr"), core,
2385+
jl_llvmpointer_type = (jl_unionall_t*)
2386+
jl_new_primitivetype((jl_value_t*)jl_symbol("LLVMPtr"), core,
23872387
(jl_datatype_t*)jl_apply_type((jl_value_t*)jl_ref_type, jl_svec_data(tv_base), 1), tv,
23882388
sizeof(void*)*8)->name->wrapper;
2389-
jl_addrspace_pointer_typename = ((jl_datatype_t*)jl_unwrap_unionall((jl_value_t*)jl_addrspace_pointer_type))->name;
2389+
jl_llvmpointer_typename = ((jl_datatype_t*)jl_unwrap_unionall((jl_value_t*)jl_llvmpointer_type))->name;
23902390

23912391
// Type{T} where T<:Tuple
23922392
tttvar = jl_new_typevar(jl_symbol("T"),

src/julia.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -636,10 +636,10 @@ extern JL_DLLEXPORT jl_datatype_t *jl_signed_type JL_GLOBALLY_ROOTED;
636636
extern JL_DLLEXPORT jl_datatype_t *jl_voidpointer_type JL_GLOBALLY_ROOTED;
637637
extern JL_DLLEXPORT jl_datatype_t *jl_uint8pointer_type JL_GLOBALLY_ROOTED;
638638
extern JL_DLLEXPORT jl_unionall_t *jl_pointer_type JL_GLOBALLY_ROOTED;
639-
extern JL_DLLEXPORT jl_unionall_t *jl_addrspace_pointer_type JL_GLOBALLY_ROOTED;
639+
extern JL_DLLEXPORT jl_unionall_t *jl_llvmpointer_type JL_GLOBALLY_ROOTED;
640640
extern JL_DLLEXPORT jl_unionall_t *jl_ref_type JL_GLOBALLY_ROOTED;
641641
extern JL_DLLEXPORT jl_typename_t *jl_pointer_typename JL_GLOBALLY_ROOTED;
642-
extern JL_DLLEXPORT jl_typename_t *jl_addrspace_pointer_typename JL_GLOBALLY_ROOTED;
642+
extern JL_DLLEXPORT jl_typename_t *jl_llvmpointer_typename JL_GLOBALLY_ROOTED;
643643
extern JL_DLLEXPORT jl_typename_t *jl_namedtuple_typename JL_GLOBALLY_ROOTED;
644644
extern JL_DLLEXPORT jl_unionall_t *jl_namedtuple_type JL_GLOBALLY_ROOTED;
645645
extern JL_DLLEXPORT jl_datatype_t *jl_task_type JL_GLOBALLY_ROOTED;
@@ -1090,6 +1090,7 @@ static inline int jl_is_layout_opaque(const jl_datatype_layout_t *l) JL_NOTSAFEP
10901090
#define jl_is_cpointer(v) jl_is_cpointer_type(jl_typeof(v))
10911091
#define jl_is_pointer(v) jl_is_cpointer_type(jl_typeof(v))
10921092
#define jl_is_uint8pointer(v)jl_typeis(v,jl_uint8pointer_type)
1093+
#define jl_is_llvmpointer(v) jl_typeis(v,jl_llvmpointer_type)
10931094
#define jl_is_intrinsic(v) jl_typeis(v,jl_intrinsic_type)
10941095
#define jl_array_isbitsunion(a) (!(((jl_array_t*)(a))->flags.ptrarray) && jl_is_uniontype(jl_tparam0(jl_typeof(a))))
10951096

@@ -1154,10 +1155,10 @@ STATIC_INLINE int jl_is_cpointer_type(jl_value_t *t) JL_NOTSAFEPOINT
11541155
((jl_datatype_t*)(t))->name == ((jl_datatype_t*)jl_pointer_type->body)->name);
11551156
}
11561157

1157-
STATIC_INLINE int jl_is_addrspace_ptr_type(jl_value_t *t) JL_NOTSAFEPOINT
1158+
STATIC_INLINE int jl_is_llvmpointer_type(jl_value_t *t) JL_NOTSAFEPOINT
11581159
{
11591160
return (jl_is_datatype(t) &&
1160-
((jl_datatype_t*)(t))->name == jl_addrspace_pointer_typename);
1161+
((jl_datatype_t*)(t))->name == jl_llvmpointer_typename);
11611162
}
11621163

11631164
STATIC_INLINE int jl_is_abstract_ref_type(jl_value_t *t) JL_NOTSAFEPOINT

src/staticdata.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ static void *const _tags[] = {
4141
&jl_linenumbernode_type, &jl_lineinfonode_type,
4242
&jl_gotonode_type, &jl_quotenode_type,
4343
&jl_pinode_type, &jl_phinode_type, &jl_phicnode_type, &jl_upsilonnode_type,
44-
&jl_type_type, &jl_bottom_type, &jl_ref_type, &jl_pointer_type, &jl_addrspace_pointer_type,
44+
&jl_type_type, &jl_bottom_type, &jl_ref_type, &jl_pointer_type, &jl_llvmpointer_type,
4545
&jl_vararg_type, &jl_abstractarray_type,
4646
&jl_densearray_type, &jl_nothing_type, &jl_function_type, &jl_typeofbottom_type,
4747
&jl_unionall_type, &jl_typename_type, &jl_builtin_type, &jl_code_info_type,
@@ -57,7 +57,7 @@ static void *const _tags[] = {
5757
&jl_float16_type, &jl_float32_type, &jl_float64_type, &jl_floatingpoint_type,
5858
&jl_number_type, &jl_signed_type,
5959
// special typenames
60-
&jl_tuple_typename, &jl_pointer_typename, &jl_addrspace_pointer_typename, &jl_array_typename, &jl_type_typename,
60+
&jl_tuple_typename, &jl_pointer_typename, &jl_llvmpointer_typename, &jl_array_typename, &jl_type_typename,
6161
&jl_vararg_typename, &jl_namedtuple_typename,
6262
&jl_vecelement_typename,
6363
// special exceptions

test/llvmpasses/llvmcall.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ emit(foo, NTuple{2, Float16})
2323
emit(foo, NTuple{2, VecElement{Float16}})
2424

2525
# CHECK: call i8 addrspace(3)* @foo(i8 addrspace(3)* %{{[0-9]+}})
26-
emit(foo, Core.AddrSpacePtr{Float32, 3})
26+
emit(foo, Core.LLVMPtr{Float32, 3})
2727

2828
# CHECK: call { i32, i32 } @foo({ i32, i32 } %{{[0-9]+}})
2929
emit(foo, Foo)

0 commit comments

Comments
 (0)