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

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 30 08:15:34 PDT 2021


Thank you. This was the latest related test involving the pass
managers after I noticed the fail, maybe it was too self-suggesting it
was the case. Thank you for fixing anyway.

Michael


Am Di., 27. Apr. 2021 um 15:47 Uhr schrieb Huber, Joseph <jhuber6 at vols.utk.edu>:
>
> Michael,
>
> The problem is the hide-mem-transfer-latency passes, I'm not sure what the issue is. I'm not sure this was the patch that broke them, I checked out the previous commit (087e98aab0ac9ceebe09449348f47c1fb3b18b6d) with the new pass manager disabled and got the same error. The easiest solution is to just remove the old PM lines from the two tests that fail.
> ________________________________
> From: Michael Kruse <llvm-commits at meinersbur.de>
> Sent: Tuesday, April 27, 2021 4:28 PM
> To: Huber, Joseph <jhuber6 at vols.utk.edu>; Joseph Huber <llvmlistbot at llvm.org>
> Cc: llvm-commits <llvm-commits at lists.llvm.org>
> Subject: Re: [llvm] b2ad63d - [OpenMP] Add OpenMPOpt as a Module pass
>
> 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