On 2012-11-01 07:31, Aldy Hernandez wrote:
> +           // Hmmm, the front-end should have caught outer aborts without
> +           // an outer transaction.  Bail and hope for the best.
> +           tree attrs = get_attrs_for (current_function_decl);
> +           if (!attrs || !lookup_attribute ("transaction_may_cancel_outer",
> +                                            attrs))
> +             return;

No, like

  // The front end should have semantically checked outer aborts, but in either 
case
  // the target region is not within this function.
  gcc_checking_assert(attrs && lookup_attribute 
("transaction_may_cancel_outer", attrs));
  return;


And now that you mention it...

> -  if (subcode & GTMA_DOES_GO_IRREVOCABLE)
> -    flags = PR_DOESGOIRREVOCABLE | PR_UNINSTRUMENTEDCODE;
> -  else
> -    flags = PR_INSTRUMENTEDCODE;
...
> +  int flags = PR_MULTIWAYCODE;
> +  tree tm_start = builtin_decl_explicit (BUILT_IN_TM_START);
> +
> +  /* ??? There are plenty of bits here we're not computing.  */
> +  int subcode = gimple_transaction_subcode (region->transaction_stmt);
> +  if (subcode & GTMA_DOES_GO_IRREVOCABLE)
> +    flags |= PR_DOESGOIRREVOCABLE;

This is a regression for GTMA_DOES_GO_IRREVOCABLE.  We don't want to 
generate instrumented code in that case.  We certainly didn't before.

And lets not advertise uninstrumented code until we've got it.


r~

Reply via email to