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.