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.
pr7261.patch.patch
Description: pr7261.patch.patch