JIT duplicates body of non-entry functions
- Dominant language
- C++
- Stars
- 1.9k
- Forks
- 283
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 135
Description
When a function has multiple callers the body is duplicated in the JIT. Example:define i1 @test(i7 %x0, i64 %_2) {
so_basic:
%invoke_198 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 16777216, i64 %_2)
%invoke_200 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 %invoke_198, i64 %_2)
%invoke_202 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 %invoke_200, i64 %_2)
%invoke_204 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 %invoke_202, i64 %_2)
%invoke_206 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 %invoke_204, i64 %_2)
%x5 = call i27 @"sample::____sample__main_counted_for_0_body"(i4 0, i27 %invoke_206, i64 %_2)
...
}
define i27 @"sample::____sample__main_counted_for_0_body"(i4 %i, i27 %x, i64 %_0) {
so_basic:
ret i27 %x
so_basic1: ; No predecessors!
ret i27 %x
so_basic2: ; No predecessors!
ret i27 %x
so_basic3: ; No predecessors!
ret i27 %x
so_basic4: ; No predecessors!
ret i27 %x
so_basic5: ; No predecessors!
ret i27 %x
so_basic6: ; No predecessors!
ret i27 %x
so_basic7: ; No predecessors!
ret i27 %x
so_basic8: ; No predecessors!
ret i27 %x
so_basic9: ; No predecessors!
ret i27 %x
so_basic10: ; No predecessors!
ret i27 %x
so_basic11: ; No predecessors!
ret i27 %x
}
Contributor guide
Assessment
This issue has not been assessed yet.