https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118544
Bug ID: 118544 Summary: -fopt-info misreports unroll factor when using #pragma GCC unroll Product: gcc Version: 15.0 URL: https://godbolt.org/z/x1eb65jWf Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: tiborgyri at gmail dot com CC: tiborgyri at gmail dot com Target Milestone: --- Created attachment 60202 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60202&action=edit Test case -Wall -Wextra -Ofast -std=c++20 -march=znver3 -gno-as-loc-support Partially unrolling a loop with #pragma GCC unroll results in an "optimization passed" message that misreports the unroll factor. For example #pragma GCC unroll(2) results in this message "loop unrolled 1 times". This is misleading since GCC has correctly unrolled the loop by a factor of 2, as requested by the user. The number reported in the opt-info message is consistently 1 lower than the requested (and actual) unroll factor. Another manifestation of this, is when the requested unroll factor is 1 lower than the loop iteration count. For example, if a loop has 6 iterations, #pragma GCC unroll(5) results in the following message: "loop with 5 iterations completely unrolled" This is confusing, given that the the loop has 6 iterations, not 5. The only time this opt-info message is correct, is when the requested unroll factor is >= the total number of iterations, in which case GCC correctly reports that the loop was completely unrolled. I imagine that some other pass that does not emit opt-info messages unrolls 1 iteration, hence the confusing messages. See: https://godbolt.org/z/x1eb65jWf