Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove @inbounds in tuple iteration #48260

Closed
wants to merge 1 commit into from
Closed

Remove @inbounds in tuple iteration #48260

wants to merge 1 commit into from

Conversation

Keno
Copy link
Member

@Keno Keno commented Jan 12, 2023

LLVM can prove this inbounds and the annotation weakens the inferable effects for tuple iteration, which has a surprisingly large inference performance and precision impact. Add a test for both effects and codegen to make sure this doens't regress.

Keno added a commit to JuliaDiff/Diffractor.jl that referenced this pull request Jan 12, 2023
Similar to JuliaLang/julia#48260, this
`@inbounds` hurts effects tainting.
Keno added a commit to JuliaDiff/Diffractor.jl that referenced this pull request Jan 12, 2023
Similar to JuliaLang/julia#48260, this
`@inbounds` hurts effects tainting.
Keno added a commit to JuliaDiff/Diffractor.jl that referenced this pull request Jan 13, 2023
Similar to JuliaLang/julia#48260, this
`@inbounds` hurts effects tainting.
@Keno
Copy link
Member Author

Keno commented Jan 13, 2023

Sigh, guess the final version of my PR wasn't actually enough to retain consitency here. I'll push an update.

@aviatesk
Copy link
Member

Guess the :consistent-cy is tainted here

julia/base/compiler/tfuncs.jl

Lines 2198 to 2205 in 2ca0981

if !nothrow && getfield_boundscheck(argtypes) !== true
# If we cannot independently prove inboundsness, taint consistency.
# The inbounds-ness assertion requires dynamic reachability, while
# :consistent needs to be true for all input values.
# N.B. We do not taint for `--check-bounds=no` here that happens in
# InferenceState.
consistent = ALWAYS_FALSE
end

@Keno
Copy link
Member Author

Keno commented Jan 13, 2023

Yes. I have most of a fix, but something is breaking, so I'll have to resume in the morning.

LLVM can prove this inbounds and the annotation weakens the
inferable effects for tuple iteration, which has a surprisingly
large inference performance and precision impact.

Unfortunately, my previous changes to :inbounds tainting weren't
quite strong enough yet, because `getfield` was still tainting
consistency on unknown boundscheck arguments. To fix that, we
pass through the fargs into the fetfield effects to check if
we're getting a literal `:boundscheck`, in which case the
`:noinbounds` consistency-tainting logic I added in #48246
is sufficient to not require additional consistency tainting.

Also add a test for both effects and codegen to make sure this doens't regress.
@Keno Keno closed this Jan 16, 2023
@Keno Keno reopened this Jan 16, 2023
@Keno Keno closed this Jan 16, 2023
@Keno Keno reopened this Jan 16, 2023
@Keno
Copy link
Member Author

Keno commented Jan 16, 2023

CI isn't running on this PR - not sure why. Let me just recreate it.

@Keno Keno closed this Jan 16, 2023
@Keno Keno deleted the kf/rminbounds branch January 16, 2023 07:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants