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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-08-21
                 CC|                            |jakub at gcc dot gnu.org
   Target Milestone|---                         |5.0
            Summary|ICE with LTO on valid code  |[5 Regression] ICE with LTO
                   |on x86_64-linux-gnu         |on valid code on
                   |                            |x86_64-linux-gnu
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Interesting - we have a gimple_assign in the BBs PHI sequence after the first
reassoc pass, created via

static bool
update_range_test (struct range_entry *range, struct range_entry *otherrange,
                   unsigned int count, enum tree_code opcode,
                   vec<operand_entry_t> *ops, tree exp, bool in_p,
                   tree low, tree high, bool strict_overflow_p)
{
...
  gsi = gsi_for_stmt (stmt);
  /* In rare cases range->exp can be equal to lhs of stmt.
     In that case we have to insert after the stmt rather then before
     it.  */
  if (op == range->exp)
    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
                                    GSI_CONTINUE_LINKING);

where 'stmt' is a PHI node got via SSA_NAME_DEF_STMT (op).

But "after" the PHI is at the beginning of the BB.

Probably the condition we are trying to apply some magic to leads to
a critical edge which isn't handled well here?

Sth for Jakub, not really LTO related.

Reply via email to