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

            Bug ID: 94026
           Summary: combine missed opportunity to simplify comparisons
                    with zero
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: felix.yang at huawei dot com
  Target Milestone: ---

Created attachment 47966
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47966&action=edit
proposed patch to fix this issue

Simple test case:
int
foo (int c, int d)
{
  int a = (c >> d) & 7;

  if (a >= 2) {
    return 1;
  }

  return 0;
}

Compile option: gcc -S -O2 test.c


On aarch64, GCC trunk emits 4 instrunctions:
        asr     w0, w0, 8
        tst     w0, 6
        cset    w0, ne
        ret

which can be further simplified into:
        tst     x0, 1536
        cset    w0, ne
        ret

We see the same issue on other targets such as i386 and x86-64.

Attached please find proposed patch for this issue.

Reply via email to