]> granicus.if.org Git - clang/commitdiff
[OPENMP, NVPTX] Emit simple reduction if requested.
authorAlexey Bataev <a.bataev@hotmail.com>
Mon, 18 Jun 2018 17:11:45 +0000 (17:11 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Mon, 18 Jun 2018 17:11:45 +0000 (17:11 +0000)
If simple reduction is requested, use the simple reduction instead of
the runtime functions calls.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@334962 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
test/OpenMP/nvptx_target_simd_codegen.cpp

index 785ed5676066ccb0a23ed37008e57904434e0e03..9452bdea4c7bae9eab8a1741c4ec47bbe0820ad5 100644 (file)
@@ -3163,6 +3163,12 @@ void CGOpenMPRuntimeNVPTX::emitReduction(
   assert((TeamsReduction || ParallelReduction || SimdReduction) &&
          "Invalid reduction selection in emitReduction.");
 
+  if (Options.SimpleReduction) {
+    CGOpenMPRuntime::emitReduction(CGF, Loc, Privates, LHSExprs, RHSExprs,
+                                   ReductionOps, Options);
+    return;
+  }
+
   ASTContext &C = CGM.getContext();
 
   // 1. Build a list of reduction variables.
index 5f307d8835e52bbd82baabf5e773ddcaf5391ead..89ea173addcc96b1618953cd1ca34722ad560fd1 100644 (file)
@@ -78,9 +78,8 @@ int bar(int n){
 // CHECK: call void @__kmpc_kernel_init(i32 %{{.+}}, i16 1)
 // CHECK-NOT: call void @__kmpc_for_static_init
 // CHECK-NOT: call void @__kmpc_for_static_fini
-// CHECK: [[RES:%.+]] = call i32 @__kmpc_nvptx_simd_reduce_nowait(i32 %{{.+}}, i32 1, i{{64|32}} {{8|4}}, i8* %{{.+}}, void (i8*, i16, i16, i16)* @{{.+}}, void (i8*, i32)* @{{.+}})
-// CHECK: switch i32 [[RES]]
-// CHECK: call void @__kmpc_nvptx_end_reduce_nowait(i32 %{{.+}})
+// CHECK-NOT: call i32 @__kmpc_nvptx_simd_reduce_nowait(
+// CHECK-NOT: call void @__kmpc_nvptx_end_reduce_nowait(
 // CHECK: call void @__kmpc_kernel_deinit(i16 1)
 // CHECK: ret void