diff options
author | Richard Biener <rguenther@suse.de> | 2018-07-13 11:25:38 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-07-13 11:25:38 +0000 |
commit | 67fccea48da5b2a7a62f9b08acc01b254ab4c1a5 (patch) | |
tree | cfea8c49086f268aed6773db67e688b6ea2d715a | |
parent | 225398279594ff4c5a6a8a14df0375d53d8dadf9 (diff) | |
download | gcc-67fccea48da5b2a7a62f9b08acc01b254ab4c1a5.zip gcc-67fccea48da5b2a7a62f9b08acc01b254ab4c1a5.tar.gz gcc-67fccea48da5b2a7a62f9b08acc01b254ab4c1a5.tar.bz2 |
re PR middle-end/85974 (Failure to optimize difference of two pointers into a compile time constant)
2018-07-13 Richard Biener <rguenther@suse.de>
PR middle-end/85974
* match.pd (addr1 - addr2): Allow either of the operand to
have a conversion.
* gcc.c-torture/compile/930326-1.c: Adjust to cover widening.
From-SVN: r262632
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/match.pd | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/930326-1.c | 1 |
4 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3f70e46..2ca3333 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-13 Richard Biener <rguenther@suse.de> + + PR middle-end/85974 + * match.pd (addr1 - addr2): Allow either of the operand to + have a conversion. + 2018-07-13 Tom de Vries <tdevries@suse.de> * tree-inline.c (remap_ssa_name): Save and reuse debug exprs generated diff --git a/gcc/match.pd b/gcc/match.pd index 1a8ad44..730bbab 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1673,14 +1673,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (ptr_difference_const (@0, @1, &diff)) { build_int_cst_type (type, diff); })))) (simplify - (pointer_diff (convert?@2 ADDR_EXPR@0) (convert?@3 @1)) + (pointer_diff (convert?@2 ADDR_EXPR@0) (convert1?@3 @1)) (if (tree_nop_conversion_p (TREE_TYPE(@2), TREE_TYPE (@0)) && tree_nop_conversion_p (TREE_TYPE(@3), TREE_TYPE (@1))) (with { poly_int64 diff; } (if (ptr_difference_const (@0, @1, &diff)) { build_int_cst_type (type, diff); })))) (simplify - (pointer_diff (convert?@2 @0) (convert?@3 ADDR_EXPR@1)) + (pointer_diff (convert?@2 @0) (convert1?@3 ADDR_EXPR@1)) (if (tree_nop_conversion_p (TREE_TYPE(@2), TREE_TYPE (@0)) && tree_nop_conversion_p (TREE_TYPE(@3), TREE_TYPE (@1))) (with { poly_int64 diff; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0dcc3b4..7b9627f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-07-13 Richard Biener <rguenther@suse.de> + + PR middle-end/85974 + * gcc.c-torture/compile/930326-1.c: Adjust to cover widening. + 2018-07-13 Tom de Vries <tdevries@suse.de> * gcc.dg/guality/clztest.c: Add -fno-ipa-icf in dg-options. diff --git a/gcc/testsuite/gcc.c-torture/compile/930326-1.c b/gcc/testsuite/gcc.c-torture/compile/930326-1.c index 97313d8..74f4ef6 100644 --- a/gcc/testsuite/gcc.c-torture/compile/930326-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/930326-1.c @@ -4,3 +4,4 @@ struct } s; long i = s.f-&s.b; +long long j = s.f-&s.b; |