This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] PATCH to get_stmt_operands and non-GIMPLE statements
- From: Jason Merrill <jason at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 19 Aug 2003 23:01:02 -0400
- Subject: [tree-ssa] PATCH to get_stmt_operands and non-GIMPLE statements
A statement-level CALL_EXPR marked as non-GIMPLE (as a result of some
forthcoming gimplifier fixes) was causing get_stmt_operands to abort.
Diego suggested this patch.
Tested athlon-pc-linux-gnu, applied to tree-ssa.
2003-08-19 Jason Merrill <jason@redhat.com>
Diego Novillo <dnovillo@redhat.com>
* tree-dfa.c (get_stmt_operands): Just mark non-GIMPLE statements
as unmodified.
(find_referenced_vars): So we don't need to mark them here.
*** ./tree-dfa.c.~1~ Tue Aug 19 14:38:35 2003
--- ./tree-dfa.c Tue Aug 19 17:07:45 2003
*************** get_stmt_operands (tree stmt)
*** 182,195 ****
if (!stmt_modified_p (stmt))
return;
- #if defined ENABLE_CHECKING
- /* non-GIMPLE statements should not appear here. */
- if (TREE_NOT_GIMPLE (stmt))
- abort ();
- #endif
-
ann = get_stmt_ann (stmt);
/* Remove any existing operands as they will be scanned again. */
ann->ops = NULL;
--- 182,196 ----
if (!stmt_modified_p (stmt))
return;
ann = get_stmt_ann (stmt);
+ /* Non-GIMPLE statements are just marked unmodified. */
+ if (TREE_NOT_GIMPLE (stmt))
+ {
+ ann->modified = 0;
+ return;
+ }
+
/* Remove any existing operands as they will be scanned again. */
ann->ops = NULL;
*************** find_referenced_vars (tree fndecl)
*** 1794,1805 ****
if (TREE_CODE (*stmt_p) == MODIFY_EXPR
&& TREE_CODE (TREE_OPERAND (*stmt_p, 1)) == CALL_EXPR
&& TREE_NOT_GIMPLE (TREE_OPERAND (*stmt_p, 1)))
! {
! mark_not_gimple (stmt_p);
! /* Prevent get_stmt_operands() from ever dealing with this
! statement. */
! unmodify_stmt (*stmt_p);
! }
/* A CALL_EXPR may also appear inside a RETURN_EXPR. */
if (TREE_CODE (*stmt_p) == RETURN_EXPR)
--- 1795,1801 ----
if (TREE_CODE (*stmt_p) == MODIFY_EXPR
&& TREE_CODE (TREE_OPERAND (*stmt_p, 1)) == CALL_EXPR
&& TREE_NOT_GIMPLE (TREE_OPERAND (*stmt_p, 1)))
! mark_not_gimple (stmt_p);
/* A CALL_EXPR may also appear inside a RETURN_EXPR. */
if (TREE_CODE (*stmt_p) == RETURN_EXPR)
*************** find_referenced_vars (tree fndecl)
*** 1809,1820 ****
&& TREE_CODE (expr) == MODIFY_EXPR
&& TREE_CODE (TREE_OPERAND (expr, 1)) == CALL_EXPR
&& TREE_NOT_GIMPLE (TREE_OPERAND (expr, 1)))
! {
! mark_not_gimple (stmt_p);
! /* Prevent get_stmt_operands() from ever dealing with this
! statement. */
! unmodify_stmt (*stmt_p);
! }
}
if (TREE_NOT_GIMPLE (*stmt_p))
--- 1805,1811 ----
&& TREE_CODE (expr) == MODIFY_EXPR
&& TREE_CODE (TREE_OPERAND (expr, 1)) == CALL_EXPR
&& TREE_NOT_GIMPLE (TREE_OPERAND (expr, 1)))
! mark_not_gimple (stmt_p);
}
if (TREE_NOT_GIMPLE (*stmt_p))