Author: abataev Date: Fri Mar 9 07:20:30 2018 New Revision: 327136 URL: http://llvm.org/viewvc/llvm-project?rev=327136&view=rev Log: [OPENMP] Fix the address of the original variable in task reductions.
If initialization of the task reductions requires pointer to original variable, which is stored in the threadprivate storage, we used the address of this pointer instead. Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=327136&r1=327135&r2=327136&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original) +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Fri Mar 9 07:20:30 2018 @@ -5422,6 +5422,9 @@ static llvm::Value *emitReduceInitFuncti CGM.getOpenMPRuntime().getAddrOfArtificialThreadPrivate( CGF, CGM.getContext().VoidPtrTy, generateUniqueName(CGM, "reduction", RCG.getRefExpr(N))); + SharedAddr = CGF.EmitLoadOfPointer( + SharedAddr, + CGM.getContext().VoidPtrTy.castAs<PointerType>()->getTypePtr()); SharedLVal = CGF.MakeAddrLValue(SharedAddr, CGM.getContext().VoidPtrTy); } else { SharedLVal = CGF.MakeNaturalAlignAddrLValue( Modified: cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp?rev=327136&r1=327135&r2=327136&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp Fri Mar 9 07:20:30 2018 @@ -164,7 +164,9 @@ sum = 0.0; // CHECK: define internal void @[[RED_INIT2]](i8*) // CHECK: call i8* @__kmpc_threadprivate_cached( -// CHECK: call i8* @__kmpc_threadprivate_cached( +// CHECK: [[ORIG_PTR_ADDR:%.+]] = call i8* @__kmpc_threadprivate_cached( +// CHECK: [[ORIG_PTR_REF:%.+]] = bitcast i8* [[ORIG_PTR_ADDR]] to i8** +// CHECK: load i8*, i8** [[ORIG_PTR_REF]], // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64( // CHECK: ret void _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits