[Openmp-commits] [openmp] a815208 - [Attributor][FIX] Ensure new BBs are registered
Johannes Doerfert via Openmp-commits
openmp-commits at lists.llvm.org
Wed Nov 1 12:12:34 PDT 2023
Author: Johannes Doerfert
Date: 2023-11-01T12:12:14-07:00
New Revision: a8152086ff422d6679ce7cba96bba777eeddd60b
URL: https://github.com/llvm/llvm-project/commit/a8152086ff422d6679ce7cba96bba777eeddd60b
DIFF: https://github.com/llvm/llvm-project/commit/a8152086ff422d6679ce7cba96bba777eeddd60b.diff
LOG: [Attributor][FIX] Ensure new BBs are registered
Added:
openmp/libomptarget/test/offloading/generic_multiple_parallel_regions.c
Modified:
llvm/lib/Transforms/IPO/AttributorAttributes.cpp
llvm/lib/Transforms/IPO/OpenMPOpt.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
index 21d83edbb18c447..c698d1babbf6354 100644
--- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -12405,11 +12405,14 @@ struct AAIndirectCallInfoCallSite : public AAIndirectCallInfo {
Instruction *ThenTI =
SplitBlockAndInsertIfThen(LastCmp, IP, /* Unreachable */ false);
BasicBlock *CBBB = CB->getParent();
+ A.registerManifestAddedBasicBlock(*ThenTI->getParent());
+ A.registerManifestAddedBasicBlock(*CBBB);
auto *SplitTI = cast<BranchInst>(LastCmp->getNextNode());
BasicBlock *ElseBB;
if (IP == CB) {
ElseBB = BasicBlock::Create(ThenTI->getContext(), "",
ThenTI->getFunction(), CBBB);
+ A.registerManifestAddedBasicBlock(*ElseBB);
IP = BranchInst::Create(CBBB, ElseBB);
SplitTI->replaceUsesOfWith(CBBB, ElseBB);
} else {
diff --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
index 3e9705d61e8e080..74ebbcde5729247 100644
--- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -4567,6 +4567,8 @@ struct AAKernelInfoFunction : AAKernelInfo {
BasicBlock *PRNextBB =
BasicBlock::Create(Ctx, "worker_state_machine.parallel_region.check",
Kernel, StateMachineEndParallelBB);
+ A.registerManifestAddedBasicBlock(*PRExecuteBB);
+ A.registerManifestAddedBasicBlock(*PRNextBB);
// Check if we need to compare the pointer at all or if we can just
// call the parallel region function.
diff --git a/openmp/libomptarget/test/offloading/generic_multiple_parallel_regions.c b/openmp/libomptarget/test/offloading/generic_multiple_parallel_regions.c
new file mode 100644
index 000000000000000..33fe2ca127b6dc4
--- /dev/null
+++ b/openmp/libomptarget/test/offloading/generic_multiple_parallel_regions.c
@@ -0,0 +1,29 @@
+// RUN: %libomptarget-compile-run-and-check-generic
+// RUN: %libomptarget-compileopt-run-and-check-generic
+
+#include <omp.h>
+#include <stdio.h>
+
+__attribute__((optnone)) void optnone() {}
+
+int main() {
+ int i = 0;
+#pragma omp target teams num_teams(1) map(tofrom : i)
+ {
+ optnone();
+#pragma omp parallel
+ if (omp_get_thread_num() == 0)
+ ++i;
+#pragma omp parallel
+ if (omp_get_thread_num() == 0)
+ ++i;
+#pragma omp parallel
+ if (omp_get_thread_num() == 0)
+ ++i;
+#pragma omp parallel
+ if (omp_get_thread_num() == 0)
+ ++i;
+ }
+ // CHECK: 4
+ printf("%i\n", i);
+}
More information about the Openmp-commits
mailing list