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

            Bug ID: 101252
           Summary: Optimize (b ? i % C0 : i % C1) into i & (b ? C0-1 :
                    C1-1) for power of 2 C0 and C1
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: antoshkka at gmail dot com
  Target Milestone: ---

Consider the following code

bool test_naive0(bool b, short i) {
    return (b ? i % 4 : i % 16)==0;
}

It could be optimized into

bool test_optim0(bool b, short i) {
    return (i & (b ? 15 : 3))==0;
}


Godbolt playground: https://godbolt.org/z/8vj999M3c

P.S.: Inspired by the manual optimizations in libstdc++
https://github.com/gcc-mirror/gcc/commit/b92d12d3fe3f1aa56d190d960e40c62869a6cfbb

Reply via email to