[llvm] b2ad63d - [OpenMP] Add OpenMPOpt as a Module pass

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 27 13:28:03 PDT 2021


This may have broken the ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER=OFF configuration.

See http://meinersbur.de:8011/#/builders/148

Michael

******************** TEST 'LLVM ::
Transforms/OpenMP/values_in_offload_arrays.ll' FAILED
********************
Script:
--
: 'RUN: at line 1';
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency -debug-only=openmp-opt <
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
2>&1 | /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
: 'RUN: at line 2';
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -passes=openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency -debug-only=openmp-opt <
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
2>&1 | /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
--
Exit Code: 134
Command Output (stderr):
--
+ : 'RUN: at line 1'
+ /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
+ /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency -debug-only=openmp-opt
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/test/Transforms/OpenMP/Output/values_in_offload_arrays.ll.script:
line 2: 3346010 Aborted                 (core dumped)
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency -debug-only=openmp-opt <
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
2>&1
     3346011 Done                    |
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
--
********************

******************** TEST 'LLVM ::
Transforms/OpenMP/hide_mem_transfer_latency.ll' FAILED
********************
Script:
--
: 'RUN: at line 2';
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency <
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
| /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
: 'RUN: at line 3';
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -passes=openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency <
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
| /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
--
Exit Code: 2
Command Output (stderr):
--
+ : 'RUN: at line 2'
+ /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
+ /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency
opt: /home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:278:
bool {anonymous}::CGPassManager::RefreshCallGraph(const
llvm::CallGraphSCC&, llvm::CallGraph&, bool): Assertion `!CheckingMode
&& "CallGraphSCCPass did not update the CallGraph correctly!"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the
crash backtrace.
Stack dump:
0. Program arguments:
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt
-S -openmp-opt-cgscc -aa-pipeline=basic-aa
-openmp-hide-memory-transfer-latency
1. Running pass 'CallGraph Pass Manager' on module '<stdin>'.
 #0 0x0000564fd9147501 llvm::sys::PrintStackTrace(llvm::raw_ostream&,
int) (/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt+0x29c2501)
 #1 0x0000564fd9144f34 llvm::sys::RunSignalHandlers()
(/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt+0x29bff34)
 #2 0x0000564fd91450ab SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f2178dc43c0 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
 #4 0x00007f217886418b raise
/build/glibc-eX1tMB/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f2178843859 abort /build/glibc-eX1tMB/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f2178843729 get_sysdep_segment_value
/build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f2178843729 _nl_load_domain
/build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f2178854f36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)
 #9 0x0000564fd7e447d8 (anonymous
namespace)::CGPassManager::runOnModule(llvm::Module&)
CallGraphSCCPass.cpp:0:0
#10 0x0000564fd87eacbc
llvm::legacy::PassManagerImpl::run(llvm::Module&)
(/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt+0x2065cbc)
#11 0x0000564fd7a32a4b main
(/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt+0x12ada4b)
#12 0x00007f21788450b3 __libc_start_main
/build/glibc-eX1tMB/glibc-2.31/csu/../csu/libc-start.c:342:3
#13 0x0000564fd7a1098e _start
(/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/opt+0x128b98e)
FileCheck error: '<stdin>' is empty.
FileCheck command line:
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/build/bin/FileCheck
/home/meinersbur/bb-worker/llvmworker3/clang-legacypm-unifiedbuilder/llvm-project/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
--
********************


Am Di., 20. Apr. 2021 um 11:29 Uhr schrieb Joseph Huber via
llvm-commits <llvm-commits at lists.llvm.org>:
>
>
> Author: Joseph Huber
> Date: 2021-04-20T12:28:58-04:00
> New Revision: b2ad63d3cf6c3a86eba59d0d08756cdb30848c23
>
> URL: https://github.com/llvm/llvm-project/commit/b2ad63d3cf6c3a86eba59d0d08756cdb30848c23
> DIFF: https://github.com/llvm/llvm-project/commit/b2ad63d3cf6c3a86eba59d0d08756cdb30848c23.diff
>
> LOG: [OpenMP] Add OpenMPOpt as a Module pass
>
> Summary:
> This patch registers OpenMPOpt as a Module pass in addition to a CGSCC
> pass. This is so certain optimzations that are sensitive to intact
> call-sites can happen before inlining. The old `openmpopt` pass name is
> changed to `openmp-opt-cgscc` and `openmp-opt` calls the Module pass.
> The current module pass only runs a single check but will be expanded in
> the future.
>
> Reviewed By: jdoerfert
>
> Differential Revision: https://reviews.llvm.org/D99202
>
> Added:
>     llvm/test/Transforms/PhaseOrdering/openmp-opt-module.ll
>
> Modified:
>     llvm/include/llvm/InitializePasses.h
>     llvm/include/llvm/LinkAllPasses.h
>     llvm/include/llvm/Transforms/IPO.h
>     llvm/include/llvm/Transforms/IPO/OpenMPOpt.h
>     llvm/lib/Passes/PassBuilder.cpp
>     llvm/lib/Passes/PassRegistry.def
>     llvm/lib/Transforms/IPO/IPO.cpp
>     llvm/lib/Transforms/IPO/OpenMPOpt.cpp
>     llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
>     llvm/test/Other/new-pm-defaults.ll
>     llvm/test/Other/new-pm-thinlto-defaults.ll
>     llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
>     llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
>     llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
>     llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
>     llvm/test/Transforms/OpenMP/add_attributes.ll
>     llvm/test/Transforms/OpenMP/add_attributes_amdgcn.ll
>     llvm/test/Transforms/OpenMP/attributor_module_slice_reproducer.ll
>     llvm/test/Transforms/OpenMP/dead_use.ll
>     llvm/test/Transforms/OpenMP/deduplication.ll
>     llvm/test/Transforms/OpenMP/deduplication_remarks.ll
>     llvm/test/Transforms/OpenMP/globalization_remarks.ll
>     llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll
>     llvm/test/Transforms/OpenMP/gpu_state_machine_function_ptr_replacement.ll
>     llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
>     llvm/test/Transforms/OpenMP/icv_remarks.ll
>     llvm/test/Transforms/OpenMP/icv_tracking.ll
>     llvm/test/Transforms/OpenMP/parallel_deletion.ll
>     llvm/test/Transforms/OpenMP/parallel_deletion_remarks.ll
>     llvm/test/Transforms/OpenMP/parallel_region_merging.ll
>     llvm/test/Transforms/OpenMP/rtf_type_checking.ll
>     llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
>
> Removed:
>
>
>
> ################################################################################
> diff  --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
> index 085cf5fe340e3..a03f5b2668402 100644
> --- a/llvm/include/llvm/InitializePasses.h
> +++ b/llvm/include/llvm/InitializePasses.h
> @@ -75,7 +75,7 @@ void initializeAssumeSimplifyPassLegacyPassPass(PassRegistry &);
>  void initializeAssumeBuilderPassLegacyPassPass(PassRegistry &);
>  void initializeAnnotation2MetadataLegacyPass(PassRegistry &);
>  void initializeAnnotationRemarksLegacyPass(PassRegistry &);
> -void initializeOpenMPOptLegacyPassPass(PassRegistry &);
> +void initializeOpenMPOptCGSCCLegacyPassPass(PassRegistry &);
>  void initializeArgPromotionPass(PassRegistry&);
>  void initializeAssumptionCacheTrackerPass(PassRegistry&);
>  void initializeAtomicExpandPass(PassRegistry&);
>
> diff  --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h
> index 891d534b4fa64..a5471b29eb6b1 100644
> --- a/llvm/include/llvm/LinkAllPasses.h
> +++ b/llvm/include/llvm/LinkAllPasses.h
> @@ -71,7 +71,7 @@ namespace {
>        (void) llvm::createAggressiveDCEPass();
>        (void) llvm::createAggressiveInstCombinerPass();
>        (void) llvm::createBitTrackingDCEPass();
> -      (void) llvm::createOpenMPOptLegacyPass();
> +      (void)llvm::createOpenMPOptCGSCCLegacyPass();
>        (void) llvm::createArgumentPromotionPass();
>        (void) llvm::createAlignmentFromAssumptionsPass();
>        (void) llvm::createBasicAAWrapperPass();
>
> diff  --git a/llvm/include/llvm/Transforms/IPO.h b/llvm/include/llvm/Transforms/IPO.h
> index af357181597ad..2e0862440c955 100644
> --- a/llvm/include/llvm/Transforms/IPO.h
> +++ b/llvm/include/llvm/Transforms/IPO.h
> @@ -160,7 +160,7 @@ Pass *createArgumentPromotionPass(unsigned maxElements = 3);
>
>  //===----------------------------------------------------------------------===//
>  /// createOpenMPOptLegacyPass - OpenMP specific optimizations.
> -Pass *createOpenMPOptLegacyPass();
> +Pass *createOpenMPOptCGSCCLegacyPass();
>
>  //===----------------------------------------------------------------------===//
>  /// createIPSCCPPass - This pass propagates constants from call sites into the
>
> diff  --git a/llvm/include/llvm/Transforms/IPO/OpenMPOpt.h b/llvm/include/llvm/Transforms/IPO/OpenMPOpt.h
> index 9d0ef747883cb..079bd714b46d8 100644
> --- a/llvm/include/llvm/Transforms/IPO/OpenMPOpt.h
> +++ b/llvm/include/llvm/Transforms/IPO/OpenMPOpt.h
> @@ -66,6 +66,14 @@ class OpenMPOptPass : public PassInfoMixin<OpenMPOptPass> {
>    /// Helper to remember if the module contains OpenMP (runtime calls).
>    omp::OpenMPInModule OMPInModule;
>
> +public:
> +  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
> +};
> +
> +class OpenMPOptCGSCCPass : public PassInfoMixin<OpenMPOptCGSCCPass> {
> +  /// Helper to remember if the module contains OpenMP (runtime calls).
> +  omp::OpenMPInModule OMPInModule;
> +
>  public:
>    PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
>                          LazyCallGraph &CG, CGSCCUpdateResult &UR);
>
> diff  --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
> index 25cc074fb0f22..b8f6a200bf496 100644
> --- a/llvm/lib/Passes/PassBuilder.cpp
> +++ b/llvm/lib/Passes/PassBuilder.cpp
> @@ -1010,7 +1010,7 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
>    // Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
>    // there are no OpenMP runtime calls present in the module.
>    if (Level == OptimizationLevel::O2 || Level == OptimizationLevel::O3)
> -    MainCGPipeline.addPass(OpenMPOptPass());
> +    MainCGPipeline.addPass(OpenMPOptCGSCCPass());
>
>    for (auto &C : CGSCCOptimizerLateEPCallbacks)
>      C(MainCGPipeline, Level);
> @@ -1108,6 +1108,11 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
>            PGOIndirectCallPromotion(true /* IsInLTO */, true /* SamplePGO */));
>    }
>
> +  // Try to perform OpenMP specific optimizations on the module. This is a
> +  // (quick!) no-op if there are no OpenMP runtime calls present in the module.
> +  if (Level == OptimizationLevel::O2 || Level == OptimizationLevel::O3)
> +    MPM.addPass(OpenMPOptPass());
> +
>    if (AttributorRun & AttributorRunOption::MODULE)
>      MPM.addPass(AttributorPass());
>
>
> diff  --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
> index 72441c9a70b52..4e9bfd21311f5 100644
> --- a/llvm/lib/Passes/PassRegistry.def
> +++ b/llvm/lib/Passes/PassRegistry.def
> @@ -44,6 +44,7 @@ MODULE_ALIAS_ANALYSIS("globals-aa", GlobalsAA())
>  MODULE_PASS("always-inline", AlwaysInlinerPass())
>  MODULE_PASS("attributor", AttributorPass())
>  MODULE_PASS("annotation2metadata", Annotation2MetadataPass())
> +MODULE_PASS("openmp-opt", OpenMPOptPass())
>  MODULE_PASS("called-value-propagation", CalledValuePropagationPass())
>  MODULE_PASS("canonicalize-aliases", CanonicalizeAliasesPass())
>  MODULE_PASS("cg-profile", CGProfilePass())
> @@ -138,7 +139,7 @@ CGSCC_PASS("invalidate<all>", InvalidateAllAnalysesPass())
>  CGSCC_PASS("function-attrs", PostOrderFunctionAttrsPass())
>  CGSCC_PASS("attributor-cgscc", AttributorCGSCCPass())
>  CGSCC_PASS("inline", InlinerPass())
> -CGSCC_PASS("openmpopt", OpenMPOptPass())
> +CGSCC_PASS("openmp-opt-cgscc", OpenMPOptCGSCCPass())
>  CGSCC_PASS("coro-split", CoroSplitPass())
>  CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass())
>  #undef CGSCC_PASS
>
> diff  --git a/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp
> index f4c12dd7f4cd8..a4c426be85124 100644
> --- a/llvm/lib/Transforms/IPO/IPO.cpp
> +++ b/llvm/lib/Transforms/IPO/IPO.cpp
> @@ -23,7 +23,7 @@
>  using namespace llvm;
>
>  void llvm::initializeIPO(PassRegistry &Registry) {
> -  initializeOpenMPOptLegacyPassPass(Registry);
> +  initializeOpenMPOptCGSCCLegacyPassPass(Registry);
>    initializeArgPromotionPass(Registry);
>    initializeAnnotation2MetadataLegacyPass(Registry);
>    initializeCalledValuePropagationLegacyPassPass(Registry);
>
> diff  --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
> index 1f5afc781b369..268777c8b417a 100644
> --- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
> +++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
> @@ -495,7 +495,7 @@ struct OpenMPOpt {
>    }
>
>    /// Run all OpenMP optimizations on the underlying SCC/ModuleSlice.
> -  bool run() {
> +  bool run(bool IsModulePass) {
>      if (SCC.empty())
>        return false;
>
> @@ -505,28 +505,31 @@ struct OpenMPOpt {
>                        << " functions in a slice with "
>                        << OMPInfoCache.ModuleSlice.size() << " functions\n");
>
> -    if (PrintICVValues)
> -      printICVs();
> -    if (PrintOpenMPKernels)
> -      printKernels();
> -
> -    Changed |= rewriteDeviceCodeStateMachine();
> -
> -    Changed |= runAttributor();
> -
> -    // Recollect uses, in case Attributor deleted any.
> -    OMPInfoCache.recollectUses();
> -
> -    Changed |= deleteParallelRegions();
> -    if (HideMemoryTransferLatency)
> -      Changed |= hideMemTransfersLatency();
> -    if (remarksEnabled())
> -      analysisGlobalization();
> -    Changed |= deduplicateRuntimeCalls();
> -    if (EnableParallelRegionMerging) {
> -      if (mergeParallelRegions()) {
> -        deduplicateRuntimeCalls();
> -        Changed = true;
> +    if (IsModulePass) {
> +      if (remarksEnabled())
> +        analysisGlobalization();
> +    } else {
> +      if (PrintICVValues)
> +        printICVs();
> +      if (PrintOpenMPKernels)
> +        printKernels();
> +
> +      Changed |= rewriteDeviceCodeStateMachine();
> +
> +      Changed |= runAttributor();
> +
> +      // Recollect uses, in case Attributor deleted any.
> +      OMPInfoCache.recollectUses();
> +
> +      Changed |= deleteParallelRegions();
> +      if (HideMemoryTransferLatency)
> +        Changed |= hideMemTransfersLatency();
> +      Changed |= deduplicateRuntimeCalls();
> +      if (EnableParallelRegionMerging) {
> +        if (mergeParallelRegions()) {
> +          deduplicateRuntimeCalls();
> +          Changed = true;
> +        }
>        }
>      }
>
> @@ -967,6 +970,7 @@ struct OpenMPOpt {
>
>          for (auto &MergableCIs : MergableCIsVector)
>            Merge(MergableCIs, BB);
> +        MergableCIsVector.clear();
>        }
>      }
>
> @@ -2263,9 +2267,52 @@ AAICVTracker &AAICVTracker::createForPosition(const IRPosition &IRP,
>    return *AA;
>  }
>
> -PreservedAnalyses OpenMPOptPass::run(LazyCallGraph::SCC &C,
> -                                     CGSCCAnalysisManager &AM,
> -                                     LazyCallGraph &CG, CGSCCUpdateResult &UR) {
> +PreservedAnalyses OpenMPOptPass::run(Module &M, ModuleAnalysisManager &AM) {
> +  if (!containsOpenMP(M, OMPInModule))
> +    return PreservedAnalyses::all();
> +
> +  if (DisableOpenMPOptimizations)
> +    return PreservedAnalyses::all();
> +
> +  // Look at every function definition in the Module.
> +  SmallVector<Function *, 16> SCC;
> +  for (Function &Fn : M)
> +    if (!Fn.isDeclaration())
> +      SCC.push_back(&Fn);
> +
> +  if (SCC.empty())
> +    return PreservedAnalyses::all();
> +
> +  FunctionAnalysisManager &FAM =
> +      AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
> +
> +  AnalysisGetter AG(FAM);
> +
> +  auto OREGetter = [&FAM](Function *F) -> OptimizationRemarkEmitter & {
> +    return FAM.getResult<OptimizationRemarkEmitterAnalysis>(*F);
> +  };
> +
> +  BumpPtrAllocator Allocator;
> +  CallGraphUpdater CGUpdater;
> +
> +  SetVector<Function *> Functions(SCC.begin(), SCC.end());
> +  OMPInformationCache InfoCache(M, AG, Allocator, /*CGSCC*/ Functions,
> +                                OMPInModule.getKernels());
> +
> +  Attributor A(Functions, InfoCache, CGUpdater);
> +
> +  OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
> +  bool Changed = OMPOpt.run(true);
> +  if (Changed)
> +    return PreservedAnalyses::none();
> +
> +  return PreservedAnalyses::all();
> +}
> +
> +PreservedAnalyses OpenMPOptCGSCCPass::run(LazyCallGraph::SCC &C,
> +                                          CGSCCAnalysisManager &AM,
> +                                          LazyCallGraph &CG,
> +                                          CGSCCUpdateResult &UR) {
>    if (!containsOpenMP(*C.begin()->getFunction().getParent(), OMPInModule))
>      return PreservedAnalyses::all();
>
> @@ -2299,33 +2346,32 @@ PreservedAnalyses OpenMPOptPass::run(LazyCallGraph::SCC &C,
>      return FAM.getResult<OptimizationRemarkEmitterAnalysis>(*F);
>    };
>
> +  BumpPtrAllocator Allocator;
>    CallGraphUpdater CGUpdater;
>    CGUpdater.initialize(CG, C, AM, UR);
>
>    SetVector<Function *> Functions(SCC.begin(), SCC.end());
> -  BumpPtrAllocator Allocator;
>    OMPInformationCache InfoCache(*(Functions.back()->getParent()), AG, Allocator,
>                                  /*CGSCC*/ Functions, OMPInModule.getKernels());
>
>    Attributor A(Functions, InfoCache, CGUpdater);
>
>    OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
> -  bool Changed = OMPOpt.run();
> +  bool Changed = OMPOpt.run(false);
>    if (Changed)
>      return PreservedAnalyses::none();
>
>    return PreservedAnalyses::all();
>  }
> -
>  namespace {
>
> -struct OpenMPOptLegacyPass : public CallGraphSCCPass {
> +struct OpenMPOptCGSCCLegacyPass : public CallGraphSCCPass {
>    CallGraphUpdater CGUpdater;
>    OpenMPInModule OMPInModule;
>    static char ID;
>
> -  OpenMPOptLegacyPass() : CallGraphSCCPass(ID) {
> -    initializeOpenMPOptLegacyPassPass(*PassRegistry::getPassRegistry());
> +  OpenMPOptCGSCCLegacyPass() : CallGraphSCCPass(ID) {
> +    initializeOpenMPOptCGSCCLegacyPassPass(*PassRegistry::getPassRegistry());
>    }
>
>    void getAnalysisUsage(AnalysisUsage &AU) const override {
> @@ -2386,7 +2432,7 @@ struct OpenMPOptLegacyPass : public CallGraphSCCPass {
>      Attributor A(Functions, InfoCache, CGUpdater);
>
>      OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
> -    return OMPOpt.run();
> +    return OMPOpt.run(false);
>    }
>
>    bool doFinalization(CallGraph &CG) override { return CGUpdater.finalize(); }
> @@ -2450,12 +2496,14 @@ bool llvm::omp::containsOpenMP(Module &M, OpenMPInModule &OMPInModule) {
>    return OMPInModule = false;
>  }
>
> -char OpenMPOptLegacyPass::ID = 0;
> +char OpenMPOptCGSCCLegacyPass::ID = 0;
>
> -INITIALIZE_PASS_BEGIN(OpenMPOptLegacyPass, "openmpopt",
> +INITIALIZE_PASS_BEGIN(OpenMPOptCGSCCLegacyPass, "openmp-opt-cgscc",
>                        "OpenMP specific optimizations", false, false)
>  INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
> -INITIALIZE_PASS_END(OpenMPOptLegacyPass, "openmpopt",
> +INITIALIZE_PASS_END(OpenMPOptCGSCCLegacyPass, "openmp-opt-cgscc",
>                      "OpenMP specific optimizations", false, false)
>
> -Pass *llvm::createOpenMPOptLegacyPass() { return new OpenMPOptLegacyPass(); }
> +Pass *llvm::createOpenMPOptCGSCCLegacyPass() {
> +  return new OpenMPOptCGSCCLegacyPass();
> +}
>
> diff  --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
> index 19e212f738ade..c18e868e7a46d 100644
> --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
> +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
> @@ -668,7 +668,7 @@ void PassManagerBuilder::populateModulePassManager(
>    // Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
>    // there are no OpenMP runtime calls present in the module.
>    if (OptLevel > 1)
> -    MPM.add(createOpenMPOptLegacyPass());
> +    MPM.add(createOpenMPOptCGSCCLegacyPass());
>
>    MPM.add(createPostOrderFunctionAttrsLegacyPass());
>    if (OptLevel > 2)
> @@ -1028,7 +1028,7 @@ void PassManagerBuilder::addLTOOptimizationPasses(legacy::PassManagerBase &PM) {
>    // Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
>    // there are no OpenMP runtime calls present in the module.
>    if (OptLevel > 1)
> -    PM.add(createOpenMPOptLegacyPass());
> +    PM.add(createOpenMPOptCGSCCLegacyPass());
>
>    // Optimize globals again if we ran the inliner.
>    if (RunInliner)
>
> diff  --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll
> index c929bb2814924..c934bb9978aa9 100644
> --- a/llvm/test/Other/new-pm-defaults.ll
> +++ b/llvm/test/Other/new-pm-defaults.ll
> @@ -89,6 +89,8 @@
>  ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
>  ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
>  ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION-NEXT: Running pass: NoOpModulePass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
> @@ -124,8 +126,8 @@
>  ; CHECK-O-NEXT: Running pass: InlinerPass
>  ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass on (foo)
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass on (foo)
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
>  ; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass
>  ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-defaults.ll b/llvm/test/Other/new-pm-thinlto-defaults.ll
> index db2aafeb1b934..d720193315c99 100644
> --- a/llvm/test/Other/new-pm-thinlto-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-defaults.ll
> @@ -74,6 +74,8 @@
>  ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
>  ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
>  ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-POSTLINK-O-NEXT: Running pass: LowerTypeTestsPass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
> @@ -108,8 +110,8 @@
>  ; CHECK-O-NEXT: Running pass: InlinerPass
>  ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass on (foo)
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass on (foo)
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
>  ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>  ; CHECK-O-NEXT: Running pass: EarlyCSEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> index ca2705a1ac492..45bdfcca38737 100644
> --- a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> @@ -44,6 +44,8 @@
>  ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
>  ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
>  ; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-O-NEXT: Running pass: LowerTypeTestsPass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
> @@ -82,8 +84,8 @@
>  ; CHECK-O-NEXT: Running pass: InlinerPass
>  ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
>  ; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>  ; CHECK-O-NEXT: Running pass: EarlyCSEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> index bf8e2fd9538ad..dabc8ff6ad48e 100644
> --- a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> @@ -58,6 +58,8 @@
>  ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
>  ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
>  ; CHECK-O-NEXT: Running pass: PGOIndirectCallPromotion
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-O-NEXT: Running pass: LowerTypeTestsPass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
> @@ -91,8 +93,8 @@
>  ; CHECK-O-NEXT: Running pass: InlinerPass
>  ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
>  ; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>  ; CHECK-O-NEXT: Running pass: EarlyCSEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> index 0d7a1c44e0c2a..2b99f89b73427 100644
> --- a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> @@ -45,6 +45,8 @@
>  ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
>  ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
>  ; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>  ; CHECK-O-NEXT: Running pass: GlobalOptPass
> @@ -116,8 +118,8 @@
>  ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
>  ; CHECK-O3-NEXT: Running analysis: TargetIRAnalysis
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
>  ; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>  ; CHECK-O-NEXT: Running pass: EarlyCSEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> index e577e837e8e74..0a6fe8615a201 100644
> --- a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> @@ -55,6 +55,8 @@
>  ; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
>  ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
>  ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
> +; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptPass
>  ; CHECK-O-NEXT: Running pass: IPSCCPPass
>  ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>  ; CHECK-O-NEXT: Running pass: GlobalOptPass
> @@ -86,8 +88,8 @@
>  ; CHECK-O-NEXT: Running pass: InlinerPass
>  ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
>  ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O2-NEXT: Running pass: OpenMPOptPass
> -; CHECK-O3-NEXT: Running pass: OpenMPOptPass
> +; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
> +; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
>  ; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
>  ; CHECK-O-NEXT: Running pass: SROA
>  ; CHECK-O-NEXT: Running pass: EarlyCSEPass
>
> diff  --git a/llvm/test/Transforms/OpenMP/add_attributes.ll b/llvm/test/Transforms/OpenMP/add_attributes.ll
> index 087fc572b02f0..454dfeb43273c 100644
> --- a/llvm/test/Transforms/OpenMP/add_attributes.ll
> +++ b/llvm/test/Transforms/OpenMP/add_attributes.ll
> @@ -1,7 +1,7 @@
> -; RUN: opt < %s -S -openmpopt        | FileCheck %s
> -; RUN: opt < %s -S -passes=openmpopt | FileCheck %s
> -; RUN: opt < %s -S -openmpopt        -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> -; RUN: opt < %s -S -passes=openmpopt -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> +; RUN: opt < %s -S -openmp-opt-cgscc        | FileCheck %s
> +; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s
> +; RUN: opt < %s -S -openmp-opt-cgscc        -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> +; RUN: opt < %s -S -passes=openmp-opt-cgscc -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
>  %struct.omp_lock_t = type { i8* }
>
> diff  --git a/llvm/test/Transforms/OpenMP/add_attributes_amdgcn.ll b/llvm/test/Transforms/OpenMP/add_attributes_amdgcn.ll
> index acf547d4437f6..5b40feb1470c2 100644
> --- a/llvm/test/Transforms/OpenMP/add_attributes_amdgcn.ll
> +++ b/llvm/test/Transforms/OpenMP/add_attributes_amdgcn.ll
> @@ -1,7 +1,7 @@
> -; RUN: opt < %s -S -openmpopt        | FileCheck %s
> -; RUN: opt < %s -S -passes=openmpopt | FileCheck %s
> -; RUN: opt < %s -S -openmpopt        -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> -; RUN: opt < %s -S -passes=openmpopt -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> +; RUN: opt < %s -S -openmp-opt-cgscc        | FileCheck %s
> +; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s
> +; RUN: opt < %s -S -openmp-opt-cgscc        -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
> +; RUN: opt < %s -S -passes=openmp-opt-cgscc -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
>
>  target triple = "amdgcn-amd-amdhsa"
>
>
> diff  --git a/llvm/test/Transforms/OpenMP/attributor_module_slice_reproducer.ll b/llvm/test/Transforms/OpenMP/attributor_module_slice_reproducer.ll
> index 3d30ebb9ad852..2b415d96e6611 100644
> --- a/llvm/test/Transforms/OpenMP/attributor_module_slice_reproducer.ll
> +++ b/llvm/test/Transforms/OpenMP/attributor_module_slice_reproducer.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
> -; RUN: opt -S -openmpopt < %s | FileCheck %s
> -; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
> +; RUN: opt -S -openmp-opt-cgscc < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
>
>  define internal fastcc void @"_omp$reduction$reduction_func14"() unnamed_addr {
>    %call = call i8 @_ZStplIdESt7complexIT_ERKS2_S4_()
>
> diff  --git a/llvm/test/Transforms/OpenMP/dead_use.ll b/llvm/test/Transforms/OpenMP/dead_use.ll
> index 4aca7935b10c1..6e15a14f8377a 100644
> --- a/llvm/test/Transforms/OpenMP/dead_use.ll
> +++ b/llvm/test/Transforms/OpenMP/dead_use.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
> -; RUN: opt -S -openmpopt < %s | FileCheck %s
> -; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
> +; RUN: opt -S -openmp-opt-cgscc < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
>  %struct.ident_t = type { i32, i32, i32, i32, i8* }
>
>  @.str = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
>
> diff  --git a/llvm/test/Transforms/OpenMP/deduplication.ll b/llvm/test/Transforms/OpenMP/deduplication.ll
> index 9074b948cc3fe..5c86d43c56c44 100644
> --- a/llvm/test/Transforms/OpenMP/deduplication.ll
> +++ b/llvm/test/Transforms/OpenMP/deduplication.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
> -; RUN: opt -openmpopt -S < %s | FileCheck %s
> -; RUN: opt -passes=openmpopt -S < %s | FileCheck %s
> +; RUN: opt -openmp-opt-cgscc -S < %s | FileCheck %s
> +; RUN: opt -passes=openmp-opt-cgscc -S < %s | FileCheck %s
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
>  %struct.ident_t = type { i32, i32, i32, i32, i8* }
>
> diff  --git a/llvm/test/Transforms/OpenMP/deduplication_remarks.ll b/llvm/test/Transforms/OpenMP/deduplication_remarks.ll
> index d04cc66c58e44..85fec050080be 100644
> --- a/llvm/test/Transforms/OpenMP/deduplication_remarks.ll
> +++ b/llvm/test/Transforms/OpenMP/deduplication_remarks.ll
> @@ -1,5 +1,5 @@
> -; RUN: opt -openmpopt -pass-remarks=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
> -; RUN: opt -passes=openmpopt -pass-remarks=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -openmp-opt-cgscc -pass-remarks=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
>  ; ModuleID = 'deduplication_remarks.c'
>  source_filename = "deduplication_remarks.c"
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
> diff  --git a/llvm/test/Transforms/OpenMP/globalization_remarks.ll b/llvm/test/Transforms/OpenMP/globalization_remarks.ll
> index ea0ed82e15aeb..9c913d381c513 100644
> --- a/llvm/test/Transforms/OpenMP/globalization_remarks.ll
> +++ b/llvm/test/Transforms/OpenMP/globalization_remarks.ll
> @@ -1,4 +1,4 @@
> -; RUN: opt -passes=openmpopt -pass-remarks-analysis=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -passes=openmp-opt -pass-remarks-analysis=openmp-opt -disable-output < %s 2>&1 | FileCheck %s
>  ; ModuleID = 'declare_target_codegen_globalization.cpp'
>  source_filename = "declare_target_codegen_globalization.cpp"
>  target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"
>
> diff  --git a/llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll b/llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll
> index ccdf0b981dc2c..3f2f72d4e0b95 100644
> --- a/llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll
> +++ b/llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll
> @@ -1,5 +1,5 @@
> -; RUN: opt -passes=openmpopt -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
> -; RUN: opt        -openmpopt -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
> +; RUN: opt -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
> +; RUN: opt        -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
>
>  ; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel1
>  ; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel2
>
> diff  --git a/llvm/test/Transforms/OpenMP/gpu_state_machine_function_ptr_replacement.ll b/llvm/test/Transforms/OpenMP/gpu_state_machine_function_ptr_replacement.ll
> index f1f457c6e43e1..9660c24de3ce8 100644
> --- a/llvm/test/Transforms/OpenMP/gpu_state_machine_function_ptr_replacement.ll
> +++ b/llvm/test/Transforms/OpenMP/gpu_state_machine_function_ptr_replacement.ll
> @@ -1,6 +1,6 @@
> -; RUN: opt -S -passes=openmpopt -openmp-ir-builder-optimistic-attributes -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
> -; RUN: opt -S -passes=openmpopt -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
> -; RUN: opt -S        -openmpopt -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc -openmp-ir-builder-optimistic-attributes -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
> +; RUN: opt -S        -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
>
>  ; C input used for this test:
>
>
> diff  --git a/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll b/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
> index e34a2364044c2..abc0d8769c240 100644
> --- a/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
> +++ b/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll
> @@ -1,5 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --function-signature --scrub-attributes
> -; RUN: opt -S -passes=openmpopt -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency < %s | FileCheck %s
> +; RUN: opt -S -openmp-opt-cgscc -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency < %s | FileCheck %s
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
>  ; CHECK: %struct.__tgt_async_info = type { i8* }
>
> diff  --git a/llvm/test/Transforms/OpenMP/icv_remarks.ll b/llvm/test/Transforms/OpenMP/icv_remarks.ll
> index 19fcaac63c482..ee384c6dc1445 100644
> --- a/llvm/test/Transforms/OpenMP/icv_remarks.ll
> +++ b/llvm/test/Transforms/OpenMP/icv_remarks.ll
> @@ -1,5 +1,5 @@
> -; RUN: opt -passes=openmpopt -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
> -; RUN: opt -openmpopt -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
>
>  ; ModuleID = 'icv_remarks.c'
>  source_filename = "icv_remarks.c"
>
> diff  --git a/llvm/test/Transforms/OpenMP/icv_tracking.ll b/llvm/test/Transforms/OpenMP/icv_tracking.ll
> index 6cfad365ecbd2..a5e93b1e53d34 100644
> --- a/llvm/test/Transforms/OpenMP/icv_tracking.ll
> +++ b/llvm/test/Transforms/OpenMP/icv_tracking.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
> -; RUN: opt -S -openmpopt < %s | FileCheck %s
> -; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
> +; RUN: opt -S -openmp-opt-cgscc < %s | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
>
>  %struct.ident_t = type { i32, i32, i32, i32, i8* }
>
>
> diff  --git a/llvm/test/Transforms/OpenMP/parallel_deletion.ll b/llvm/test/Transforms/OpenMP/parallel_deletion.ll
> index c7b870f1df7ba..633a7616cf30c 100644
> --- a/llvm/test/Transforms/OpenMP/parallel_deletion.ll
> +++ b/llvm/test/Transforms/OpenMP/parallel_deletion.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
> -; RUN: opt -S -attributor -openmpopt  < %s | FileCheck %s
> -; RUN: opt -S -passes='attributor,cgscc(openmpopt)'  < %s | FileCheck %s
> +; RUN: opt -S -attributor -openmp-opt-cgscc  < %s | FileCheck %s
> +; RUN: opt -S -passes='attributor,cgscc(openmp-opt-cgscc)'  < %s | FileCheck %s
>  ;
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
>
> diff  --git a/llvm/test/Transforms/OpenMP/parallel_deletion_remarks.ll b/llvm/test/Transforms/OpenMP/parallel_deletion_remarks.ll
> index eea76bf590f8f..49041200f249e 100644
> --- a/llvm/test/Transforms/OpenMP/parallel_deletion_remarks.ll
> +++ b/llvm/test/Transforms/OpenMP/parallel_deletion_remarks.ll
> @@ -1,5 +1,5 @@
> -; RUN: opt -S -pass-remarks=openmp-opt -attributor -openmpopt -disable-output < %s 2>&1 | FileCheck %s
> -; RUN: opt -S -pass-remarks=openmp-opt -passes='attributor,cgscc(openmpopt)' -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -S -pass-remarks=openmp-opt -attributor -openmp-opt-cgscc -disable-output < %s 2>&1 | FileCheck %s
> +; RUN: opt -S -pass-remarks=openmp-opt -passes='attributor,cgscc(openmp-opt-cgscc)' -disable-output < %s 2>&1 | FileCheck %s
>  ; ModuleID = 'parallel_deletion_remarks.ll'
>  source_filename = "parallel_deletion_remarks.c"
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
> diff  --git a/llvm/test/Transforms/OpenMP/parallel_region_merging.ll b/llvm/test/Transforms/OpenMP/parallel_region_merging.ll
> index 06a790c7380b3..1afb842311166 100644
> --- a/llvm/test/Transforms/OpenMP/parallel_region_merging.ll
> +++ b/llvm/test/Transforms/OpenMP/parallel_region_merging.ll
> @@ -1,6 +1,6 @@
>  ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs
> -; RUN: opt -S -attributor -openmpopt -openmp-opt-enable-merging -enable-new-pm=0 < %s | FileCheck %s
> -; RUN: opt -S -aa-pipeline= -passes='attributor,cgscc(openmpopt)' -openmp-opt-enable-merging  < %s | FileCheck %s
> +; RUN: opt -S -attributor -openmp-opt-cgscc -openmp-opt-enable-merging -enable-new-pm=0 < %s | FileCheck %s
> +; RUN: opt -S -aa-pipeline= -passes='attributor,cgscc(openmp-opt-cgscc)' -openmp-opt-enable-merging  < %s | FileCheck %s
>  ; #include <omp.h>
>  ; void foo();
>  ; void use(int);
>
> diff  --git a/llvm/test/Transforms/OpenMP/rtf_type_checking.ll b/llvm/test/Transforms/OpenMP/rtf_type_checking.ll
> index 5433adcd8abdd..ae671ca057677 100644
> --- a/llvm/test/Transforms/OpenMP/rtf_type_checking.ll
> +++ b/llvm/test/Transforms/OpenMP/rtf_type_checking.ll
> @@ -1,7 +1,7 @@
> -; RUN: opt -S -openmpopt -stats < %s 2>&1 -enable-new-pm=0 | FileCheck %s --check-prefixes=CHECK,LPM
> -; RUN: opt -S -passes='devirt<2>(cgscc(openmpopt))' -stats -debug-pass-manager < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NPM
> -; RUN: opt -S -attributor -openmpopt -stats < %s 2>&1 -enable-new-pm=0 | FileCheck %s --check-prefixes=CHECK,LPM
> -; RUN: opt -S -passes='attributor,cgscc(devirt<2>(openmpopt))' -stats -debug-pass-manager < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NPM
> +; RUN: opt -S -openmp-opt-cgscc -stats < %s 2>&1 -enable-new-pm=0 | FileCheck %s --check-prefixes=CHECK,LPM
> +; RUN: opt -S -passes='devirt<2>(cgscc(openmp-opt-cgscc))' -stats -debug-pass-manager < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NPM
> +; RUN: opt -S -attributor -openmp-opt-cgscc -stats < %s 2>&1 -enable-new-pm=0 | FileCheck %s --check-prefixes=CHECK,LPM
> +; RUN: opt -S -passes='attributor,cgscc(devirt<2>(openmp-opt-cgscc))' -stats -debug-pass-manager < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NPM
>  ; REQUIRES: asserts
>
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
> @@ -57,10 +57,10 @@ declare void @omp_get_thread_num()
>  !2 = !{!3}
>  !3 = !{i64 2, i64 -1, i64 -1, i1 true}
>
> -; NPM: Running pass: OpenMPOptPass on (.omp_outlined.)
> -; NPM-NOT: Running pass: OpenMPOptPass on (.omp_outlined.)
> -; NPM: Running pass: OpenMPOptPass on (main)
> -; NPM-NOT: Running pass: OpenMPOptPass on (main)
> +; NPM: Running pass: OpenMPOptCGSCCPass on (.omp_outlined.)
> +; NPM-NOT: Running pass: OpenMPOptCGSCCPass on (.omp_outlined.)
> +; NPM: Running pass: OpenMPOptCGSCCPass on (main)
> +; NPM-NOT: Running pass: OpenMPOptCGSCCPass on (main)
>  ; ===-------------------------------------------------------------------------===
>  ;                         ... Statistics Collected ...
>  ; ===-------------------------------------------------------------------------===
>
> diff  --git a/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll b/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
> index 2381cfdbce56d..fdd8bd4d463f6 100644
> --- a/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
> +++ b/llvm/test/Transforms/OpenMP/values_in_offload_arrays.ll
> @@ -1,4 +1,5 @@
> -; RUN: opt -S -passes=openmpopt -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency -debug-only=openmp-opt < %s 2>&1 | FileCheck %s
> +; RUN: opt -S -openmp-opt-cgscc -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency -debug-only=openmp-opt < %s 2>&1 | FileCheck %s
> +; RUN: opt -S -passes=openmp-opt-cgscc -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency -debug-only=openmp-opt < %s 2>&1 | FileCheck %s
>  ; REQUIRES: asserts
>
>  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>
> diff  --git a/llvm/test/Transforms/PhaseOrdering/openmp-opt-module.ll b/llvm/test/Transforms/PhaseOrdering/openmp-opt-module.ll
> new file mode 100644
> index 0000000000000..81c31e9177034
> --- /dev/null
> +++ b/llvm/test/Transforms/PhaseOrdering/openmp-opt-module.ll
> @@ -0,0 +1,46 @@
> +; RUN: opt -O2 -pass-remarks-analysis=openmp-opt -enable-new-pm < %s 2>&1 | FileCheck %s --check-prefix=MODULE
> +target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"
> +
> + at .str = private unnamed_addr constant [13 x i8] c"Alloc Shared\00", align 1
> +
> +; MODULE: remark: openmp_opt_module.c:5:7: Found thread data sharing on the GPU. Expect degraded performance due to data globalization.
> +
> +define void @foo() {
> +entry:
> +  %x = call i8* @__kmpc_data_sharing_push_stack(i64 4, i16 0), !dbg !7
> +  %x_on_stack = bitcast i8* %x to i32*
> +  %0 = bitcast i32* %x_on_stack to i8*
> +  call void @use(i8* %0)
> +  call void @__kmpc_data_sharing_pop_stack(i8* %x)
> +  ret void
> +}
> +
> +define void @use(i8* %0) {
> +entry:
> +  %.addr = alloca i8*, align 8
> +  store i8* %0, i8** %.addr, align 8
> +  ret void
> +}
> +
> +define internal i8* @__kmpc_data_sharing_push_stack(i64 %DataSize, i16 %shared) {
> +entry:
> +  %call = call i8* @_Z10SafeMallocmPKc(i64 %DataSize, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0)) #11
> +  ret i8* %call
> +}
> +
> +; Function Attrs: convergent nounwind mustprogress
> +declare i8* @_Z10SafeMallocmPKc(i64 %size, i8* nocapture readnone %msg)
> +
> +declare void @__kmpc_data_sharing_pop_stack(i8*)
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!3, !4}
> +
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 12.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
> +!1 = !DIFile(filename: "openmp_opt_module.c", directory: "/tmp/openmp_opt_module.c")
> +!2 = !{}
> +!3 = !{i32 2, !"Debug Info Version", i32 3}
> +!4 = !{i32 1, !"wchar_size", i32 4}
> +!5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !6, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
> +!6 = !DISubroutineType(types: !2)
> +!7 = !DILocation(line: 5, column: 7, scope: !5)
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list