http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56108
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rth at gcc dot gnu.org --- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> 2013-02-19 02:15:12 UTC --- The first statement of this relaxed transaction is an inline asm: __transaction_relaxed { __asm__(""); } The problem here is we don't insert a BUILT_IN_TM_IRREVOCABLE call at the beginning of the transaction because we bypass doing so here: for (region = d->all_tm_regions; region; region = region->next) { /* If we're sure to go irrevocable, don't transform anything. */ if (d->irrevocable_blocks_normal && bitmap_bit_p (d->irrevocable_blocks_normal, region->entry_block->index)) { transaction_subcode_ior (region, GTMA_DOES_GO_IRREVOCABLE); transaction_subcode_ior (region, GTMA_MAY_ENTER_IRREVOCABLE); continue; } need_ssa_rename |= ipa_tm_transform_calls (node, region, region->entry_block, d->irrevocable_blocks_normal); } I don't understand why we explicitly bypass here. I mean, if this bypass was for TM clones, we're already handling them up-stack in the call to ipa_tm_transform_clone. Perhaps we want something like this: if (d->irrevocable_blocks_normal && bitmap_bit_p (d->irrevocable_blocks_normal, region->entry_block->index)) - { - transaction_subcode_ior (region, GTMA_DOES_GO_IRREVOCABLE); - transaction_subcode_ior (region, GTMA_MAY_ENTER_IRREVOCABLE); - continue; - } + transaction_subcode_ior (region, GTMA_DOES_GO_IRREVOCABLE); need_ssa_rename |= But it's causing: FAIL: gcc.dg/tm/memopt-1.c, which I'm investigating.