[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