Commit 5f4cebba by Jakub Jelinek Committed by Jakub Jelinek

re PR target/77834 (ICE: in make_decl_rtl, at varasm.c:1311 with -O -ftree-pre…

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
parent 6e3ae7e6
2016-11-04 Jakub Jelinek <jakub@redhat.com>
PR target/77834
* alias.c (nonoverlapping_memrefs_p): Return 0 if exprx or expry
doesn't have rtl set.
2016-11-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com> 2016-11-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (gimple-ssa.h): New #include. * config/rs6000/rs6000.c (gimple-ssa.h): New #include.
...@@ -2755,6 +2755,13 @@ nonoverlapping_memrefs_p (const_rtx x, const_rtx y, bool loop_invariant) ...@@ -2755,6 +2755,13 @@ nonoverlapping_memrefs_p (const_rtx x, const_rtx y, bool loop_invariant)
|| TREE_CODE (expry) == CONST_DECL) || TREE_CODE (expry) == CONST_DECL)
return 1; 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); rtlx = DECL_RTL (exprx);
rtly = DECL_RTL (expry); rtly = DECL_RTL (expry);
......
2016-11-04 Jakub Jelinek <jakub@redhat.com>
PR target/77834
* gcc.dg/pr77834.c: New test.
2016-11-04 Paolo Carlini <paolo.carlini@oracle.com> 2016-11-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67980 PR c++/67980
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment