trans-mem.c (expand_transaction): Do not set PR_INSTRUMENTEDCODE if GTMA_HAS_NO_INSTR...
authorAldy Hernandez <aldyh@redhat.com>
Fri, 8 Mar 2013 22:26:37 +0000 (22:26 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Fri, 8 Mar 2013 22:26:37 +0000 (22:26 +0000)
* trans-mem.c (expand_transaction): Do not set PR_INSTRUMENTEDCODE
if GTMA_HAS_NO_INSTRUMENTATION.
(generate_tm_state): Keep GTMA_HAS_NO_INSTRUMENTATION bit.
(ipa_tm_transform_transaction): Set GTMA_HAS_NO_INSTRUMENTATION.
* gimple.h (GTMA_HAS_NO_INSTRUMENTATION): Define.
* gimple-pretty-print.c (dump_gimple_transaction): Handle
GTMA_HAS_NO_INSTRUMENTATION.

From-SVN: r196562

gcc/ChangeLog
gcc/gimple-pretty-print.c
gcc/gimple.h
gcc/testsuite/gcc.dg/tm/instrumented-mask.c [new file with mode: 0644]
gcc/trans-mem.c

index c859321..7a4de25 100644 (file)
@@ -1,3 +1,15 @@
+2013-02-27  Aldy Hernandez  <aldyh@redhat.com>
+
+       * trans-mem.c (expand_transaction): Do not set PR_INSTRUMENTEDCODE
+       if GTMA_HAS_NO_INSTRUMENTATION.
+       (generate_tm_state): Keep GTMA_HAS_NO_INSTRUMENTATION bit.
+       (ipa_tm_transform_transaction): Set GTMA_HAS_NO_INSTRUMENTATION.
+       * gimple.h (GTMA_HAS_NO_INSTRUMENTATION): Define.
+       * gimple-pretty-print.c (dump_gimple_transaction): Handle
+       GTMA_HAS_NO_INSTRUMENTATION.
+
+2013-02-25  Aldy Hernandez  <aldyh@redhat.com>
+
 2013-03-08  Jakub Jelinek  <jakub@redhat.com>
 
        * config/gnu-user.h (LIBTSAN_EARLY_SPEC): Don't link against
index e7e821d..8c24a57 100644 (file)
@@ -1399,6 +1399,11 @@ dump_gimple_transaction (pretty_printer *buffer, gimple gs, int spc, int flags)
                  pp_string (buffer, "GTMA_DOES_GO_IRREVOCABLE ");
                  subcode &= ~GTMA_DOES_GO_IRREVOCABLE;
                }
+             if (subcode & GTMA_HAS_NO_INSTRUMENTATION)
+               {
+                 pp_string (buffer, "GTMA_HAS_NO_INSTRUMENTATION ");
+                 subcode &= ~GTMA_HAS_NO_INSTRUMENTATION;
+               }
              if (subcode)
                pp_printf (buffer, "0x%x ", subcode);
              pp_string (buffer, "]");
index 4bd6b3d..1bbd7d7 100644 (file)
@@ -661,6 +661,9 @@ struct GTY(()) gimple_statement_omp_atomic_store {
    tell the runtime that it should begin the transaction in
    serial-irrevocable mode.  */
 #define GTMA_DOES_GO_IRREVOCABLE       (1u << 6)
+/* The transaction contains no instrumentation code whatsover, most
+   likely because it is guaranteed to go irrevocable upon entry.  */
+#define GTMA_HAS_NO_INSTRUMENTATION    (1u << 7)
 
 struct GTY(()) gimple_statement_transaction
 {
diff --git a/gcc/testsuite/gcc.dg/tm/instrumented-mask.c b/gcc/testsuite/gcc.dg/tm/instrumented-mask.c
new file mode 100644 (file)
index 0000000..6cfd3e4
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm -fdump-tree-tmmark" } */
+
+/* If we're sure to go irrevocable, as in the case below, do not pass
+   PR_INSTRUMENTEDCODE to the run-time if there is nothing
+   instrumented within the transaction.  */
+
+int
+main()
+{
+  __transaction_relaxed { __asm__(""); }
+  return 0;
+}
+
+/* { dg-final { scan-tree-dump-times " instrumentedCode" 0 "tmmark" } } */
+/* { dg-final { cleanup-tree-dump "tmmark" } } */
index 71eaa44..b0f18b5 100644 (file)
@@ -2602,7 +2602,7 @@ expand_transaction (struct tm_region *region, void *data ATTRIBUTE_UNUSED)
       flags |= PR_HASNOABORT;
     if ((subcode & GTMA_HAVE_STORE) == 0)
       flags |= PR_READONLY;
-    if (inst_edge)
+    if (inst_edge && !(subcode & GTMA_HAS_NO_INSTRUMENTATION))
       flags |= PR_INSTRUMENTEDCODE;
     if (uninst_edge)
       flags |= PR_UNINSTRUMENTEDCODE;
@@ -2806,7 +2806,8 @@ generate_tm_state (struct tm_region *region, void *data ATTRIBUTE_UNUSED)
 
       if (subcode & GTMA_DOES_GO_IRREVOCABLE)
        subcode &= (GTMA_DECLARATION_MASK | GTMA_DOES_GO_IRREVOCABLE
-                   | GTMA_MAY_ENTER_IRREVOCABLE);
+                   | GTMA_MAY_ENTER_IRREVOCABLE
+                   | GTMA_HAS_NO_INSTRUMENTATION);
       else
        subcode &= GTMA_DECLARATION_MASK;
       gimple_transaction_set_subcode (region->transaction_stmt, subcode);
@@ -5069,8 +5070,9 @@ ipa_tm_transform_transaction (struct cgraph_node *node)
          && 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);
+         transaction_subcode_ior (region, GTMA_DOES_GO_IRREVOCABLE
+                                          | GTMA_MAY_ENTER_IRREVOCABLE
+                                          | GTMA_HAS_NO_INSTRUMENTATION);
          continue;
        }