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 <[email protected]>
* config/aarch64/aarch64-simd.md(aarch64_sub<mode>_compare0):
New pattern.
* testsuite/gcc.target/aarch64/cmp-2.c: New testcase.
pr7261.patch.patch
Description: pr7261.patch.patch
