@@ -550,10 +550,12 @@ static Value *julia_to_native(
550550 // since those are immutable.
551551 Value *slot = emit_static_alloca (ctx, to);
552552 if (!jvinfo.ispointer ()) {
553- tbaa_decorate (jvinfo.tbaa , ctx.builder .CreateStore (emit_unbox (ctx, to, jvinfo, jlto), slot));
553+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, jvinfo.tbaa );
554+ ai.decorateInst (ctx.builder .CreateStore (emit_unbox (ctx, to, jvinfo, jlto), slot));
554555 }
555556 else {
556- emit_memcpy (ctx, slot, jvinfo.tbaa , jvinfo, jl_datatype_size (jlto), julia_alignment (jlto));
557+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, jvinfo.tbaa );
558+ emit_memcpy (ctx, slot, ai, jvinfo, jl_datatype_size (jlto), julia_alignment (jlto));
557559 }
558560 return slot;
559561}
@@ -1571,7 +1573,8 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs)
15711573 const int tid_offset = offsetof (jl_task_t , tid);
15721574 Value *ptid = ctx.builder .CreateInBoundsGEP (getInt16Ty (ctx.builder .getContext ()), ptask_i16, ConstantInt::get (getSizeTy (ctx.builder .getContext ()), tid_offset / sizeof (int16_t )));
15731575 LoadInst *tid = ctx.builder .CreateAlignedLoad (getInt16Ty (ctx.builder .getContext ()), ptid, Align (sizeof (int16_t )));
1574- tbaa_decorate (ctx.tbaa ().tbaa_gcframe , tid);
1576+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_gcframe );
1577+ ai.decorateInst (tid);
15751578 return mark_or_box_ccall_result (ctx, tid, retboxed, rt, unionall, static_rt);
15761579 }
15771580 else if (is_libjulia_func (jl_gc_disable_finalizers_internal)
@@ -1675,8 +1678,10 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs)
16751678 len = ctx.builder .CreateAlignedLoad (getSizeTy (ctx.builder .getContext ()), ptr, Align (sizeof (size_t )));
16761679 // Only mark with TBAA if we are sure about the type.
16771680 // This could otherwise be in a dead branch
1678- if (svecv.typ == (jl_value_t *)jl_simplevector_type)
1679- tbaa_decorate (ctx.tbaa ().tbaa_const , cast<Instruction>(len));
1681+ if (svecv.typ == (jl_value_t *)jl_simplevector_type) {
1682+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_const );
1683+ ai.decorateInst (cast<Instruction>(len));
1684+ }
16801685 MDBuilder MDB (ctx.builder .getContext ());
16811686 auto rng = MDB.createRange (
16821687 Constant::getNullValue (getSizeTy (ctx.builder .getContext ())), ConstantInt::get (getSizeTy (ctx.builder .getContext ()), INTPTR_MAX / sizeof (void *) - 1 ));
@@ -1701,8 +1706,10 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs)
17011706 load->setAtomic (AtomicOrdering::Unordered);
17021707 // Only mark with TBAA if we are sure about the type.
17031708 // This could otherwise be in a dead branch
1704- if (svecv.typ == (jl_value_t *)jl_simplevector_type)
1705- tbaa_decorate (ctx.tbaa ().tbaa_const , load);
1709+ if (svecv.typ == (jl_value_t *)jl_simplevector_type) {
1710+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_const );
1711+ ai.decorateInst (load);
1712+ }
17061713 JL_GC_POP ();
17071714 return mark_or_box_ccall_result (ctx, load, retboxed, rt, unionall, static_rt);
17081715 }
@@ -1736,7 +1743,8 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs)
17361743 Value *slot_addr = ctx.builder .CreateInBoundsGEP (ctx.types ().T_prjlvalue , arrayptr, idx);
17371744 LoadInst *load = ctx.builder .CreateAlignedLoad (ctx.types ().T_prjlvalue , slot_addr, Align (sizeof (void *)));
17381745 load->setAtomic (AtomicOrdering::Unordered);
1739- tbaa_decorate (ctx.tbaa ().tbaa_ptrarraybuf , load);
1746+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_ptrarraybuf );
1747+ ai.decorateInst (load);
17401748 Value *res = ctx.builder .CreateZExt (ctx.builder .CreateICmpNE (load, Constant::getNullValue (ctx.types ().T_prjlvalue )), getInt32Ty (ctx.builder .getContext ()));
17411749 JL_GC_POP ();
17421750 return mark_or_box_ccall_result (ctx, res, retboxed, rt, unionall, static_rt);
@@ -1838,7 +1846,8 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs)
18381846 Value *ph1 = emit_bitcast (ctx, decay_derived (ctx, boxed (ctx, val)), getSizePtrTy (ctx.builder .getContext ()));
18391847 Value *ph2 = ctx.builder .CreateInBoundsGEP (getSizeTy (ctx.builder .getContext ()), ph1, ConstantInt::get (getSizeTy (ctx.builder .getContext ()), hash_offset / sizeof (size_t )));
18401848 LoadInst *hashval = ctx.builder .CreateAlignedLoad (getSizeTy (ctx.builder .getContext ()), ph2, Align (sizeof (size_t )));
1841- tbaa_decorate (ctx.tbaa ().tbaa_const , hashval);
1849+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_const );
1850+ ai.decorateInst (hashval);
18421851 return mark_or_box_ccall_result (ctx, hashval, retboxed, rt, unionall, static_rt);
18431852 }
18441853 else if (!val.isboxed ) {
@@ -2128,7 +2137,8 @@ jl_cgval_t function_sig_t::emit_a_ccall(
21282137 auto slot = emit_static_alloca (ctx, resultTy);
21292138 slot->setAlignment (Align (boxalign));
21302139 ctx.builder .CreateAlignedStore (result, slot, Align (boxalign));
2131- emit_memcpy (ctx, strct, tbaa, slot, tbaa, rtsz, boxalign);
2140+ jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, tbaa);
2141+ emit_memcpy (ctx, strct, ai, slot, ai, rtsz, boxalign);
21322142 }
21332143 else {
21342144 init_bits_value (ctx, strct, result, tbaa, boxalign);
0 commit comments