From 93281cbcbb9b1ea2b6788a629d6aef3284957d05 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Wed, 29 Apr 2015 05:21:03 +0000 Subject: [PATCH] [OPENMP] Fix crash on reductions codegen for short circuit reduction operations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236084 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGAtomic.cpp | 4 ++-- test/OpenMP/for_reduction_codegen.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/CGAtomic.cpp b/lib/CodeGen/CGAtomic.cpp index 2de9cb2689..edcc09df9d 100644 --- a/lib/CodeGen/CGAtomic.cpp +++ b/lib/CodeGen/CGAtomic.cpp @@ -1502,7 +1502,7 @@ void CodeGenFunction::EmitAtomicStore(RValue rvalue, LValue dest, atomics.getAtomicType(), SourceLocation())); // Try to write new value using cmpxchg operation auto Pair = atomics.EmitAtomicCompareExchange(OriginalRValue, NewRValue, AO); - PHI->addIncoming(Pair.first.getScalarVal(), ContBB); + PHI->addIncoming(Pair.first.getScalarVal(), Builder.GetInsertBlock()); Builder.CreateCondBr(Pair.second, ExitBB, ContBB); EmitBlock(ExitBB, /*IsFinished=*/true); } @@ -1592,7 +1592,7 @@ void CodeGenFunction::EmitAtomicUpdate( auto Pair = Atomics.EmitAtomicCompareExchange(OriginalRValue, NewRVal, AO); OldVal = IsScalar ? Pair.first.getScalarVal() : Atomics.convertRValueToInt(Pair.first); - PHI->addIncoming(OldVal, ContBB); + PHI->addIncoming(OldVal, Builder.GetInsertBlock()); Builder.CreateCondBr(Pair.second, ExitBB, ContBB); EmitBlock(ExitBB, /*IsFinished=*/true); } diff --git a/test/OpenMP/for_reduction_codegen.cpp b/test/OpenMP/for_reduction_codegen.cpp index c7a8a6bc51..c26961bf71 100644 --- a/test/OpenMP/for_reduction_codegen.cpp +++ b/test/OpenMP/for_reduction_codegen.cpp @@ -42,6 +42,12 @@ T tmain() { vec[i] = t_var; s_arr[i] = var; } +#pragma omp parallel +#pragma omp for reduction(&& : t_var) + for (int i = 0; i < 2; ++i) { + vec[i] = t_var; + s_arr[i] = var; + } return T(); } -- 2.40.0