This patch improves code generation for relational compares against zero that 
are not merged into a subtract instruction. This patch improves the >= and < 
cases.

An example of the '<' case:

int lt (int x, int y)
{
  if ((x - y) < 0)
    return 10;

  return 0;
}

Trunk generates:

lt:
        sub     w1, w0, w1
        mov     w0, 10
        cmp     w1, 0
        csel    w0, w0, wzr, lt
        ret

With the patch we can eliminate the redundant subtract and now generate:

lt:
        cmp     w0, w1
        mov     w0, 10
        csel    w0, w0, wzr, mi
        ret

Bootstrapped and tested on aarch64-linux-gnu. Okay for trunk?

2017-06-01  Michael Collison  <michael.colli...@arm.com>

        * config/aarch64/aarch64-simd.md(aarch64_sub<mode>_compare0):
        New pattern.
        * testsuite/gcc.target/aarch64/cmp-2.c: New testcase.

Attachment: pr7261.patch.patch
Description: pr7261.patch.patch

Reply via email to