aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2017-01-09 09:42:10 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2017-01-09 09:42:10 +0000
commitc0d4fec75c36e60c0305c585310a8feb89a04a1d (patch)
treeee9556bdb0ca884aec86d32c63e6f09005166501
parent7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304 (diff)
downloadgcc-c0d4fec75c36e60c0305c585310a8feb89a04a1d.zip
gcc-c0d4fec75c36e60c0305c585310a8feb89a04a1d.tar.gz
gcc-c0d4fec75c36e60c0305c585310a8feb89a04a1d.tar.bz2
[tree-ssa-address] Avoid creating non-canonical RTL in gen_addr_rtx
* tree-ssa-address.c (gen_addr_rtx): Don't handle index if it is const0_rtx. * gcc.dg/20161219.c: New test. From-SVN: r244219
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/20161219.c30
-rw-r--r--gcc/tree-ssa-address.c2
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 96f3c2e..540c2bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * tree-ssa-address.c (gen_addr_rtx): Don't handle index if it
+ is const0_rtx.
+
2017-01-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/78997
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 053d2cf..14e24a8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-01-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * gcc.dg/20161219.c: New test.
+
2017-01-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/78997
diff --git a/gcc/testsuite/gcc.dg/20161219.c b/gcc/testsuite/gcc.dg/20161219.c
new file mode 100644
index 0000000..93ea8d2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20161219.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble } */
+/* { dg-options "-O1 -w" } */
+
+static long long a[9];
+int b, c, d, e, g;
+
+static int
+fn1 (int *p1)
+{
+ b = 1;
+ for (; b >= 0; b--)
+ {
+ d = 0;
+ for (;; d++)
+ {
+ e && (a[d] = 0);
+ if (*p1)
+ break;
+ c = (int) a;
+ }
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ int f = fn1 ((int *) f);
+ return f;
+}
diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c
index 3e3cad1..8d46a3e 100644
--- a/gcc/tree-ssa-address.c
+++ b/gcc/tree-ssa-address.c
@@ -115,7 +115,7 @@ gen_addr_rtx (machine_mode address_mode,
if (offset_p)
*offset_p = NULL;
- if (index)
+ if (index && index != const0_rtx)
{
act_elem = index;
if (step)