-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
A few cleanup/optimizations related to tag handling in codegen
* Create `julia.typeof` and `julia.write_barrier` intrinsics So that tag access is easier for the llvm passes to handle. This also completely hides the tag access from LLVM before lowering of these intrinsics which makes it possible to mark the write barrier as `inaccessiblememonly` and enable store to load forwarding on mutable types. * Mark `jl_gc_queue_root` as `inaccessiblemem_or_argmemonly`. Should also have a positive impact on LLVM memory access optimizations. * In non-imaging mode, use the pointer literals directly for union type. * Remove old code that check whether the child is NULL before running the write barrier This is not needed anymore. * Mark functions returning julia object as `nonnull` return. This can avoid `NULL` check together with the improved store to load forwarding. * Remove `jlnewbits_func` which is not used in codegen anymore. * Fix `LateLowerGCFrame` initialization `runOnFunction` shouldn't modify the `Module`. * Add more `dereferencable` attributes and explicitly specify `nonnull` since it is not implied by `dereferencable` for non default addrspace. Also add range metadata on the tag load. The change should also make it easier to do more allocation optmization in LLVM for objects with object reference as fields.
- Loading branch information
Showing
6 changed files
with
427 additions
and
196 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.