John, it is for compatibility. We have to use kmp_cancel_barrier() (we're going to implement full OpenMP 4.0), but there can be some old solutions that can use old _kmpc_barrier() function. Actually, I was mistaken when implemented 'omp barrier' using legacy kmpc_barrier() instead of the new one kmpc_cancel_barrier() and this patch just fixes it.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

03.12.2014 23:12, John McCall пишет:
================
Comment at: lib/CodeGen/CGOpenMPRuntime.cpp:640
@@ -642,3 +639,3 @@
                                           OpenMPLocationFlags Flags) {
-  // Build call __kmpc_barrier(loc, thread_id)
+  // Build call __kmpc_cancel_barrier(loc, thread_id);
    llvm::Value *Args[] = {EmitOpenMPUpdateLocation(CGF, Loc, Flags),
----------------
ABataev wrote:
rjmccall wrote:
Does this runtime function always exist, or is it contingent on having a 
sufficiently new OpenMP runtime?  If the latter, you should introduce the 
concept of a target OpenMP runtime version, patterned on the target Objective-C 
runtime version.

Also, please describe in a comment why we're using this function rather than the other, 
since apparently both "work" in some sense.
Yes, it exists always. In OpenMP 3.1 it works just the same way as a regular 
kmpc_barrier() (actually, kmpc_cancel_barrier just calls it). But it adds 
processing of cancellation directives introduced in OpenMP 4.0.
Ok, I'll add the comment.
Okay.  Is that desired for the existing uses of EmitOMPBarrierCall?  If 
everybody always wants a cancel barrier, and both runtime functions take the 
same arguments, why are there two runtime functions at all?

http://reviews.llvm.org/D6447




_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to