@@ -695,7 +695,7 @@ static jl_cgval_t emit_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
695
695
ai.decorateInst (load);
696
696
return mark_julia_type (ctx, load, true , ety);
697
697
}
698
- else if (!jl_isbits (ety)) {
698
+ else if (!deserves_stack (ety)) {
699
699
assert (jl_is_datatype (ety));
700
700
uint64_t size = jl_datatype_size (ety);
701
701
Value *strct = emit_allocobj (ctx, (jl_datatype_t *)ety);
@@ -716,7 +716,7 @@ static jl_cgval_t emit_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
716
716
assert (!isboxed);
717
717
if (!type_is_ghost (ptrty)) {
718
718
Value *thePtr = emit_unbox (ctx, ptrty->getPointerTo (), e, e.typ );
719
- auto load = typed_load (ctx, thePtr, im1, ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, AtomicOrdering::NotAtomic, true , align_nb);
719
+ auto load = typed_load (ctx, thePtr, im1, ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, AtomicOrdering::NotAtomic, false , align_nb);
720
720
setName (ctx.emission_context , load.V , " pointerref" );
721
721
return load;
722
722
}
@@ -775,7 +775,7 @@ static jl_cgval_t emit_pointerset(jl_codectx_t &ctx, jl_cgval_t *argv)
775
775
jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_data );
776
776
ai.decorateInst (store);
777
777
}
778
- else if (! jl_isbits (ety )) {
778
+ else if (x. ispointer ( )) {
779
779
thePtr = emit_unbox (ctx, getInt8PtrTy (ctx.builder .getContext ()), e, e.typ );
780
780
uint64_t size = jl_datatype_size (ety);
781
781
im1 = ctx.builder .CreateMul (im1, ConstantInt::get (ctx.types ().T_size ,
@@ -852,7 +852,7 @@ static jl_cgval_t emit_atomic_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
852
852
return jl_cgval_t ();
853
853
}
854
854
855
- if (!jl_isbits (ety)) {
855
+ if (!deserves_stack (ety)) {
856
856
assert (jl_is_datatype (ety));
857
857
Value *strct = emit_allocobj (ctx, (jl_datatype_t *)ety);
858
858
setName (ctx.emission_context , strct, " atomic_pointerref_box" );
@@ -876,7 +876,7 @@ static jl_cgval_t emit_atomic_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
876
876
assert (!isboxed);
877
877
if (!type_is_ghost (ptrty)) {
878
878
Value *thePtr = emit_unbox (ctx, ptrty->getPointerTo (), e, e.typ );
879
- auto load = typed_load (ctx, thePtr, nullptr , ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, llvm_order, true , nb);
879
+ auto load = typed_load (ctx, thePtr, nullptr , ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, llvm_order, false , nb);
880
880
setName (ctx.emission_context , load.V , " atomic_pointerref" );
881
881
return load;
882
882
}
@@ -954,6 +954,7 @@ static jl_cgval_t emit_atomic_pointerop(jl_codectx_t &ctx, intrinsic f, const jl
954
954
}
955
955
956
956
if (!jl_isbits (ety)) {
957
+ // if (!deserves_stack(ety))
957
958
// Value *thePtr = emit_unbox(ctx, getInt8PtrTy(ctx.builder.getContext()), e, e.typ);
958
959
// uint64_t size = jl_datatype_size(ety);
959
960
return emit_runtime_call (ctx, f, argv, nargs); // TODO: optimizations
0 commit comments