http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52173



--- Comment #14 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-21 
13:27:30 UTC ---

We have broken immediate uses of .MEM_2 (for example).  Before update-ssa:



main ()

{

  int a.1;

  int a.0;

  int i;



  <bb 2>:



  <bb 8>:

  # i_10 = PHI <0(2)>

  # .MEM_11 = PHI <.MEM_3(D)(2)>



  <bb 9>:

  # .MEM_4 = VDEF <.MEM_2>

  __transaction_atomic  // SUBCODE=[ GTMA_HAVE_LOAD GTMA_HAVE_STORE ]

...

  <bb 3>:

  # .MEM_12 = VDEF <.MEM_2>

  __transaction_atomic  // SUBCODE=[ GTMA_HAVE_LOAD GTMA_HAVE_STORE ]

...

  <bb 7>:

  # VUSE <.MEM_2>

  return 0;



but debug_immediate_uses shows:



.MEM_2 : -->2 uses.

# VUSE <.MEM_2>

return 0;

# .MEM_12 = VDEF <.MEM_2>

__transaction_atomic  // SUBCODE=[ GTMA_HAVE_LOAD GTMA_HAVE_STORE ]



that means that update_stmt didn't do its job or it wasn't called.



Aahhhh.  Because in gimple_copy:



  /* Make copy of operands.  */

  if (num_ops > 0)

    {

...

      /* SSA operands need to be updated.  */

      gimple_set_modified (copy, true);

    }



there are zero (real) operands but we _do_ have virtual ops.

Reply via email to