Skip to content

Commit ef6d900

Browse files
authored
codegen: handle dead code with unsafe_store of FCA pointers (#50164)
Fix #50125
1 parent ad120f4 commit ef6d900

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/intrinsics.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ static jl_cgval_t emit_pointerref(jl_codectx_t &ctx, jl_cgval_t *argv)
695695
ai.decorateInst(load);
696696
return mark_julia_type(ctx, load, true, ety);
697697
}
698-
else if (!jl_isbits(ety)) {
698+
else if (!deserves_stack(ety)) {
699699
assert(jl_is_datatype(ety));
700700
uint64_t size = jl_datatype_size(ety);
701701
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)
716716
assert(!isboxed);
717717
if (!type_is_ghost(ptrty)) {
718718
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);
720720
setName(ctx.emission_context, load.V, "pointerref");
721721
return load;
722722
}
@@ -775,7 +775,7 @@ static jl_cgval_t emit_pointerset(jl_codectx_t &ctx, jl_cgval_t *argv)
775775
jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA(ctx, ctx.tbaa().tbaa_data);
776776
ai.decorateInst(store);
777777
}
778-
else if (!jl_isbits(ety)) {
778+
else if (x.ispointer()) {
779779
thePtr = emit_unbox(ctx, getInt8PtrTy(ctx.builder.getContext()), e, e.typ);
780780
uint64_t size = jl_datatype_size(ety);
781781
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)
852852
return jl_cgval_t();
853853
}
854854

855-
if (!jl_isbits(ety)) {
855+
if (!deserves_stack(ety)) {
856856
assert(jl_is_datatype(ety));
857857
Value *strct = emit_allocobj(ctx, (jl_datatype_t*)ety);
858858
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)
876876
assert(!isboxed);
877877
if (!type_is_ghost(ptrty)) {
878878
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);
880880
setName(ctx.emission_context, load.V, "atomic_pointerref");
881881
return load;
882882
}
@@ -954,6 +954,7 @@ static jl_cgval_t emit_atomic_pointerop(jl_codectx_t &ctx, intrinsic f, const jl
954954
}
955955

956956
if (!jl_isbits(ety)) {
957+
//if (!deserves_stack(ety))
957958
//Value *thePtr = emit_unbox(ctx, getInt8PtrTy(ctx.builder.getContext()), e, e.typ);
958959
//uint64_t size = jl_datatype_size(ety);
959960
return emit_runtime_call(ctx, f, argv, nargs); // TODO: optimizations

0 commit comments

Comments
 (0)