[simplify-rtx] (GTU (PLUS a C) (C - 1)) --> (LTU a -C)
* simplify-rtx.c (simplify_relational_operation_1): Add transformation (GTU (PLUS a C) (C - 1)) --> (LTU a -C). * gcc.target/aarch64/gtu_to_ltu_cmp_1.c: New test. * gcc.target/aarch64/gtu_to_ltu_cmp_2.c: New test. From-SVN: r240238
This commit is contained in:
parent
ee1ab3e3c2
commit
5fa9e6441f
|
@ -1,3 +1,8 @@
|
|||
2016-09-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* simplify-rtx.c (simplify_relational_operation_1): Add transformation
|
||||
(GTU (PLUS a C) (C - 1)) --> (LTU a -C).
|
||||
|
||||
2016-09-19 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* target.def (lra_p): Wordsmithing.
|
||||
|
|
|
@ -4650,6 +4650,19 @@ simplify_relational_operation_1 (enum rtx_code code, machine_mode mode,
|
|||
cmp_mode, XEXP (op0, 0), new_cmp);
|
||||
}
|
||||
|
||||
/* (GTU (PLUS a C) (C - 1)) where C is a non-zero constant can be
|
||||
transformed into (LTU a -C). */
|
||||
if (code == GTU && GET_CODE (op0) == PLUS && CONST_INT_P (op1)
|
||||
&& CONST_INT_P (XEXP (op0, 1))
|
||||
&& (UINTVAL (op1) == UINTVAL (XEXP (op0, 1)) - 1)
|
||||
&& XEXP (op0, 1) != const0_rtx)
|
||||
{
|
||||
rtx new_cmp
|
||||
= simplify_gen_unary (NEG, cmp_mode, XEXP (op0, 1), cmp_mode);
|
||||
return simplify_gen_relational (LTU, mode, cmp_mode,
|
||||
XEXP (op0, 0), new_cmp);
|
||||
}
|
||||
|
||||
/* Canonicalize (LTU/GEU (PLUS a b) b) as (LTU/GEU (PLUS a b) a). */
|
||||
if ((code == LTU || code == GEU)
|
||||
&& GET_CODE (op0) == PLUS
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-09-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* gcc.target/aarch64/gtu_to_ltu_cmp_1.c: New test.
|
||||
* gcc.target/aarch64/gtu_to_ltu_cmp_2.c: New test.
|
||||
|
||||
2016-09-19 Jakub Jelinek <jakub@redhat.com>
|
||||
Jan Hubicka <jh@suse.cz>
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
int
|
||||
f1 (int x, int t)
|
||||
{
|
||||
if (x == -1 || x == -2)
|
||||
t = 1;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-times "cmn\\tw\[0-9\]+, #2" 1 } } */
|
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
unsigned int
|
||||
foo (unsigned int a, unsigned int b)
|
||||
{
|
||||
return (a + 10) > 9;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-times "cmn\\tw\[0-9\]+" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "add\\tw\[0-9\]+" } } */
|
Loading…
Reference in New Issue