[Bug middle-end/64353] [5 Regression] ICE: in execute_todo, at passes.c:1986

enkovich.gnu at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Jan 12 15:36:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64353

Ilya Enkovich <enkovich.gnu at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |enkovich.gnu at gmail dot com

--- Comment #5 from Ilya Enkovich <enkovich.gnu at gmail dot com> ---
When we process function C::xx early_ipa_sra pass performs a modification of
C::i in ipa_modify_call_arguments adding a load statements.  It marks function
C::i as requiring ssa renaming for vops.  Later we start processing of C::i and
get ICE at execute_todo (pass->todo_flags_start) because it expects update ssa
flags for functions requiring such update.

Before r217125 it worked because C::i was not in SSA form at the moment of load
insertion.

To fix it we may either call update_ssa from ipa_modify_call_arguments or add
update into todo_flags_start of fixup_cfg (we run it at the beginning of all
gimple passes lists anyway).

Possible fix (helps for the test, not fully tested):

diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 01f4111..533dcfe 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -4054,6 +4054,8 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gcall
*stmt,
                    expr = create_tmp_reg (TREE_TYPE (expr));
                  gimple_assign_set_lhs (tem, expr);
                  gsi_insert_before (&gsi, tem, GSI_SAME_STMT);
+                 if (gimple_in_ssa_p (cfun))
+                   update_ssa (TODO_update_ssa_only_virtuals);
                }
            }
          else



More information about the Gcc-bugs mailing list