diff options
author | Felix Yang <felix.yang@huawei.com> | 2014-12-16 14:58:03 +0000 |
---|---|---|
committer | Fei Yang <fyang@gcc.gnu.org> | 2014-12-16 14:58:03 +0000 |
commit | cc75dc899e40ba3ea2d6f7532a472978c0e65b80 (patch) | |
tree | 3ee45c95e7b1169b6fc197d4a5c5dac52a18ff00 | |
parent | 5007f79810c5192d217be89256cef2fc9b9989ce (diff) | |
download | gcc-cc75dc899e40ba3ea2d6f7532a472978c0e65b80.zip gcc-cc75dc899e40ba3ea2d6f7532a472978c0e65b80.tar.gz gcc-cc75dc899e40ba3ea2d6f7532a472978c0e65b80.tar.bz2 |
re PR target/64240 ([AArch64] SMS-3.c causes runtime exception(segfault).)
+ PR rtl-optimization/64240
+ * ddg.c (mark_mem_use): Check *iter instead of *x.
From-SVN: r218780
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ddg.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/sms-12.c | 43 |
4 files changed, 54 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff5a146..4b134ad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-12-16 Felix Yang <felix.yang@huawei.com> + + PR rtl-optimization/64240 + * ddg.c (mark_mem_use): Check *iter instead of *x. + 2014-12-16 Martin Liska <mliska@suse.cz> PR ipa/64278 @@ -77,7 +77,7 @@ mark_mem_use (rtx *x, void *) { subrtx_iterator::array_type array; FOR_EACH_SUBRTX (iter, array, *x, NONCONST) - if (MEM_P (*x)) + if (MEM_P (*iter)) { mem_ref_p = true; break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0034d0a..47565a2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-12-16 Felix Yang <felix.yang@huawei.com> + + PR rtl-optimization/64240 + * gcc.dg/sms-12.c: New test. + 2014-12-16 Janus Weil <janus@gcc.gnu.org> PR fortran/64244 diff --git a/gcc/testsuite/gcc.dg/sms-12.c b/gcc/testsuite/gcc.dg/sms-12.c new file mode 100644 index 0000000..23cff3b --- /dev/null +++ b/gcc/testsuite/gcc.dg/sms-12.c @@ -0,0 +1,43 @@ +/* { dg-do run } */ +/* { dg-skip-if "" { ! { aarch64*-*-* } } { "*" } { "" } } */ +/* { dg-options "-O2 -fmodulo-sched -funroll-loops -fdump-rtl-sms --param sms-min-sc=1 -fmodulo-sched-allow-regmoves -fPIC" } */ + +extern void abort (void); + +int X[1000]={0}; +int Y[1000]={0}; + +extern void abort (void); + +__attribute__ ((noinline)) +int +foo (int len, long a) +{ + int i; + long res = a; + + len = 1000; + for (i = 0; i < len; i++) + res += X[i]* Y[i]; + + if (res != 601) + abort (); + +} + +int +main () +{ + X[0] = Y[1] = 2; + Y[0] = X[1] = 21; + X[2] = Y[3] = 3; + Y[2] = X[3] = 31; + X[4] = Y[5] = 4; + Y[4] = X[5] = 41; + + foo (6, 3); + return 0; +} + +/* { dg-final { cleanup-rtl-dump "sms" } } */ + |