[llvm] 97c24a1 - [OpenMPOpt][NFC] Allow missing wrapper functions for parallel_51
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 17 19:02:44 PDT 2023
Author: Johannes Doerfert
Date: 2023-08-17T18:33:24-07:00
New Revision: 97c24a16fd94aef5b1d2678b0bf94799ec1bbe33
URL: https://github.com/llvm/llvm-project/commit/97c24a16fd94aef5b1d2678b0bf94799ec1bbe33
DIFF: https://github.com/llvm/llvm-project/commit/97c24a16fd94aef5b1d2678b0bf94799ec1bbe33.diff
LOG: [OpenMPOpt][NFC] Allow missing wrapper functions for parallel_51
Clang does not create a wrapper function for SPMD kernels. If it does
not, we still want to collect the parallel region, even if we have no
use for it right now.
Added:
Modified:
llvm/lib/Transforms/IPO/OpenMPOpt.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
index 59fad73eeaecfd..88d7d6a5c91e61 100644
--- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -3150,7 +3150,7 @@ ChangeStatus AAExecutionDomainFunction::updateImpl(Attributor &A) {
if (EDAA && EDAA->getState().isValidState()) {
const auto &CalleeED = EDAA->getFunctionExecutionDomain();
ED.IsReachedFromAlignedBarrierOnly =
- CalleeED.IsReachedFromAlignedBarrierOnly;
+ CalleeED.IsReachedFromAlignedBarrierOnly;
AlignedBarrierLastInBlock = ED.IsReachedFromAlignedBarrierOnly;
if (IsNoSync || !CalleeED.IsReachedFromAlignedBarrierOnly)
ED.EncounteredNonLocalSideEffect |=
@@ -4820,6 +4820,7 @@ struct AAKernelInfoCallSite : AAKernelInfo {
return;
}
+ const unsigned int NonWrapperFunctionArgNo = 5;
const unsigned int WrapperFunctionArgNo = 6;
RuntimeFunction RF = It->getSecond();
switch (RF) {
@@ -4899,9 +4900,13 @@ struct AAKernelInfoCallSite : AAKernelInfo {
case OMPRTL___kmpc_target_deinit:
KernelDeinitCB = &CB;
break;
- case OMPRTL___kmpc_parallel_51:
- if (auto *ParallelRegion = dyn_cast<Function>(
- CB.getArgOperand(WrapperFunctionArgNo)->stripPointerCasts())) {
+ case OMPRTL___kmpc_parallel_51: {
+ auto *ParallelRegionOp =
+ CB.getArgOperand(WrapperFunctionArgNo)->stripPointerCasts();
+ if (isa<ConstantPointerNull>(ParallelRegionOp))
+ ParallelRegionOp =
+ CB.getArgOperand(NonWrapperFunctionArgNo)->stripPointerCasts();
+ if (auto *ParallelRegion = dyn_cast<Function>(ParallelRegionOp)) {
ReachedKnownParallelRegions.insert(ParallelRegion);
/// Check nested parallelism
auto *FnAA = A.getAAFor<AAKernelInfo>(
@@ -4916,6 +4921,7 @@ struct AAKernelInfoCallSite : AAKernelInfo {
// worst.
ReachedUnknownParallelRegions.insert(&CB);
break;
+ }
case OMPRTL___kmpc_omp_task:
// We do not look into tasks right now, just give up.
SPMDCompatibilityTracker.indicatePessimisticFixpoint();
More information about the llvm-commits
mailing list