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.

Reply via email to