https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107671
Bug ID: 107671 Summary: i386: Missed optimization: use of bt in bit test pattern when LHS is an array index Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: ibuclaw at gdcproject dot org Target Milestone: --- int bt32_setb(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum) { return ((p[bitnum >> 5] & (1 << (bitnum & 31)))) != 0; } int bt64_setb(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum) { return ((p[bitnum >> 6] & (1L << (bitnum & 63)))) != 0; } int bt32_setb2(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum) { return (p[bitnum >> 5] >> (bitnum & 31)) & 1; } int bt64_setb2(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum) { return (p[bitnum >> 6] >> (bitnum & 63)) & 1; } int bt32_setae(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum) { return ((p[bitnum >> 5] & (1 << (bitnum & 31)))) == 0; } int bt64_setae(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum) { return ((p[bitnum >> 6] & (1L << (bitnum & 63)))) == 0; } int bt32_setae2(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum) { return !((p[bitnum >> 5] >> (bitnum & 31)) & 1); } int bt64_setae2(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum) { return !((p[bitnum >> 6] >> (bitnum & 63)) & 1); }