re PR tree-optimization/63748 (wrong may be used uninitialized warning (abnormal edges))
2014-11-10 Patrick Palka <ppalka@gcc.gnu.org> gcc/ PR middle-end/63748 * tree-ssa-propagate.c (may_propagate_copy): Allow propagating SSA copies whose source and destination names both occur in abnormal PHIs. gcc/testsuite/ PR middle-end/63748 * gcc.dg/pr63748.c: New testcase. From-SVN: r217317
This commit is contained in:
parent
3bbddc8e44
commit
c7488fba45
4 changed files with 63 additions and 12 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-11-10 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
PR middle-end/63748
|
||||
* tree-ssa-propagate.c (may_propagate_copy): Allow propagating
|
||||
SSA copies whose source and destination names both occur in
|
||||
abnormal PHIs.
|
||||
|
||||
2014-11-10 Roman Gareev <gareevroman@gmail.com>
|
||||
|
||||
* Makefile.in: Remove the compilation of graphite-clast-to-gimple.o.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-11-10 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
PR middle-end/63748
|
||||
* gcc.dg/pr63748.c: New testcase.
|
||||
|
||||
2014-11-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* gcc.dg/pr44194-1.c (dg-do): Add missing braces.
|
||||
|
|
36
gcc/testsuite/gcc.dg/pr63748.c
Normal file
36
gcc/testsuite/gcc.dg/pr63748.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wall" } */
|
||||
|
||||
#include <setjmp.h>
|
||||
|
||||
jmp_buf *alloc_jmp_buf ();
|
||||
int foo (void *);
|
||||
|
||||
int
|
||||
test (int op, int noside)
|
||||
{
|
||||
void *argvec = 0;
|
||||
|
||||
if (op)
|
||||
{
|
||||
jmp_buf *buf = alloc_jmp_buf (); /* { dg-bogus "uninitialized" } */
|
||||
setjmp (*buf);
|
||||
|
||||
if (noside)
|
||||
goto nosideret;
|
||||
|
||||
do_call_it:
|
||||
|
||||
if (noside)
|
||||
goto nosideret;
|
||||
|
||||
return foo (argvec);
|
||||
}
|
||||
|
||||
argvec = __builtin_alloca (1);
|
||||
goto do_call_it;
|
||||
|
||||
nosideret:
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -1275,21 +1275,24 @@ may_propagate_copy (tree dest, tree orig)
|
|||
tree type_d = TREE_TYPE (dest);
|
||||
tree type_o = TREE_TYPE (orig);
|
||||
|
||||
/* If ORIG flows in from an abnormal edge, it cannot be propagated. */
|
||||
/* If ORIG is a default definition which flows in from an abnormal edge
|
||||
then the copy can be propagated. It is important that we do so to avoid
|
||||
uninitialized copies. */
|
||||
if (TREE_CODE (orig) == SSA_NAME
|
||||
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig)
|
||||
/* If it is the default definition and an automatic variable then
|
||||
we can though and it is important that we do to avoid
|
||||
uninitialized regular copies. */
|
||||
&& !(SSA_NAME_IS_DEFAULT_DEF (orig)
|
||||
&& (SSA_NAME_VAR (orig) == NULL_TREE
|
||||
|| TREE_CODE (SSA_NAME_VAR (orig)) == VAR_DECL)))
|
||||
&& SSA_NAME_IS_DEFAULT_DEF (orig)
|
||||
&& (SSA_NAME_VAR (orig) == NULL_TREE
|
||||
|| TREE_CODE (SSA_NAME_VAR (orig)) == VAR_DECL))
|
||||
;
|
||||
/* Otherwise if ORIG just flows in from an abnormal edge then the copy cannot
|
||||
be propagated. */
|
||||
else if (TREE_CODE (orig) == SSA_NAME
|
||||
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig))
|
||||
return false;
|
||||
|
||||
/* If DEST is an SSA_NAME that flows from an abnormal edge, then it
|
||||
cannot be replaced. */
|
||||
if (TREE_CODE (dest) == SSA_NAME
|
||||
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
|
||||
/* Similarly if DEST flows in from an abnormal edge then the copy cannot be
|
||||
propagated. */
|
||||
else if (TREE_CODE (dest) == SSA_NAME
|
||||
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
|
||||
return false;
|
||||
|
||||
/* Do not copy between types for which we *do* need a conversion. */
|
||||
|
|
Loading…
Add table
Reference in a new issue