Allow conversions in X/[ex]4 < Y/[ex]4
2019-06-11 Marc Glisse <marc.glisse@inria.fr> gcc/ * match.pd (X/[ex]4<Y/[ex]4): Handle conversions. gcc/testsuite/ * gcc.dg/tree-ssa/cmpexactdiv-5.c: New file. From-SVN: r272158
This commit is contained in:
parent
d3786ebbb0
commit
9adfa8e25f
4 changed files with 38 additions and 4 deletions
|
@ -1,3 +1,7 @@
|
|||
2019-06-11 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* match.pd (X/[ex]4<Y/[ex]4): Handle conversions.
|
||||
|
||||
2019-06-11 Matthew Beliveau <mbelivea@redhat.com>
|
||||
|
||||
PR c++/90449 - add -Winaccessible-base option.
|
||||
|
|
23
gcc/match.pd
23
gcc/match.pd
|
@ -1503,11 +1503,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
|||
/* X / 4 < Y / 4 iff X < Y when the division is known to be exact. */
|
||||
(for cmp (simple_comparison)
|
||||
(simplify
|
||||
(cmp (exact_div @0 INTEGER_CST@2) (exact_div @1 @2))
|
||||
(if (wi::gt_p (wi::to_wide (@2), 0, TYPE_SIGN (TREE_TYPE (@2))))
|
||||
(cmp @0 @1)
|
||||
(cmp (convert?@3 (exact_div @0 INTEGER_CST@2)) (convert? (exact_div @1 @2)))
|
||||
(if (element_precision (@3) >= element_precision (@0)
|
||||
&& types_match (@0, @1))
|
||||
(if (wi::lt_p (wi::to_wide (@2), 0, TYPE_SIGN (TREE_TYPE (@2))))
|
||||
(cmp @1 @0)))))
|
||||
(if (!TYPE_UNSIGNED (TREE_TYPE (@3)))
|
||||
(cmp @1 @0)
|
||||
(if (tree_expr_nonzero_p (@0) && tree_expr_nonzero_p (@1))
|
||||
(with
|
||||
{
|
||||
tree utype = unsigned_type_for (TREE_TYPE (@0));
|
||||
}
|
||||
(cmp (convert:utype @1) (convert:utype @0)))))
|
||||
(if (wi::gt_p (wi::to_wide (@2), 1, TYPE_SIGN (TREE_TYPE (@2))))
|
||||
(if (TYPE_UNSIGNED (TREE_TYPE (@0)) || !TYPE_UNSIGNED (TREE_TYPE (@3)))
|
||||
(cmp @0 @1)
|
||||
(with
|
||||
{
|
||||
tree utype = unsigned_type_for (TREE_TYPE (@0));
|
||||
}
|
||||
(cmp (convert:utype @0) (convert:utype @1)))))))))
|
||||
|
||||
/* X / C1 op C2 into a simple range test. */
|
||||
(for cmp (simple_comparison)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2019-06-11 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* gcc.dg/tree-ssa/cmpexactdiv-5.c: New file.
|
||||
|
||||
2019-06-11 Matthew Beliveau <mbelivea@redhat.com>
|
||||
|
||||
PR c++/90449 - add -Winaccessible-base option.
|
||||
|
|
11
gcc/testsuite/gcc.dg/tree-ssa/cmpexactdiv-5.c
Normal file
11
gcc/testsuite/gcc.dg/tree-ssa/cmpexactdiv-5.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -fdump-tree-optimized-raw" } */
|
||||
|
||||
int f(int *a, int *b, int *c){
|
||||
if(sizeof(__SIZE_TYPE__) != sizeof(__PTRDIFF_TYPE__)) return 2;
|
||||
__SIZE_TYPE__ s = b - a;
|
||||
__SIZE_TYPE__ t = c - a;
|
||||
return s < t;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-not "exact_div_expr" "optimized" } } */
|
Loading…
Add table
Reference in a new issue