Commit ece8814
committed
codegen: optimize const fields of mutable objects
For example, we seek to eliminate the gc frame from this function, as
observed here:
```julia
julia> code_llvm((BitSet,), raw=true) do x; r = x.bits; GC.safepoint(); @inbounds r[1]; end
; Function Signature: var"mmtk#3"(Base.BitSet)
; @ REPL[1]:1 within `mmtk#3`
define swiftcc i64 @"julia_#3_494"(ptr nonnull swiftself %pgcstack, ptr noundef nonnull align 8 dereferenceable(16) %"x::BitSet") #0 !dbg !5 {
top:
call void @llvm.dbg.declare(metadata ptr %"x::BitSet", metadata !21, metadata !DIExpression()), !dbg !22
%ptls_field = getelementptr inbounds ptr, ptr %pgcstack, i64 2
%ptls_load = load ptr, ptr %ptls_field, align 8, !tbaa !23
%0 = getelementptr inbounds ptr, ptr %ptls_load, i64 2
%safepoint = load ptr, ptr %0, align 8, !tbaa !27
fence syncscope("singlethread") seq_cst
%1 = load volatile i64, ptr %safepoint, align 8, !dbg !22
fence syncscope("singlethread") seq_cst
; ┌ @ Base.jl:49 within `getproperty`
%"x::BitSet.bits" = load atomic ptr, ptr %"x::BitSet" unordered, align 8, !dbg !29, !tbaa !27, !alias.scope !33, !noalias !36, !nonnull !11, !dereferenceable !41, !align !42
; └
; ┌ @ gcutils.jl:253 within `safepoint`
%ptls_load4 = load ptr, ptr %ptls_field, align 8, !dbg !43, !tbaa !23
%2 = getelementptr inbounds ptr, ptr %ptls_load4, i64 2, !dbg !43
%safepoint5 = load ptr, ptr %2, align 8, !dbg !43, !tbaa !27
fence syncscope("singlethread") seq_cst, !dbg !43
%3 = load volatile i64, ptr %safepoint5, align 8, !dbg !43
fence syncscope("singlethread") seq_cst, !dbg !43
; └
; ┌ @ essentials.jl:892 within `getindex`
%4 = load ptr, ptr %"x::BitSet.bits", align 8, !dbg !46, !tbaa !49, !alias.scope !52, !noalias !53
%5 = load i64, ptr %4, align 8, !dbg !46, !tbaa !54, !alias.scope !57, !noalias !58
ret i64 %5, !dbg !46
; └
}
```1 parent f66fd47 commit ece8814
2 files changed
+32
-42
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2664 | 2664 | | |
2665 | 2665 | | |
2666 | 2666 | | |
| 2667 | + | |
| 2668 | + | |
2667 | 2669 | | |
2668 | 2670 | | |
2669 | 2671 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8267 | 8267 | | |
8268 | 8268 | | |
8269 | 8269 | | |
8270 | | - | |
| 8270 | + | |
8271 | 8271 | | |
8272 | 8272 | | |
8273 | 8273 | | |
8274 | 8274 | | |
8275 | 8275 | | |
8276 | 8276 | | |
8277 | 8277 | | |
8278 | | - | |
8279 | | - | |
8280 | | - | |
8281 | | - | |
| 8278 | + | |
| 8279 | + | |
| 8280 | + | |
| 8281 | + | |
8282 | 8282 | | |
8283 | 8283 | | |
8284 | 8284 | | |
| |||
8289 | 8289 | | |
8290 | 8290 | | |
8291 | 8291 | | |
| 8292 | + | |
8292 | 8293 | | |
8293 | 8294 | | |
8294 | 8295 | | |
| |||
8297 | 8298 | | |
8298 | 8299 | | |
8299 | 8300 | | |
| 8301 | + | |
8300 | 8302 | | |
8301 | 8303 | | |
8302 | 8304 | | |
| |||
8323 | 8325 | | |
8324 | 8326 | | |
8325 | 8327 | | |
8326 | | - | |
8327 | | - | |
8328 | | - | |
8329 | | - | |
8330 | | - | |
8331 | | - | |
8332 | | - | |
8333 | | - | |
8334 | | - | |
8335 | | - | |
8336 | | - | |
8337 | | - | |
8338 | | - | |
8339 | | - | |
8340 | | - | |
8341 | | - | |
8342 | | - | |
8343 | | - | |
8344 | | - | |
8345 | | - | |
8346 | | - | |
8347 | | - | |
8348 | | - | |
| 8328 | + | |
| 8329 | + | |
| 8330 | + | |
| 8331 | + | |
| 8332 | + | |
| 8333 | + | |
| 8334 | + | |
| 8335 | + | |
| 8336 | + | |
| 8337 | + | |
| 8338 | + | |
| 8339 | + | |
| 8340 | + | |
| 8341 | + | |
| 8342 | + | |
8349 | 8343 | | |
8350 | 8344 | | |
8351 | 8345 | | |
| |||
8359 | 8353 | | |
8360 | 8354 | | |
8361 | 8355 | | |
8362 | | - | |
| 8356 | + | |
8363 | 8357 | | |
8364 | 8358 | | |
8365 | 8359 | | |
| |||
8402 | 8396 | | |
8403 | 8397 | | |
8404 | 8398 | | |
8405 | | - | |
| 8399 | + | |
8406 | 8400 | | |
8407 | 8401 | | |
8408 | 8402 | | |
| |||
8542 | 8536 | | |
8543 | 8537 | | |
8544 | 8538 | | |
8545 | | - | |
| 8539 | + | |
8546 | 8540 | | |
8547 | 8541 | | |
8548 | 8542 | | |
| |||
8561 | 8555 | | |
8562 | 8556 | | |
8563 | 8557 | | |
8564 | | - | |
8565 | | - | |
8566 | | - | |
| 8558 | + | |
8567 | 8559 | | |
8568 | | - | |
8569 | | - | |
8570 | | - | |
| 8560 | + | |
| 8561 | + | |
8571 | 8562 | | |
8572 | 8563 | | |
8573 | | - | |
8574 | | - | |
| 8564 | + | |
| 8565 | + | |
8575 | 8566 | | |
8576 | | - | |
8577 | | - | |
8578 | | - | |
8579 | 8567 | | |
8580 | 8568 | | |
8581 | 8569 | | |
| |||
0 commit comments