[Bug target/104375] New: [x86] Failure to recognize bzhi patter nwhen shr is present

gabravier at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Feb 3 23:17:59 GMT 2022


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

            Bug ID: 104375
           Summary: [x86] Failure to recognize bzhi patter nwhen shr is
                    present
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gabravier at gmail dot com
  Target Milestone: ---

#include <stdint.h>

uint64_t bextr_u64(uint64_t w, unsigned off, unsigned int len)
{
        return (w >> off) & ((1U << len) - 1U);
}

With -mbmi2, this can be optimized to using shrx followed by bzhi. This
transformation is done by LLVM, but not by GCC.


PS: Even in the case where the shr is removed and thus the bzhi pattern is
recognized (e.g. `return w & ((1U << len) - 1U);`), it is still not compiled
optimally as it for some reason decides to put the result of the bzhi in an
intermediary register before moving it to eax.


More information about the Gcc-bugs mailing list