-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
Tweak bounds check elimination #42692
Conversation
@nanosoldier |
Test case 1:
The function was benchmarked with a Vector{100 x Vector{100 x Vector{100 x random Int}}} as second input. masterGodbolt: https://godbolt.org/z/Kc8zM6616
PRGodbolt: https://godbolt.org/z/vK73fevsM
|
Something went wrong when running your job:
Unfortunately, the logs could not be uploaded. |
Seems a bit noisy, but it is unclear. You might want to re-run those that showed significant deltas: https://github.com/JuliaCI/NanosoldierReports/blob/master/benchmark/by_hash/c3f5381_vs_50fcb03/report.md |
@nanosoldier runbenchmarks(ALL, vs=":master") |
ae25afa
to
61e5b45
Compare
Bump! I think we can rebase this now that the Statistics.jl changes are on master |
Co-authored-by: Valentin Churavy <vchuravy@users.noreply.github.com>
61e5b45
to
21992d5
Compare
@pchintalapudi can you test if this fixes #43308? |
@nanosoldier |
Your package evaluation job has completed - possible new issues were detected. A full report can be found here. |
@nanosoldier |
Something went wrong when running your job:
|
Ah great yet another AWS failure... |
The difference between gp and gp_inbounds in #43308 should be fixed by e07c2bf, but that requires the addition of an additional DCE pass to eliminate a select undef statement. The finer difference between ge_inbounds and gp_inbounds is due to LLVM unrolling the loop by 16X for gp_inbounds but only 8X for ge_inbounds prior to SLP vectorization, which is something that is not addressed by this PR. |
74a0258
to
e07c2bf
Compare
@nanosoldier |
Your package evaluation job has completed - possible new issues were detected. A full report can be found here. |
* Add GVN and move IRCE to allow more functions to vectorize * Canonicalize arraysize(Vector, 1) to arraylen(Vector) Co-authored-by: Prem Chintalapudi <premc@csail.mit.edu> Co-authored-by: Valentin Churavy <vchuravy@users.noreply.github.com>
* Add GVN and move IRCE to allow more functions to vectorize * Canonicalize arraysize(Vector, 1) to arraylen(Vector) Co-authored-by: Prem Chintalapudi <premc@csail.mit.edu> Co-authored-by: Valentin Churavy <vchuravy@users.noreply.github.com>
This is a combination of two changes:
gep inbounds {}*, {}**
instructions to instead usegep inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }*
to get the array length.Statistics._mean(identity, Int[], :)
was completely eliminated after this change).