@@ -787,13 +787,18 @@ static unsigned get_box_tindex(jl_datatype_t *jt, jl_value_t *ut)
787
787
788
788
static Value *emit_nthptr_addr (jl_codectx_t &ctx, Value *v, ssize_t n, bool gctracked = true )
789
789
{
790
- return ctx.builder .CreateInBoundsGEP (emit_bitcast (ctx, maybe_decay_tracked (v), T_pprjlvalue),
791
- ConstantInt::get (T_size, n));
790
+ return ctx.builder .CreateInBoundsGEP (
791
+ T_prjlvalue,
792
+ emit_bitcast (ctx, maybe_decay_tracked (v), T_pprjlvalue),
793
+ ConstantInt::get (T_size, n));
792
794
}
793
795
794
796
static Value *emit_nthptr_addr (jl_codectx_t &ctx, Value *v, Value *idx)
795
797
{
796
- return ctx.builder .CreateInBoundsGEP (emit_bitcast (ctx, maybe_decay_tracked (v), T_pprjlvalue), idx);
798
+ return ctx.builder .CreateInBoundsGEP (
799
+ T_prjlvalue,
800
+ emit_bitcast (ctx, maybe_decay_tracked (v), T_pprjlvalue),
801
+ idx);
797
802
}
798
803
799
804
static Value *emit_nthptr (jl_codectx_t &ctx, Value *v, ssize_t n, MDNode *tbaa)
@@ -1485,8 +1490,10 @@ static bool emit_getfield_unknownidx(jl_codectx_t &ctx,
1485
1490
minimum_align = std::min (minimum_align,
1486
1491
(size_t )julia_alignment (ft));
1487
1492
}
1488
- Value *fldptr = ctx.builder .CreateInBoundsGEP (maybe_decay_tracked (
1489
- emit_bitcast (ctx, data_pointer (ctx, strct), T_pprjlvalue)), idx);
1493
+ Value *fldptr = ctx.builder .CreateInBoundsGEP (
1494
+ T_prjlvalue,
1495
+ maybe_decay_tracked (emit_bitcast (ctx, data_pointer (ctx, strct), T_pprjlvalue)),
1496
+ idx);
1490
1497
Value *fld = tbaa_decorate (strct.tbaa ,
1491
1498
maybe_mark_load_dereferenceable (
1492
1499
ctx.builder .CreateLoad (T_prjlvalue, fldptr),
@@ -1568,8 +1575,9 @@ static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &st
1568
1575
// can pessimize mem2reg
1569
1576
if (byte_offset > 0 ) {
1570
1577
addr = ctx.builder .CreateInBoundsGEP (
1571
- emit_bitcast (ctx, staddr, T_pint8),
1572
- ConstantInt::get (T_size, byte_offset));
1578
+ T_int8,
1579
+ emit_bitcast (ctx, staddr, T_pint8),
1580
+ ConstantInt::get (T_size, byte_offset));
1573
1581
}
1574
1582
else {
1575
1583
addr = staddr;
@@ -1924,8 +1932,8 @@ static Value *emit_array_nd_index(
1924
1932
ctx.builder .SetInsertPoint (failBB);
1925
1933
// CreateAlloca is OK here since we are on an error branch
1926
1934
Value *tmp = ctx.builder .CreateAlloca (T_size, ConstantInt::get (T_size, nidxs));
1927
- for (size_t k= 0 ; k < nidxs; k++) {
1928
- ctx.builder .CreateStore (idxs[k], ctx.builder .CreateInBoundsGEP (tmp, ConstantInt::get (T_size, k)));
1935
+ for (size_t k = 0 ; k < nidxs; k++) {
1936
+ ctx.builder .CreateStore (idxs[k], ctx.builder .CreateInBoundsGEP (T_size, tmp, ConstantInt::get (T_size, k)));
1929
1937
}
1930
1938
ctx.builder .CreateCall (prepare_call (jlboundserrorv_func),
1931
1939
{ mark_callee_rooted (a), tmp, ConstantInt::get (T_size, nidxs) });
@@ -2438,8 +2446,9 @@ static void emit_setfield(jl_codectx_t &ctx,
2438
2446
Value *addr = data_pointer (ctx, strct);
2439
2447
if (byte_offset > 0 ) {
2440
2448
addr = ctx.builder .CreateInBoundsGEP (
2441
- emit_bitcast (ctx, maybe_decay_tracked (addr), T_pint8),
2442
- ConstantInt::get (T_size, byte_offset)); // TODO: use emit_struct_gep
2449
+ T_int8,
2450
+ emit_bitcast (ctx, maybe_decay_tracked (addr), T_pint8),
2451
+ ConstantInt::get (T_size, byte_offset)); // TODO: use emit_struct_gep
2443
2452
}
2444
2453
jl_value_t *jfty = jl_svecref (sty->types , idx0);
2445
2454
if (jl_field_isptr (sty, idx0)) {
@@ -2561,7 +2570,9 @@ static jl_cgval_t emit_new_struct(jl_codectx_t &ctx, jl_value_t *ty, size_t narg
2561
2570
if (!jl_field_isptr (sty, i) && jl_is_uniontype (jl_field_type (sty, i))) {
2562
2571
tbaa_decorate (tbaa_unionselbyte, ctx.builder .CreateStore (
2563
2572
ConstantInt::get (T_int8, 0 ),
2564
- ctx.builder .CreateInBoundsGEP (emit_bitcast (ctx, strct, T_pint8),
2573
+ ctx.builder .CreateInBoundsGEP (
2574
+ T_int8,
2575
+ emit_bitcast (ctx, strct, T_pint8),
2565
2576
ConstantInt::get (T_size, jl_field_offset (sty, i) + jl_field_size (sty, i) - 1 ))));
2566
2577
}
2567
2578
}
@@ -2581,15 +2592,15 @@ static jl_cgval_t emit_new_struct(jl_codectx_t &ctx, jl_value_t *ty, size_t narg
2581
2592
tbaa_decorate (strctinfo.tbaa , ctx.builder .CreateStore (
2582
2593
ConstantPointerNull::get (cast<PointerType>(T_prjlvalue)),
2583
2594
ctx.builder .CreateInBoundsGEP (T_prjlvalue, emit_bitcast (ctx, strct, T_pprjlvalue),
2584
- ConstantInt::get (T_size, jl_field_offset (sty, i) / sizeof (void *)))));
2595
+ ConstantInt::get (T_size, jl_field_offset (sty, i) / sizeof (void *)))));
2585
2596
}
2586
2597
}
2587
2598
for (size_t i = nargs; i < nf; i++) {
2588
2599
if (!jl_field_isptr (sty, i) && jl_is_uniontype (jl_field_type (sty, i))) {
2589
2600
tbaa_decorate (tbaa_unionselbyte, ctx.builder .CreateStore (
2590
2601
ConstantInt::get (T_int8, 0 ),
2591
2602
ctx.builder .CreateInBoundsGEP (emit_bitcast (ctx, strct, T_pint8),
2592
- ConstantInt::get (T_size, jl_field_offset (sty, i) + jl_field_size (sty, i) - 1 ))));
2603
+ ConstantInt::get (T_size, jl_field_offset (sty, i) + jl_field_size (sty, i) - 1 ))));
2593
2604
}
2594
2605
}
2595
2606
bool need_wb = false ;
0 commit comments