gf.c: include const-return methods in --trace-compile#58535
gf.c: include const-return methods in --trace-compile#58535topolarity wants to merge 1 commit intoJuliaLang:masterfrom
--trace-compile#58535Conversation
Code that returns a constant value never ends up compiled by LLVM, but we want to log them since they are inferred / compiled by our own Compiler. These can sometimes include methods that speculatively end up 'compiled' with a non-'compileable' signature, since inference eagerly explores widened signatures that JIT / codegen normally would not. That's not work that we can log here since `precompile(...)` will reject the widened signature, but that's probably fine, since the JIT doesn't know to look for these widened signatures anyway.
5b907c9 to
f130858
Compare
| // This isa_compileable_sig check is required because `precompile(...)` will reject the signature otherwise, | ||
| // assuming it is too wide to compile to a good result. That happens even though we know a posteriori that | ||
| // the signature compiles to a function with excellent performance (a const-return function). | ||
| record_precompile_statement(mi, 0.0, 0); |
There was a problem hiding this comment.
This probably works but it makes me nervous, since all the other calls to this are from jl_compile_method_internal. Is there any way to arrange for this call to also come from that function?
|
@kpamnany to leave a status update on the experiments we tried w/ this PR. |
This PR is probably not merge-able as-is, but the crashes that @kpamnany encountered are not due to this fix. They happen when you include the |
|
What @topolarity said. This patch does emit On our 1.10 build, we used this patch and generated And tried to build a sysimage. The sysimage built successfully a number of times, but then failed with: That Unfortunately, this did not reproduce in the next 10 runs. :( Cody then suggested: After a number of no-error runs, we finally saw: Strangely, the And we haven't gotten any further with this investigation. |
|
It's also worth mentioning that another run at some point showed a GC-based segfault of some kind (iirc), so it's likely that bug is a GC corruption / incorrect-ness of some kind. |
Backported PRs: - [x] #54840 <!-- Add boundscheck in speccache_eq to avoid OOB access due to data race --> - [x] #42080 <!-- recommend explicit `using Foo: Foo, ...` in package code (was: "using considered harmful") --> - [x] #58127 <!-- [DOC] Update installation docs: /downloads/ => /install/ --> - [x] #58202 <!-- [release-1.11] malloc: use jl_get_current_task to fix null check --> - [x] #58584 <!-- Make `Ptr` values static-show w/ type-information --> - [x] #58637 <!-- Make late gc lower handle insertelement of alloca use. --> - [x] #58837 <!-- fix null comparisons for non-standard address spaces --> - [x] #57826 <!-- Add a `similar` method for `Type{<:CodeUnits}` --> - [x] #58293 <!-- fix trailing indices stackoverflow in reinterpreted array --> - [x] #58887 <!-- Pkg: Allow configuring can_fancyprint(io::IO) using IOContext --> - [x] #58937 <!-- Fix nthreadpools size in JLOptions --> - [x] #58978 <!-- Fix precompilepkgs warn loaded setting --> - [x] #58998 <!-- Bugfix: Use Base.aligned_sizeof instead of sizeof in Mmap.mmap --> - [x] #59120 <!-- Fix memory order typo in "src/julia_atomics.h" --> - [x] #59170 <!-- Clarify and enhance confusing precompile test --> Need manual backport: - [ ] #56329 <!-- loading: clean up more concurrency issues --> - [ ] #56956 <!-- Add "mea culpa" to foreign module assignment error. --> - [ ] #57035 <!-- linux: workaround to avoid deadlock inside dl_iterate_phdr in glibc --> - [ ] #57089 <!-- Block thread from receiving profile signal with stackwalk lock --> - [ ] #57249 <!-- restore non-freebsd-unix fix for profiling --> - [ ] #58011 <!-- Remove try-finally scope from `@time_imports` `@trace_compile` `@trace_dispatch` --> - [ ] #58062 <!-- remove unnecessary edge from `exp_impl` to `pow` --> - [ ] #58157 <!-- add showing a string to REPL precompile workload --> - [ ] #58209 <!-- Specialize `one` for the `SizedArray` test helper --> - [ ] #58108 <!-- Base.get_extension & Dates.format made public --> - [ ] #58356 <!-- codegen: remove readonly from abstract type calling convention --> - [ ] #58415 <!-- [REPL] more reliable extension loading --> - [ ] #58510 <!-- Don't filter `Core` methods from newly-inferred list --> - [ ] #58110 <!-- relax dispatch for the `IteratorSize` method for `Generator` --> - [ ] #58965 <!-- Fix `hygienic-scope`s in inner macro expansions --> - [ ] #58971 <!-- Fix alignment of failed precompile jobs on CI --> - [ ] #59066 <!-- build: Also pass -fno-strict-aliasing for C++ --> Contains multiple commits, manual intervention needed: - [ ] #55877 <!-- fix FileWatching designs and add workaround for a stat bug on Apple --> - [ ] #56755 <!-- docs: fix scope type of a `struct` to hard --> - [ ] #57809 <!-- Fix fptrunc Float64 -> Float16 rounding through Float32 --> - [ ] #57398 <!-- Make remaining float intrinsics require float arguments --> - [ ] #56351 <!-- Fix `--project=@script` when outside script directory --> - [ ] #57129 <!-- clarify that time_ns is monotonic --> - [ ] #58134 <!-- Note annotated string API is experimental in Julia 1.11 in HISTORY.md --> - [ ] #58401 <!-- check that hashing of types does not foreigncall (`jl_type_hash` is concrete evaluated) --> - [ ] #58435 <!-- Fix layout flags for types that have oddly sized primitive type fields --> - [ ] #58483 <!-- Fix tbaa usage when storing into heap allocated immutable structs --> - [ ] #58512 <!-- Make more types jl_static_show readably --> - [ ] #58012 <!-- Re-enable tab completion of kwargs for large method tables --> - [ ] #58683 <!-- Add 0 predecessor to entry basic block and handle it in inlining --> - [ ] #59112 <!-- Add builtin function name to add methods error --> Non-merged PRs with backport label: - [ ] #59329 <!-- aotcompile: destroy LLVM context after serializing combined module --> - [ ] #58848 <!-- Set array size only when safe to do so --> - [ ] #58535 <!-- gf.c: include const-return methods in `--trace-compile` --> - [ ] #58038 <!-- strings/cstring: `transcode`: prevent Windows sysimage invalidation --> - [ ] #57604 <!-- `@nospecialize` for `string_index_err` --> - [ ] #57366 <!-- Use ptrdiff_t sized offsets for gvars_offsets to allow large sysimages --> - [ ] #56890 <!-- Enable getting non-boxed LLVM type from Julia Type --> - [ ] #56823 <!-- Make version of opaque closure constructor in world --> - [ ] #55958 <!-- also redirect JL_STDERR etc. when redirecting to devnull --> - [ ] #55956 <!-- Make threadcall gc safe --> - [ ] #55534 <!-- Set stdlib sources as read-only during installation --> - [ ] #55499 <!-- propagate the terminal's `displaysize` to the `IOContext` used by the REPL --> - [ ] #55458 <!-- Allow for generically extracting unannotated string --> - [ ] #55457 <!-- Make AnnotateChar equality consider annotations --> - [ ] #55220 <!-- `isfile_casesensitive` fixes on Windows --> - [ ] #53957 <!-- tweak how filtering is done for what packages should be precompiled --> - [ ] #51479 <!-- prevent code loading from lookin in the versioned environment when building Julia --> - [ ] #50813 <!-- More doctests for Sockets and capitalization fix --> - [ ] #50157 <!-- improve docs for `@inbounds` and `Base.@propagate_inbounds` --> --------- Co-authored-by: Kiran Pamnany <kpamnany@users.noreply.github.com> Co-authored-by: adienes <51664769+adienes@users.noreply.github.com> Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com> Co-authored-by: Keno Fischer <keno@juliacomputing.com> Co-authored-by: Simeon David Schaub <simeon@schaub.rocks> Co-authored-by: Jameson Nash <vtjnash@gmail.com> Co-authored-by: Alex Arslan <ararslan@comcast.net> Co-authored-by: Fons van der Plas <fonsvdplas@gmail.com> Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com> Co-authored-by: JonasIsensee <jonas.isensee@web.de> Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com> Co-authored-by: Dilum Aluthge <dilum@aluthge.com> Co-authored-by: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Co-authored-by: DilumAluthge <5619885+DilumAluthge@users.noreply.github.com>
|
Resolution is just to use trace-dispatch if that is what you mean, instead of trying to make trace-compile do something unexpected here |
what is unexpected? My understanding of Put differently: If you were running in a binary compiled by Talking to @JeffBezanson today, he put it like this: "Users don't really care what is compiled by llvm vs inference. You just So i think having a working version of |
Code that returns a constant value never ends up compiled by LLVM, but we want to log them with
--trace-compilesince they are inferred / compiled by our own Compiler.Resolves #58482