aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-07-13 11:25:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-07-13 11:25:38 +0000
commit67fccea48da5b2a7a62f9b08acc01b254ab4c1a5 (patch)
treecfea8c49086f268aed6773db67e688b6ea2d715a
parent225398279594ff4c5a6a8a14df0375d53d8dadf9 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/match.pd4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/930326-1.c1
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;