Skip to content

Commit ce83853

Browse files
authored
teach llvm-alloc-helpers about gc_loaded (#56030)
combined with #55913, the compiler is smart enough to fully remove ``` function f() m = Memory{Int}(undef, 3) @inbounds m[1] = 2 @inbounds m[2] = 2 @inbounds m[3] = 4 @inbounds return m[1] + m[2] + m[3] end ```
1 parent 84a2458 commit ce83853

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

src/llvm-alloc-helpers.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,11 @@ void jl_alloc::runEscapeAnalysis(llvm::CallInst *I, EscapeAnalysisRequiredArgs r
245245
required.use_info.addrescaped = true;
246246
return true;
247247
}
248+
if (required.pass.gc_loaded_func == callee) {
249+
required.use_info.haspreserve = true;
250+
required.use_info.hasload = true;
251+
return true;
252+
}
248253
if (required.pass.typeof_func == callee) {
249254
required.use_info.hastypeof = true;
250255
assert(use->get() == I);

0 commit comments

Comments
 (0)