From 5f4cebba260db0f1b1edf45152be3bad2ed779a8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 4 Nov 2016 20:14:07 +0100 Subject: [PATCH] re PR target/77834 (ICE: in make_decl_rtl, at varasm.c:1311 with -O -ftree-pre -mstringop-strategy=libcall) PR target/77834 * alias.c (nonoverlapping_memrefs_p): Return 0 if exprx or expry doesn't have rtl set. * gcc.dg/pr77834.c: New test. From-SVN: r241859 --- gcc/ChangeLog | 6 ++++++ gcc/alias.c | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr77834.c | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr77834.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d062157..7e4a50d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-04 Jakub Jelinek + + PR target/77834 + * alias.c (nonoverlapping_memrefs_p): Return 0 if exprx or expry + doesn't have rtl set. + 2016-11-04 Bill Schmidt * config/rs6000/rs6000.c (gimple-ssa.h): New #include. diff --git a/gcc/alias.c b/gcc/alias.c index ca475ff..fd3dec4 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2755,6 +2755,13 @@ nonoverlapping_memrefs_p (const_rtx x, const_rtx y, bool loop_invariant) || TREE_CODE (expry) == CONST_DECL) return 1; + /* If either of the decls doesn't have DECL_RTL set (e.g. marked as + living in multiple places), we can't tell anything. Exception + are FUNCTION_DECLs for which we can create DECL_RTL on demand. */ + if ((!DECL_RTL_SET_P (exprx) && TREE_CODE (exprx) != FUNCTION_DECL) + || (!DECL_RTL_SET_P (expry) && TREE_CODE (expry) != FUNCTION_DECL)) + return 0; + rtlx = DECL_RTL (exprx); rtly = DECL_RTL (expry); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eae75f1..4ca326b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-11-04 Jakub Jelinek + + PR target/77834 + * gcc.dg/pr77834.c: New test. + 2016-11-04 Paolo Carlini PR c++/67980 diff --git a/gcc/testsuite/gcc.dg/pr77834.c b/gcc/testsuite/gcc.dg/pr77834.c new file mode 100644 index 0000000..a9085b9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr77834.c @@ -0,0 +1,18 @@ +/* PR target/77834 */ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-pre -Wno-psabi" } */ +/* { dg-additional-options "-mstringop-strategy=libcall" { target i?86-*-* x86_64-*-* } } */ + +typedef int V __attribute__ ((vector_size (64))); + +V +foo (V u, V v, int w) +{ + do + { + if (u[0]) v ^= u[w]; + } + while ((V) { 0, u[w] }[1]); + u = (V) { v[v[0]], u[u[0]] }; + return v + u; +} -- 2.7.4