[OPENMP, NVPTX] Emit simple reduction if requested.

If simple reduction is requested, use the simple reduction instead of
the runtime functions calls.

llvm-svn: 334962
This commit is contained in:
Alexey Bataev 2018-06-18 17:11:45 +00:00
parent a88281d8ae
commit 7b55d2d554
2 changed files with 8 additions and 3 deletions

View 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.

View 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