re PR tree-optimization/69167 (internal compiler error: SSA corruption)

PR tree-optimization/69167
        * gimple-fold.c (replace_stmt_with_simplification): Also punt if
	new SSA_NAME_OCCURS_IN_ABNORMAL_PHI SSA_NAMEs appear in operands of
	ops[0] comparison.
	* gimple-match-head.c (maybe_push_res_to_seq): Likewise.

	* gcc.dg/pr69167.c: New test.

From-SVN: r232178
This commit is contained in:
Jakub Jelinek 2016-01-08 21:50:24 +01:00
parent bd8f5bb297
commit e0237993b6
5 changed files with 53 additions and 5 deletions

View File

@ -1,5 +1,13 @@
2016-01-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/69167
* gimple-fold.c (replace_stmt_with_simplification): Also punt if
new SSA_NAME_OCCURS_IN_ABNORMAL_PHI SSA_NAMEs appear in operands of
ops[0] comparison.
* gimple-match-head.c (maybe_push_res_to_seq): Likewise.
2016-01-08 Alan Lawrence <alan.lawrence@arm.com>
Richard Biener <rguenther@suse.de>
Richard Biener <rguenther@suse.de>
PR tree-optimization/68707
* tree-vect-slp.c (vect_analyze_slp_instance): Cancel permuted SLP

View File

@ -3309,7 +3309,14 @@ replace_stmt_with_simplification (gimple_stmt_iterator *gsi,
|| (ops[2]
&& TREE_CODE (ops[2]) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ops[2])
&& !has_use_on_stmt (ops[2], stmt)))
&& !has_use_on_stmt (ops[2], stmt))
|| (COMPARISON_CLASS_P (ops[0])
&& ((TREE_CODE (TREE_OPERAND (ops[0], 0)) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (TREE_OPERAND (ops[0], 0))
&& !has_use_on_stmt (TREE_OPERAND (ops[0], 0), stmt))
|| (TREE_CODE (TREE_OPERAND (ops[0], 1)) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (TREE_OPERAND (ops[0], 1))
&& !has_use_on_stmt (TREE_OPERAND (ops[0], 1), stmt)))))
return false;
/* Don't insert new statements when INPLACE is true, even if we could

View File

@ -299,7 +299,14 @@ maybe_push_res_to_seq (code_helper rcode, tree type, tree *ops,
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ops[1]))
|| (ops[2]
&& TREE_CODE (ops[2]) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ops[2])))
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ops[2]))
|| (COMPARISON_CLASS_P (ops[0])
&& ((TREE_CODE (TREE_OPERAND (ops[0], 0)) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (TREE_OPERAND (ops[0],
0)))
|| (TREE_CODE (TREE_OPERAND (ops[0], 1)) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (TREE_OPERAND (ops[0],
1))))))
return NULL_TREE;
if (!res)
{

View File

@ -1,3 +1,8 @@
2016-01-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/69167
* gcc.dg/pr69167.c: New test.
2016-01-08 Marek Polacek <polacek@redhat.com>
PR c++/68449
@ -137,9 +142,9 @@
* g++.dg/pr68991-1.C: New test.
* g++.dg/pr68991-2.C: Likewise.
2016-01-05 Sergei Trofimovich <siarheit@google.com>
2016-01-05 Sergei Trofimovich <siarheit@google.com>
PR other/60465
PR other/60465
* gcc.target/ia64/pr60465-gprel64.c: New test.
* gcc.target/ia64/pr60465-gprel64-c37.c: New test.

View File

@ -0,0 +1,21 @@
/* PR tree-optimization/69167 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
int sigsetjmp (char *);
void foo ();
void bar (void (*) (int *));
extern char t[];
void
baz (int *x)
{
int *a = x;
foo ();
x = 0;
if (sigsetjmp (t))
while (1)
bar (a ? baz : 0);
if (x)
foo ();
}