[Bug tree-optimization/96187] New: GCC at -O2 generates branch for code that should be branch-free

philip.zander at googlemail dot com gcc-bugzilla@gcc.gnu.org
Mon Jul 13 15:13:52 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96187

            Bug ID: 96187
           Summary: GCC at -O2 generates branch for code that should be
                    branch-free
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: philip.zander at googlemail dot com
  Target Milestone: ---

Created attachment 48870
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48870&action=edit
Test case

The attached code contains two related functions, get_length2() and
get_length4(). For get_length4(), GCC generates branch-free instructions as
expected, but for get_length2() it introduces a branch, which is unfortunate
because the code was specifically written to avoid branches. The target is
x86_64.

You can compare the output here: https://godbolt.org/z/bhEzhY

This happens only at -O2, not at -O1 or -O3. It seems to have started with GCC
7, as GCC 6.* is the last version on Compiler Explorer that generates
branch-free code for both functions.

PS: I hope "tree-optimization" is the right component, I'm not a compiler
expert. If the problem lies elsewhere, please edit my report.


More information about the Gcc-bugs mailing list