@@ -678,7 +678,7 @@ static jl_cgval_t emit_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
678
678
ai.decorateInst (load);
679
679
return mark_julia_type (ctx, load, true , ety);
680
680
}
681
- else if (!jl_isbits (ety)) {
681
+ else if (!deserves_stack (ety)) {
682
682
assert (jl_is_datatype (ety));
683
683
uint64_t size = jl_datatype_size (ety);
684
684
Value *strct = emit_allocobj (ctx, size,
@@ -697,7 +697,7 @@ static jl_cgval_t emit_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
697
697
assert (!isboxed);
698
698
if (!type_is_ghost (ptrty)) {
699
699
Value *thePtr = emit_unbox (ctx, ptrty->getPointerTo (), e, e.typ );
700
- return typed_load (ctx, thePtr, im1, ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, AtomicOrdering::NotAtomic, true , align_nb);
700
+ return typed_load (ctx, thePtr, im1, ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, AtomicOrdering::NotAtomic, false , align_nb);
701
701
}
702
702
else {
703
703
return ghostValue (ctx, ety);
@@ -751,7 +751,7 @@ static jl_cgval_t emit_pointerset(jl_codectx_t &ctx, jl_cgval_t *argv)
751
751
jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA (ctx, ctx.tbaa ().tbaa_data );
752
752
ai.decorateInst (store);
753
753
}
754
- else if (! jl_isbits (ety )) {
754
+ else if (x. ispointer ( )) {
755
755
thePtr = emit_unbox (ctx, getInt8PtrTy (ctx.builder .getContext ()), e, e.typ );
756
756
uint64_t size = jl_datatype_size (ety);
757
757
im1 = ctx.builder .CreateMul (im1, ConstantInt::get (getSizeTy (ctx.builder .getContext ()),
@@ -824,7 +824,7 @@ static jl_cgval_t emit_atomic_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
824
824
return jl_cgval_t ();
825
825
}
826
826
827
- if (!jl_isbits (ety)) {
827
+ if (!deserves_stack (ety)) {
828
828
assert (jl_is_datatype (ety));
829
829
uint64_t size = jl_datatype_size (ety);
830
830
Value *strct = emit_allocobj (ctx, size,
@@ -848,7 +848,7 @@ static jl_cgval_t emit_atomic_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
848
848
assert (!isboxed);
849
849
if (!type_is_ghost (ptrty)) {
850
850
Value *thePtr = emit_unbox (ctx, ptrty->getPointerTo (), e, e.typ );
851
- return typed_load (ctx, thePtr, nullptr , ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, llvm_order, true , nb);
851
+ return typed_load (ctx, thePtr, nullptr , ety, ctx.tbaa ().tbaa_data , nullptr , isboxed, llvm_order, false , nb);
852
852
}
853
853
else {
854
854
if (order > jl_memory_order_monotonic)
@@ -924,6 +924,7 @@ static jl_cgval_t emit_atomic_pointerop(jl_codectx_t &ctx, intrinsic f, const jl
924
924
}
925
925
926
926
if (!jl_isbits (ety)) {
927
+ // if (!deserves_stack(ety))
927
928
// Value *thePtr = emit_unbox(ctx, getInt8PtrTy(ctx.builder.getContext()), e, e.typ);
928
929
// uint64_t size = jl_datatype_size(ety);
929
930
return emit_runtime_call (ctx, f, argv, nargs); // TODO: optimizations
0 commit comments