On 12/16/2011 03:54 AM, Richard Guenther wrote:
On Thu, 15 Dec 2011, Patrick Marlier wrote:

In PR51280, LTO does ICE because the object file uses TM builtin but the TM is
not enabled.
In the patch, it displays a error message if the builtin is not defined and
due to TM.
I moved is_tm_builtin() from calls.c to trans-mem.c. I splitted it into 2
functions is_tm_builtin/is_tm_builtin_code. In is_tm_builtin_code, I added
some missing builtins (TM_START, TM_GETTMCLONE_SAFE, TM_MALLOC, TM_CALLOC,
TM_FREE). Finally, I declared them into tree.h to be usable in calls.c and
tree-streamer-in.c.

Bootstrapped and LTO/TM regtested on Linux/i686.
(If ok, please commit it. Thanks.)

No - why should this matter?  All of TM should be lowered to a point
where only target specific code should be needed.

Richard.

Thanks Richard.

In lto file, there is GIMPLE_TRANSACTION statement and a builtin call (__builtin_ITM_commitTransaction) to delimit the end of the transaction region. The transaction is not yet instrumented. So all of TM are not lowered.

I guess this could be also added even if we should always break at the missing _ITM_commitTransaction builtin declaration.

Index: gimple-streamer-in.c
===================================================================
--- gimple-streamer-in.c        (revision 182487)
+++ gimple-streamer-in.c        (working copy)
@@ -234,6 +234,9 @@ input_gimple_stmt (struct lto_input_block *ib, str
       break;

     case GIMPLE_TRANSACTION:
+      if (!flag_tm)
+        error_at (gimple_location (stmt),
+                 "use of transactional memory without support enabled");
       gimple_transaction_set_label (stmt, stream_read_tree (ib, data_in));
       break;


It seems a bit out of my scope of my GCC knowledge so I guess I will let GCC guys solve this in a proper way.

Patrick.

Reply via email to