[llvm-commits] [RFC] Add support of RTM from TSX

Hal Finkel hfinkel at anl.gov
Fri Sep 21 11:00:06 PDT 2012


Michael,

I am happy to see support for transactional memory, and because other
architectures also have transactional memory support (like the IBM BG/Q
with which I work), I would like to see the interface made slightly
more generic. I would like to propose the following interface:

i32 @llvm.tm.begin(i32) - The parameter here is a hint: 0 ==
long-running transaction, 1 == short-running transaction (and you can
ignore this parameter on x86). The return value is a failure code. We
can probably keep Intel's convention: if bit 0 is set then bits 31:24
hold the user-defined abort code. If bit 1 is set, then the transaction
may succeed upon retry. The exact codes are otherwise target-defined.

void @llvm.tm.end() - End the transactional region

void @llvm.tm.abort(i8) - The i8 is a user-defined abort id

In short, I propose changing the names of your intrinsics and adding
the long-running/short-running hint parameter to begin().

Documentation for these would need to be added to the LLVM language
reference. For now, the compiler should probably abort if the target
does not specifically handle the intrinsics.

Arnamoy, comments?

 -Hal

On Fri, 21 Sep 2012 09:57:17 -0700
Michael Liao <michael.liao at intel.com> wrote:

> Hi
> 
> Here's the patch adding RTM support from TSX[1] available in
> Haswell[2]. This patch adds 3 intrinsics of RTM, namely xbegin, xend,
> and xabort, which could be used to add hardware support for the draft
> C++ transaction language constructs.
> 
> Thanks for your review.
> - Michael
> 
> --------------
> [1] http://software.intel.com/sites/default/files/319433-014.pdf
> [2]
> http://software.intel.com/en-us/blogs/2012/02/07/transactional-synchronization-in-haswell



-- 
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list