Skip to content

Commit 1031884

Browse files
authored
init: pre-allocate shared runtime types (#59362)
Minimizes some complexity around initialization for these special reference-free types to be handled as entirely constant data since they can be allocated (and even used, in the case of nothing) before a system image is loaded. Written by Claude
1 parent bbd491a commit 1031884

File tree

9 files changed

+111
-93
lines changed

9 files changed

+111
-93
lines changed

src/builtins.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,17 +248,22 @@ JL_DLLEXPORT int jl_egal__bitstag(const jl_value_t *a JL_MAYBE_UNROOTED, const j
248248
switch ((enum jl_small_typeof_tags)(dtag >> 4)) {
249249
case jl_int8_tag:
250250
case jl_uint8_tag:
251+
case jl_addrspacecore_tag:
251252
return *(uint8_t*)a == *(uint8_t*)b;
252253
case jl_int16_tag:
253254
case jl_uint16_tag:
254255
return *(uint16_t*)a == *(uint16_t*)b;
255256
case jl_int32_tag:
256257
case jl_uint32_tag:
257258
case jl_char_tag:
259+
case jl_intrinsic_tag:
258260
return *(uint32_t*)a == *(uint32_t*)b;
259261
case jl_int64_tag:
260262
case jl_uint64_tag:
261263
return *(uint64_t*)a == *(uint64_t*)b;
264+
case jl_ssavalue_tag:
265+
case jl_slotnumber_tag:
266+
return *(size_t*)a == *(size_t*)b;
262267
case jl_unionall_tag:
263268
return egal_types(a, b, NULL, 1);
264269
case jl_uniontype_tag:
@@ -270,6 +275,7 @@ JL_DLLEXPORT int jl_egal__bitstag(const jl_value_t *a JL_MAYBE_UNROOTED, const j
270275
case jl_symbol_tag:
271276
case jl_module_tag:
272277
case jl_bool_tag:
278+
case jl_nothing_tag:
273279
return 0;
274280
case jl_simplevector_tag:
275281
return compare_svec((jl_svec_t*)a, (jl_svec_t*)b);
@@ -2470,7 +2476,7 @@ static void add_intrinsic_properties(enum intrinsic f, unsigned nargs, void (*pf
24702476

24712477
static void add_intrinsic(jl_module_t *inm, const char *name, enum intrinsic f) JL_GC_DISABLED
24722478
{
2473-
jl_value_t *i = jl_permbox32(jl_intrinsic_type, 0, (int32_t)f);
2479+
jl_value_t *i = jl_permbox32(jl_intrinsic_type, jl_intrinsic_tag, (int32_t)f);
24742480
jl_sym_t *sym = jl_symbol(name);
24752481
jl_set_initial_const(inm, sym, i, 1);
24762482
}

src/codegen.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5350,7 +5350,7 @@ static jl_cgval_t emit_invoke_modify(jl_codectx_t &ctx, jl_expr_t *ex, jl_value_
53505350
it = builtin_func_map().find(f.constant);
53515351
assert(it != builtin_func_map().end());
53525352
}
5353-
else if (jl_typetagis(f.constant, jl_intrinsic_type)) {
5353+
else if (jl_is_intrinsic(f.constant)) {
53545354
JL_I::intrinsic fi = (intrinsic)*(uint32_t*)jl_data_ptr(f.constant);
53555355
if (fi == JL_I::atomic_pointermodify && jl_intrinsic_nargs((int)fi) == nargs - 1)
53565356
return emit_atomic_pointerop(ctx, fi, ArrayRef<jl_cgval_t>(argv).drop_front(), nargs - 1, &lival);
@@ -5409,7 +5409,7 @@ static jl_cgval_t emit_call(jl_codectx_t &ctx, jl_expr_t *ex, jl_value_t *rt, bo
54095409

54105410
// a couple intrinsics (really just llvmcall, though partly cglobal too)
54115411
// have non-standard (aka invalid) evaluation semantics, so we must handle these first
5412-
if (f.constant && jl_typetagis(f.constant, jl_intrinsic_type)) {
5412+
if (f.constant && jl_is_intrinsic(f.constant)) {
54135413
JL_I::intrinsic fi = (intrinsic)*(uint32_t*)jl_data_ptr(f.constant);
54145414
return emit_intrinsic(ctx, fi, args, nargs - 1);
54155415
}

src/datatype.c

Lines changed: 72 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,23 +1120,29 @@ JL_DLLEXPORT jl_value_t *jl_new_bits(jl_value_t *dt, const void *data)
11201120
// but will always have the alignment required by the datatype
11211121
assert(jl_is_datatype(dt));
11221122
jl_datatype_t *bt = (jl_datatype_t*)dt;
1123-
size_t nb = jl_datatype_size(bt);
11241123
// some types have special pools to minimize allocations
1125-
if (nb == 0) return jl_new_struct_uninit(bt); // returns bt->instance
1126-
if (bt == jl_bool_type) return (1 & *(int8_t*)data) ? jl_true : jl_false;
1127-
if (bt == jl_uint8_type) return jl_box_uint8(*(uint8_t*)data);
1128-
if (bt == jl_int64_type) return jl_box_int64(*(int64_t*)data);
1129-
if (bt == jl_int32_type) return jl_box_int32(*(int32_t*)data);
1130-
if (bt == jl_int8_type) return jl_box_int8(*(int8_t*)data);
1131-
if (bt == jl_int16_type) return jl_box_int16(*(int16_t*)data);
1132-
if (bt == jl_uint64_type) return jl_box_uint64(*(uint64_t*)data);
1133-
if (bt == jl_uint32_type) return jl_box_uint32(*(uint32_t*)data);
1134-
if (bt == jl_uint16_type) return jl_box_uint16(*(uint16_t*)data);
1135-
if (bt == jl_char_type) return jl_box_char(*(uint32_t*)data);
1136-
1137-
assert(!bt->smalltag);
1124+
switch(bt->smalltag) {
1125+
case jl_bool_tag: return (1 & *(int8_t*)data) ? jl_true : jl_false;
1126+
case jl_uint8_tag: return jl_box_uint8(*(uint8_t*)data);
1127+
case jl_int64_tag: return jl_box_int64(*(int64_t*)data);
1128+
case jl_int32_tag: return jl_box_int32(*(int32_t*)data);
1129+
case jl_int8_tag: return jl_box_int8(*(int8_t*)data);
1130+
case jl_int16_tag: return jl_box_int16(*(int16_t*)data);
1131+
case jl_uint64_tag: return jl_box_uint64(*(uint64_t*)data);
1132+
case jl_uint32_tag: return jl_box_uint32(*(uint32_t*)data);
1133+
case jl_uint16_tag: return jl_box_uint16(*(uint16_t*)data);
1134+
case jl_char_tag: return jl_box_char(*(uint32_t*)data);
1135+
case jl_ssavalue_tag: return jl_box_ssavalue(*(size_t*)data);
1136+
case jl_slotnumber_tag: return jl_box_slotnumber(*(size_t*)data);
1137+
}
1138+
1139+
size_t nb = jl_datatype_size(bt);
1140+
if (nb == 0)
1141+
return jl_new_struct_uninit(bt); // returns bt->instance
11381142
jl_task_t *ct = jl_current_task;
11391143
jl_value_t *v = jl_gc_alloc(ct->ptls, nb, bt);
1144+
if (bt->smalltag)
1145+
jl_set_typetagof(v, bt->smalltag, 0);
11401146
// TODO: make this a memmove_refs if relevant
11411147
memcpy(jl_assume_aligned(v, sizeof(void*)), data, nb);
11421148
return v;
@@ -1147,23 +1153,30 @@ JL_DLLEXPORT jl_value_t *jl_atomic_new_bits(jl_value_t *dt, const char *data)
11471153
// data must have the required alignment for an atomic of the given size
11481154
assert(jl_is_datatype(dt));
11491155
jl_datatype_t *bt = (jl_datatype_t*)dt;
1150-
size_t nb = jl_datatype_size(bt);
11511156
// some types have special pools to minimize allocations
1152-
if (nb == 0) return jl_new_struct_uninit(bt); // returns bt->instance
1153-
if (bt == jl_bool_type) return (1 & jl_atomic_load((_Atomic(int8_t)*)data)) ? jl_true : jl_false;
1154-
if (bt == jl_uint8_type) return jl_box_uint8(jl_atomic_load((_Atomic(uint8_t)*)data));
1155-
if (bt == jl_int64_type) return jl_box_int64(jl_atomic_load((_Atomic(int64_t)*)data));
1156-
if (bt == jl_int32_type) return jl_box_int32(jl_atomic_load((_Atomic(int32_t)*)data));
1157-
if (bt == jl_int8_type) return jl_box_int8(jl_atomic_load((_Atomic(int8_t)*)data));
1158-
if (bt == jl_int16_type) return jl_box_int16(jl_atomic_load((_Atomic(int16_t)*)data));
1159-
if (bt == jl_uint64_type) return jl_box_uint64(jl_atomic_load((_Atomic(uint64_t)*)data));
1160-
if (bt == jl_uint32_type) return jl_box_uint32(jl_atomic_load((_Atomic(uint32_t)*)data));
1161-
if (bt == jl_uint16_type) return jl_box_uint16(jl_atomic_load((_Atomic(uint16_t)*)data));
1162-
if (bt == jl_char_type) return jl_box_char(jl_atomic_load((_Atomic(uint32_t)*)data));
1163-
1164-
assert(!bt->smalltag);
1157+
switch(bt->smalltag) {
1158+
case 0: break;
1159+
case jl_bool_tag: return (1 & jl_atomic_load((_Atomic(int8_t)*)data)) ? jl_true : jl_false;
1160+
case jl_uint8_tag: return jl_box_uint8(jl_atomic_load((_Atomic(uint8_t)*)data));
1161+
case jl_int64_tag: return jl_box_int64(jl_atomic_load((_Atomic(int64_t)*)data));
1162+
case jl_int32_tag: return jl_box_int32(jl_atomic_load((_Atomic(int32_t)*)data));
1163+
case jl_int8_tag: return jl_box_int8(jl_atomic_load((_Atomic(int8_t)*)data));
1164+
case jl_int16_tag: return jl_box_int16(jl_atomic_load((_Atomic(int16_t)*)data));
1165+
case jl_uint64_tag: return jl_box_uint64(jl_atomic_load((_Atomic(uint64_t)*)data));
1166+
case jl_uint32_tag: return jl_box_uint32(jl_atomic_load((_Atomic(uint32_t)*)data));
1167+
case jl_uint16_tag: return jl_box_uint16(jl_atomic_load((_Atomic(uint16_t)*)data));
1168+
case jl_char_tag: return jl_box_char(jl_atomic_load((_Atomic(uint32_t)*)data));
1169+
case jl_ssavalue_tag: return jl_box_ssavalue(jl_atomic_load((_Atomic(size_t)*)data));
1170+
case jl_slotnumber_tag: return jl_box_slotnumber(jl_atomic_load((_Atomic(size_t)*)data));
1171+
}
1172+
1173+
size_t nb = jl_datatype_size(bt);
1174+
if (nb == 0)
1175+
return jl_new_struct_uninit(bt); // returns bt->instance
11651176
jl_task_t *ct = jl_current_task;
11661177
jl_value_t *v = jl_gc_alloc(ct->ptls, nb, bt);
1178+
if (bt->smalltag)
1179+
jl_set_typetagof(v, bt->smalltag, 0);
11671180
// data is aligned to the power of two,
11681181
// we will write too much of v, but the padding should exist
11691182
if (nb == 1)
@@ -1218,22 +1231,28 @@ JL_DLLEXPORT jl_value_t *jl_atomic_swap_bits(jl_value_t *dt, char *dst, const jl
12181231
// dst must have the required alignment for an atomic of the given size
12191232
assert(jl_is_datatype(dt));
12201233
jl_datatype_t *bt = (jl_datatype_t*)dt;
1234+
if (nb == 0)
1235+
return jl_new_struct_uninit(bt); // returns bt->instance
12211236
// some types have special pools to minimize allocations
1222-
if (nb == 0) return jl_new_struct_uninit(bt); // returns bt->instance
1223-
if (bt == jl_bool_type) return (1 & jl_atomic_exchange((_Atomic(int8_t)*)dst, 1 & *(int8_t*)src)) ? jl_true : jl_false;
1224-
if (bt == jl_uint8_type) return jl_box_uint8(jl_atomic_exchange((_Atomic(uint8_t)*)dst, *(int8_t*)src));
1225-
if (bt == jl_int64_type) return jl_box_int64(jl_atomic_exchange((_Atomic(int64_t)*)dst, *(int64_t*)src));
1226-
if (bt == jl_int32_type) return jl_box_int32(jl_atomic_exchange((_Atomic(int32_t)*)dst, *(int32_t*)src));
1227-
if (bt == jl_int8_type) return jl_box_int8(jl_atomic_exchange((_Atomic(int8_t)*)dst, *(int8_t*)src));
1228-
if (bt == jl_int16_type) return jl_box_int16(jl_atomic_exchange((_Atomic(int16_t)*)dst, *(int16_t*)src));
1229-
if (bt == jl_uint64_type) return jl_box_uint64(jl_atomic_exchange((_Atomic(uint64_t)*)dst, *(uint64_t*)src));
1230-
if (bt == jl_uint32_type) return jl_box_uint32(jl_atomic_exchange((_Atomic(uint32_t)*)dst, *(uint32_t*)src));
1231-
if (bt == jl_uint16_type) return jl_box_uint16(jl_atomic_exchange((_Atomic(uint16_t)*)dst, *(uint16_t*)src));
1232-
if (bt == jl_char_type) return jl_box_char(jl_atomic_exchange((_Atomic(uint32_t)*)dst, *(uint32_t*)src));
1233-
1234-
assert(!bt->smalltag);
1237+
switch(bt->smalltag) {
1238+
case jl_bool_tag: return (1 & jl_atomic_exchange((_Atomic(int8_t)*)dst, 1 & *(int8_t*)src)) ? jl_true : jl_false;
1239+
case jl_uint8_tag: return jl_box_uint8(jl_atomic_exchange((_Atomic(uint8_t)*)dst, *(int8_t*)src));
1240+
case jl_int64_tag: return jl_box_int64(jl_atomic_exchange((_Atomic(int64_t)*)dst, *(int64_t*)src));
1241+
case jl_int32_tag: return jl_box_int32(jl_atomic_exchange((_Atomic(int32_t)*)dst, *(int32_t*)src));
1242+
case jl_int8_tag: return jl_box_int8(jl_atomic_exchange((_Atomic(int8_t)*)dst, *(int8_t*)src));
1243+
case jl_int16_tag: return jl_box_int16(jl_atomic_exchange((_Atomic(int16_t)*)dst, *(int16_t*)src));
1244+
case jl_uint64_tag: return jl_box_uint64(jl_atomic_exchange((_Atomic(uint64_t)*)dst, *(uint64_t*)src));
1245+
case jl_uint32_tag: return jl_box_uint32(jl_atomic_exchange((_Atomic(uint32_t)*)dst, *(uint32_t*)src));
1246+
case jl_uint16_tag: return jl_box_uint16(jl_atomic_exchange((_Atomic(uint16_t)*)dst, *(uint16_t*)src));
1247+
case jl_char_tag: return jl_box_char(jl_atomic_exchange((_Atomic(uint32_t)*)dst, *(uint32_t*)src));
1248+
case jl_ssavalue_tag: return jl_box_ssavalue(jl_atomic_exchange((_Atomic(size_t)*)dst, *(size_t*)src));
1249+
case jl_slotnumber_tag: return jl_box_slotnumber(jl_atomic_exchange((_Atomic(size_t)*)dst, *(size_t*)src));
1250+
}
1251+
12351252
jl_task_t *ct = jl_current_task;
12361253
jl_value_t *v = jl_gc_alloc(ct->ptls, jl_datatype_size(bt), bt);
1254+
if (bt->smalltag)
1255+
jl_set_typetagof(v, bt->smalltag, 0);
12371256
if (nb == 1)
12381257
*(uint8_t*)v = jl_atomic_exchange((_Atomic(uint8_t)*)dst, *(uint8_t*)src);
12391258
else if (nb == 2)
@@ -1438,10 +1457,11 @@ JL_DLLEXPORT int jl_atomic_storeonce_bits(jl_datatype_t *dt, char *dst, const jl
14381457
}
14391458

14401459
#define PERMBOXN_FUNC(nb) \
1441-
jl_value_t *jl_permbox##nb(jl_datatype_t *t, uintptr_t tag, uint##nb##_t x) \
1460+
jl_value_t *jl_permbox##nb(jl_datatype_t *t, uintptr_t tag, uint##nb##_t x) JL_NOTSAFEPOINT \
14421461
{ /* n.b. t must be a concrete isbits datatype of the right size */ \
14431462
jl_value_t *v = jl_gc_permobj(LLT_ALIGN(nb, sizeof(void*)), t, 0); \
1444-
if (tag) jl_set_typetagof(v, tag, GC_OLD_MARKED); \
1463+
assert(tag); \
1464+
jl_set_typetagof(v, tag, GC_OLD_MARKED); \
14451465
*(uint##nb##_t*)jl_data_ptr(v) = x; \
14461466
return v; \
14471467
}
@@ -1451,7 +1471,7 @@ PERMBOXN_FUNC(32)
14511471
PERMBOXN_FUNC(64)
14521472

14531473
#define UNBOX_FUNC(j_type,c_type) \
1454-
JL_DLLEXPORT c_type jl_unbox_##j_type(jl_value_t *v) \
1474+
JL_DLLEXPORT c_type jl_unbox_##j_type(jl_value_t *v) JL_NOTSAFEPOINT\
14551475
{ \
14561476
assert(jl_is_primitivetype(jl_typeof(v))); \
14571477
assert(jl_datatype_size(jl_typeof(v)) == sizeof(c_type)); \
@@ -1487,9 +1507,6 @@ BOX_FUNC(uint8pointer, uint8_t*, jl_box)
14871507

14881508
#define NBOX_C 1024
14891509

1490-
// some shims to support UIBOX_FUNC definition
1491-
#define jl_ssavalue_tag (((uintptr_t)jl_ssavalue_type) >> 4)
1492-
#define jl_slotnumber_tag (((uintptr_t)jl_slotnumber_type) >> 4)
14931510

14941511
#define SIBOX_FUNC(typ,c_type) \
14951512
static jl_value_t *boxed_##typ##_cache[NBOX_C]; \
@@ -1551,40 +1568,31 @@ JL_DLLEXPORT jl_value_t *jl_box_uint8(uint8_t x)
15511568
return jl_boxed_uint8_cache[x];
15521569
}
15531570

1554-
void jl_init_int32_int64_cache(void)
1571+
void jl_init_box_caches(void)
15551572
{
15561573
int64_t i;
1557-
for(i=0; i < NBOX_C; i++) {
1574+
for (i = 0; i < NBOX_C; i++) {
15581575
boxed_int32_cache[i] = jl_permbox32(jl_int32_type, jl_int32_tag, i-NBOX_C/2);
15591576
boxed_int64_cache[i] = jl_permbox64(jl_int64_type, jl_int64_tag, i-NBOX_C/2);
15601577
boxed_uint16_cache[i] = jl_permbox16(jl_uint16_type, jl_uint16_tag, i);
15611578
boxed_uint64_cache[i] = jl_permbox64(jl_uint64_type, jl_uint64_tag, i);
15621579
boxed_uint32_cache[i] = jl_permbox32(jl_uint32_type, jl_uint32_tag, i);
1580+
boxed_int16_cache[i] = jl_permbox16(jl_int16_type, jl_int16_tag, i-NBOX_C/2);
15631581
#ifdef _P64
1564-
boxed_ssavalue_cache[i] = jl_permbox64(jl_ssavalue_type, 0, i);
1565-
boxed_slotnumber_cache[i] = jl_permbox64(jl_slotnumber_type, 0, i);
1582+
boxed_ssavalue_cache[i] = jl_permbox64(jl_ssavalue_type, jl_ssavalue_tag, i);
1583+
boxed_slotnumber_cache[i] = jl_permbox64(jl_slotnumber_type, jl_slotnumber_tag, i);
15661584
#else
1567-
boxed_ssavalue_cache[i] = jl_permbox32(jl_ssavalue_type, 0, i);
1568-
boxed_slotnumber_cache[i] = jl_permbox32(jl_slotnumber_type, 0, i);
1585+
boxed_ssavalue_cache[i] = jl_permbox32(jl_ssavalue_type, jl_ssavalue_tag, i);
1586+
boxed_slotnumber_cache[i] = jl_permbox32(jl_slotnumber_type, jl_slotnumber_tag, i);
15691587
#endif
15701588
}
1571-
for(i=0; i < 256; i++) {
1572-
jl_boxed_uint8_cache[i] = jl_permbox8(jl_uint8_type, jl_uint8_tag, i);
1573-
}
1574-
}
1575-
1576-
void jl_init_box_caches(void)
1577-
{
1578-
uint32_t i;
15791589
for (i = 0; i < 128; i++) {
15801590
boxed_char_cache[i] = jl_permbox32(jl_char_type, jl_char_tag, i << 24);
15811591
}
15821592
for (i = 0; i < 256; i++) {
1593+
jl_boxed_uint8_cache[i] = jl_permbox8(jl_uint8_type, jl_uint8_tag, i);
15831594
jl_boxed_int8_cache[i] = jl_permbox8(jl_int8_type, jl_int8_tag, i);
15841595
}
1585-
for (i = 0; i < NBOX_C; i++) {
1586-
boxed_int16_cache[i] = jl_permbox16(jl_int16_type, jl_int16_tag, i-NBOX_C/2);
1587-
}
15881596
}
15891597

15901598
JL_DLLEXPORT jl_value_t *jl_box_bool(int8_t x)

src/init.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -579,12 +579,12 @@ static NOINLINE void _finish_jl_init_(jl_image_buf_t sysimage, jl_ptls_t ptls, j
579579
jl_image_t parsed_image = jl_init_processor_sysimg(sysimage, jl_options.cpu_target);
580580

581581
jl_init_codegen();
582-
jl_init_common_symbols();
583582

584583
if (sysimage.kind != JL_IMAGE_KIND_NONE) {
585584
// Load the .ji or .so sysimage
586585
jl_restore_system_image(&parsed_image, sysimage);
587-
} else {
586+
}
587+
else {
588588
// No sysimage provided, init a minimal environment
589589
jl_init_types();
590590
jl_global_roots_list = (jl_genericmemory_t*)jl_an_empty_memory_any;
@@ -611,7 +611,8 @@ static NOINLINE void _finish_jl_init_(jl_image_buf_t sysimage, jl_ptls_t ptls, j
611611
jl_n_gcthreads = 0;
612612
jl_n_threads_per_pool[JL_THREADPOOL_ID_INTERACTIVE] = 0;
613613
jl_n_threads_per_pool[JL_THREADPOOL_ID_DEFAULT] = 1;
614-
} else {
614+
}
615+
else {
615616
post_image_load_hooks();
616617
}
617618
jl_start_threads();
@@ -771,6 +772,11 @@ JL_DLLEXPORT void jl_init_(jl_image_buf_t sysimage)
771772
// enable before creating the root task so it gets timings too.
772773
jl_atomic_fetch_add(&jl_task_metrics_enabled, 1);
773774
}
775+
// Initialize constant objects
776+
jl_nothing = jl_gc_permobj(0, jl_nothing_type, 0);
777+
jl_set_typetagof(jl_nothing, jl_nothing_tag, GC_OLD_MARKED);
778+
jl_init_box_caches();
779+
jl_init_common_symbols();
774780
// warning: this changes `jl_current_task`, so be careful not to call that from this function
775781
jl_task_t *ct = jl_init_root_task(ptls, stack_lo, stack_hi);
776782
#pragma GCC diagnostic pop

src/jltypes.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3075,7 +3075,7 @@ void jl_init_types(void) JL_GC_DISABLED
30753075
jl_nothing_type = jl_new_datatype(jl_symbol("Nothing"), core, jl_any_type, jl_emptysvec,
30763076
jl_emptysvec, jl_emptysvec, jl_emptysvec, 0, 0, 0);
30773077
jl_void_type = jl_nothing_type; // deprecated alias
3078-
jl_astaggedvalue(jl_nothing)->header = ((uintptr_t)jl_nothing_type) | GC_OLD_MARKED;
3078+
XX(nothing);
30793079
jl_nothing_type->instance = jl_nothing;
30803080

30813081
jl_tvar_type = jl_new_datatype(jl_symbol("TypeVar"), core, jl_any_type, jl_emptysvec,
@@ -3166,19 +3166,19 @@ void jl_init_types(void) JL_GC_DISABLED
31663166
jl_perm_symsvec(1, "id"),
31673167
jl_svec1(jl_long_type),
31683168
jl_emptysvec, 0, 0, 1);
3169+
XX(ssavalue);
31693170

31703171
jl_slotnumber_type = jl_new_datatype(jl_symbol("SlotNumber"), core, jl_any_type, jl_emptysvec,
31713172
jl_perm_symsvec(1, "id"),
31723173
jl_svec1(jl_long_type),
31733174
jl_emptysvec, 0, 0, 1);
3175+
XX(slotnumber);
31743176

31753177
jl_argument_type = jl_new_datatype(jl_symbol("Argument"), core, jl_any_type, jl_emptysvec,
31763178
jl_perm_symsvec(1, "n"),
31773179
jl_svec1(jl_long_type),
31783180
jl_emptysvec, 0, 0, 1);
31793181

3180-
jl_init_int32_int64_cache();
3181-
31823182
jl_bool_type = NULL;
31833183
jl_bool_type = jl_new_primitivetype((jl_value_t*)jl_symbol("Bool"), core,
31843184
jl_any_type, jl_emptysvec, 8);
@@ -3295,7 +3295,8 @@ void jl_init_types(void) JL_GC_DISABLED
32953295
jl_new_primitivetype((jl_value_t*)jl_symbol("AddrSpace"), core, jl_any_type, tv, 8)->name;
32963296
jl_addrspace_type = (jl_unionall_t*)jl_addrspace_typename->wrapper;
32973297
jl_addrspacecore_type = (jl_datatype_t*)jl_apply_type1((jl_value_t*)jl_addrspace_type, (jl_value_t*)jl_core_module);
3298-
jl_value_t *cpumem = jl_permbox8(jl_addrspacecore_type, 0, 0);
3298+
XX(addrspacecore);
3299+
jl_value_t *cpumem = jl_permbox8(jl_addrspacecore_type, jl_addrspacecore_tag, 0);
32993300

33003301
tv = jl_svec1(tvar("T"));
33013302
jl_ref_type = (jl_unionall_t*)
@@ -3721,6 +3722,7 @@ void jl_init_types(void) JL_GC_DISABLED
37213722

37223723
jl_intrinsic_type = jl_new_primitivetype((jl_value_t*)jl_symbol("IntrinsicFunction"), core,
37233724
jl_builtin_type, jl_emptysvec, 32);
3725+
XX(intrinsic);
37243726

37253727
// LLVMPtr{T, AS} where {T, AS}
37263728
jl_tvar_t *elvar = tvar("T");
@@ -3966,7 +3968,6 @@ void post_boot_hooks(void)
39663968
jl_nulldebuginfo = (jl_debuginfo_t*)core("NullDebugInfo");
39673969
jl_abioverride_type = (jl_datatype_t*)core("ABIOverride");
39683970

3969-
jl_init_box_caches();
39703971
export_jl_small_typeof();
39713972
}
39723973

0 commit comments

Comments
 (0)