diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2017-01-09 09:42:10 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2017-01-09 09:42:10 +0000 |
commit | c0d4fec75c36e60c0305c585310a8feb89a04a1d (patch) | |
tree | ee9556bdb0ca884aec86d32c63e6f09005166501 /gcc | |
parent | 7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20161219.c | 30 | ||||
-rw-r--r-- | gcc/tree-ssa-address.c | 2 |
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) |