forked from OSchip/llvm-project
[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
This commit is contained in:
parent
087e98aab0
commit
b2ad63d3cf
|
@ -75,7 +75,7 @@ void initializeAssumeSimplifyPassLegacyPassPass(PassRegistry &);
|
||||||
void initializeAssumeBuilderPassLegacyPassPass(PassRegistry &);
|
void initializeAssumeBuilderPassLegacyPassPass(PassRegistry &);
|
||||||
void initializeAnnotation2MetadataLegacyPass(PassRegistry &);
|
void initializeAnnotation2MetadataLegacyPass(PassRegistry &);
|
||||||
void initializeAnnotationRemarksLegacyPass(PassRegistry &);
|
void initializeAnnotationRemarksLegacyPass(PassRegistry &);
|
||||||
void initializeOpenMPOptLegacyPassPass(PassRegistry &);
|
void initializeOpenMPOptCGSCCLegacyPassPass(PassRegistry &);
|
||||||
void initializeArgPromotionPass(PassRegistry&);
|
void initializeArgPromotionPass(PassRegistry&);
|
||||||
void initializeAssumptionCacheTrackerPass(PassRegistry&);
|
void initializeAssumptionCacheTrackerPass(PassRegistry&);
|
||||||
void initializeAtomicExpandPass(PassRegistry&);
|
void initializeAtomicExpandPass(PassRegistry&);
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace {
|
||||||
(void) llvm::createAggressiveDCEPass();
|
(void) llvm::createAggressiveDCEPass();
|
||||||
(void) llvm::createAggressiveInstCombinerPass();
|
(void) llvm::createAggressiveInstCombinerPass();
|
||||||
(void) llvm::createBitTrackingDCEPass();
|
(void) llvm::createBitTrackingDCEPass();
|
||||||
(void) llvm::createOpenMPOptLegacyPass();
|
(void)llvm::createOpenMPOptCGSCCLegacyPass();
|
||||||
(void) llvm::createArgumentPromotionPass();
|
(void) llvm::createArgumentPromotionPass();
|
||||||
(void) llvm::createAlignmentFromAssumptionsPass();
|
(void) llvm::createAlignmentFromAssumptionsPass();
|
||||||
(void) llvm::createBasicAAWrapperPass();
|
(void) llvm::createBasicAAWrapperPass();
|
||||||
|
|
|
@ -160,7 +160,7 @@ Pass *createArgumentPromotionPass(unsigned maxElements = 3);
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
/// createOpenMPOptLegacyPass - OpenMP specific optimizations.
|
/// createOpenMPOptLegacyPass - OpenMP specific optimizations.
|
||||||
Pass *createOpenMPOptLegacyPass();
|
Pass *createOpenMPOptCGSCCLegacyPass();
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
/// createIPSCCPPass - This pass propagates constants from call sites into the
|
/// createIPSCCPPass - This pass propagates constants from call sites into the
|
||||||
|
|
|
@ -66,6 +66,14 @@ class OpenMPOptPass : public PassInfoMixin<OpenMPOptPass> {
|
||||||
/// Helper to remember if the module contains OpenMP (runtime calls).
|
/// Helper to remember if the module contains OpenMP (runtime calls).
|
||||||
omp::OpenMPInModule OMPInModule;
|
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:
|
public:
|
||||||
PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
|
PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
|
||||||
LazyCallGraph &CG, CGSCCUpdateResult &UR);
|
LazyCallGraph &CG, CGSCCUpdateResult &UR);
|
||||||
|
|
|
@ -1010,7 +1010,7 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
|
||||||
// Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
|
// Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
|
||||||
// there are no OpenMP runtime calls present in the module.
|
// there are no OpenMP runtime calls present in the module.
|
||||||
if (Level == OptimizationLevel::O2 || Level == OptimizationLevel::O3)
|
if (Level == OptimizationLevel::O2 || Level == OptimizationLevel::O3)
|
||||||
MainCGPipeline.addPass(OpenMPOptPass());
|
MainCGPipeline.addPass(OpenMPOptCGSCCPass());
|
||||||
|
|
||||||
for (auto &C : CGSCCOptimizerLateEPCallbacks)
|
for (auto &C : CGSCCOptimizerLateEPCallbacks)
|
||||||
C(MainCGPipeline, Level);
|
C(MainCGPipeline, Level);
|
||||||
|
@ -1108,6 +1108,11 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
||||||
PGOIndirectCallPromotion(true /* IsInLTO */, true /* SamplePGO */));
|
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)
|
if (AttributorRun & AttributorRunOption::MODULE)
|
||||||
MPM.addPass(AttributorPass());
|
MPM.addPass(AttributorPass());
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ MODULE_ALIAS_ANALYSIS("globals-aa", GlobalsAA())
|
||||||
MODULE_PASS("always-inline", AlwaysInlinerPass())
|
MODULE_PASS("always-inline", AlwaysInlinerPass())
|
||||||
MODULE_PASS("attributor", AttributorPass())
|
MODULE_PASS("attributor", AttributorPass())
|
||||||
MODULE_PASS("annotation2metadata", Annotation2MetadataPass())
|
MODULE_PASS("annotation2metadata", Annotation2MetadataPass())
|
||||||
|
MODULE_PASS("openmp-opt", OpenMPOptPass())
|
||||||
MODULE_PASS("called-value-propagation", CalledValuePropagationPass())
|
MODULE_PASS("called-value-propagation", CalledValuePropagationPass())
|
||||||
MODULE_PASS("canonicalize-aliases", CanonicalizeAliasesPass())
|
MODULE_PASS("canonicalize-aliases", CanonicalizeAliasesPass())
|
||||||
MODULE_PASS("cg-profile", CGProfilePass())
|
MODULE_PASS("cg-profile", CGProfilePass())
|
||||||
|
@ -138,7 +139,7 @@ CGSCC_PASS("invalidate<all>", InvalidateAllAnalysesPass())
|
||||||
CGSCC_PASS("function-attrs", PostOrderFunctionAttrsPass())
|
CGSCC_PASS("function-attrs", PostOrderFunctionAttrsPass())
|
||||||
CGSCC_PASS("attributor-cgscc", AttributorCGSCCPass())
|
CGSCC_PASS("attributor-cgscc", AttributorCGSCCPass())
|
||||||
CGSCC_PASS("inline", InlinerPass())
|
CGSCC_PASS("inline", InlinerPass())
|
||||||
CGSCC_PASS("openmpopt", OpenMPOptPass())
|
CGSCC_PASS("openmp-opt-cgscc", OpenMPOptCGSCCPass())
|
||||||
CGSCC_PASS("coro-split", CoroSplitPass())
|
CGSCC_PASS("coro-split", CoroSplitPass())
|
||||||
CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass())
|
CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass())
|
||||||
#undef CGSCC_PASS
|
#undef CGSCC_PASS
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
void llvm::initializeIPO(PassRegistry &Registry) {
|
void llvm::initializeIPO(PassRegistry &Registry) {
|
||||||
initializeOpenMPOptLegacyPassPass(Registry);
|
initializeOpenMPOptCGSCCLegacyPassPass(Registry);
|
||||||
initializeArgPromotionPass(Registry);
|
initializeArgPromotionPass(Registry);
|
||||||
initializeAnnotation2MetadataLegacyPass(Registry);
|
initializeAnnotation2MetadataLegacyPass(Registry);
|
||||||
initializeCalledValuePropagationLegacyPassPass(Registry);
|
initializeCalledValuePropagationLegacyPassPass(Registry);
|
||||||
|
|
|
@ -495,7 +495,7 @@ struct OpenMPOpt {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Run all OpenMP optimizations on the underlying SCC/ModuleSlice.
|
/// Run all OpenMP optimizations on the underlying SCC/ModuleSlice.
|
||||||
bool run() {
|
bool run(bool IsModulePass) {
|
||||||
if (SCC.empty())
|
if (SCC.empty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -505,6 +505,10 @@ struct OpenMPOpt {
|
||||||
<< " functions in a slice with "
|
<< " functions in a slice with "
|
||||||
<< OMPInfoCache.ModuleSlice.size() << " functions\n");
|
<< OMPInfoCache.ModuleSlice.size() << " functions\n");
|
||||||
|
|
||||||
|
if (IsModulePass) {
|
||||||
|
if (remarksEnabled())
|
||||||
|
analysisGlobalization();
|
||||||
|
} else {
|
||||||
if (PrintICVValues)
|
if (PrintICVValues)
|
||||||
printICVs();
|
printICVs();
|
||||||
if (PrintOpenMPKernels)
|
if (PrintOpenMPKernels)
|
||||||
|
@ -520,8 +524,6 @@ struct OpenMPOpt {
|
||||||
Changed |= deleteParallelRegions();
|
Changed |= deleteParallelRegions();
|
||||||
if (HideMemoryTransferLatency)
|
if (HideMemoryTransferLatency)
|
||||||
Changed |= hideMemTransfersLatency();
|
Changed |= hideMemTransfersLatency();
|
||||||
if (remarksEnabled())
|
|
||||||
analysisGlobalization();
|
|
||||||
Changed |= deduplicateRuntimeCalls();
|
Changed |= deduplicateRuntimeCalls();
|
||||||
if (EnableParallelRegionMerging) {
|
if (EnableParallelRegionMerging) {
|
||||||
if (mergeParallelRegions()) {
|
if (mergeParallelRegions()) {
|
||||||
|
@ -529,6 +531,7 @@ struct OpenMPOpt {
|
||||||
Changed = true;
|
Changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Changed;
|
return Changed;
|
||||||
}
|
}
|
||||||
|
@ -967,6 +970,7 @@ private:
|
||||||
|
|
||||||
for (auto &MergableCIs : MergableCIsVector)
|
for (auto &MergableCIs : MergableCIsVector)
|
||||||
Merge(MergableCIs, BB);
|
Merge(MergableCIs, BB);
|
||||||
|
MergableCIsVector.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2263,9 +2267,52 @@ AAICVTracker &AAICVTracker::createForPosition(const IRPosition &IRP,
|
||||||
return *AA;
|
return *AA;
|
||||||
}
|
}
|
||||||
|
|
||||||
PreservedAnalyses OpenMPOptPass::run(LazyCallGraph::SCC &C,
|
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,
|
CGSCCAnalysisManager &AM,
|
||||||
LazyCallGraph &CG, CGSCCUpdateResult &UR) {
|
LazyCallGraph &CG,
|
||||||
|
CGSCCUpdateResult &UR) {
|
||||||
if (!containsOpenMP(*C.begin()->getFunction().getParent(), OMPInModule))
|
if (!containsOpenMP(*C.begin()->getFunction().getParent(), OMPInModule))
|
||||||
return PreservedAnalyses::all();
|
return PreservedAnalyses::all();
|
||||||
|
|
||||||
|
@ -2299,33 +2346,32 @@ PreservedAnalyses OpenMPOptPass::run(LazyCallGraph::SCC &C,
|
||||||
return FAM.getResult<OptimizationRemarkEmitterAnalysis>(*F);
|
return FAM.getResult<OptimizationRemarkEmitterAnalysis>(*F);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BumpPtrAllocator Allocator;
|
||||||
CallGraphUpdater CGUpdater;
|
CallGraphUpdater CGUpdater;
|
||||||
CGUpdater.initialize(CG, C, AM, UR);
|
CGUpdater.initialize(CG, C, AM, UR);
|
||||||
|
|
||||||
SetVector<Function *> Functions(SCC.begin(), SCC.end());
|
SetVector<Function *> Functions(SCC.begin(), SCC.end());
|
||||||
BumpPtrAllocator Allocator;
|
|
||||||
OMPInformationCache InfoCache(*(Functions.back()->getParent()), AG, Allocator,
|
OMPInformationCache InfoCache(*(Functions.back()->getParent()), AG, Allocator,
|
||||||
/*CGSCC*/ Functions, OMPInModule.getKernels());
|
/*CGSCC*/ Functions, OMPInModule.getKernels());
|
||||||
|
|
||||||
Attributor A(Functions, InfoCache, CGUpdater);
|
Attributor A(Functions, InfoCache, CGUpdater);
|
||||||
|
|
||||||
OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
|
OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
|
||||||
bool Changed = OMPOpt.run();
|
bool Changed = OMPOpt.run(false);
|
||||||
if (Changed)
|
if (Changed)
|
||||||
return PreservedAnalyses::none();
|
return PreservedAnalyses::none();
|
||||||
|
|
||||||
return PreservedAnalyses::all();
|
return PreservedAnalyses::all();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
struct OpenMPOptLegacyPass : public CallGraphSCCPass {
|
struct OpenMPOptCGSCCLegacyPass : public CallGraphSCCPass {
|
||||||
CallGraphUpdater CGUpdater;
|
CallGraphUpdater CGUpdater;
|
||||||
OpenMPInModule OMPInModule;
|
OpenMPInModule OMPInModule;
|
||||||
static char ID;
|
static char ID;
|
||||||
|
|
||||||
OpenMPOptLegacyPass() : CallGraphSCCPass(ID) {
|
OpenMPOptCGSCCLegacyPass() : CallGraphSCCPass(ID) {
|
||||||
initializeOpenMPOptLegacyPassPass(*PassRegistry::getPassRegistry());
|
initializeOpenMPOptCGSCCLegacyPassPass(*PassRegistry::getPassRegistry());
|
||||||
}
|
}
|
||||||
|
|
||||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||||
|
@ -2386,7 +2432,7 @@ struct OpenMPOptLegacyPass : public CallGraphSCCPass {
|
||||||
Attributor A(Functions, InfoCache, CGUpdater);
|
Attributor A(Functions, InfoCache, CGUpdater);
|
||||||
|
|
||||||
OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
|
OpenMPOpt OMPOpt(SCC, CGUpdater, OREGetter, InfoCache, A);
|
||||||
return OMPOpt.run();
|
return OMPOpt.run(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool doFinalization(CallGraph &CG) override { return CGUpdater.finalize(); }
|
bool doFinalization(CallGraph &CG) override { return CGUpdater.finalize(); }
|
||||||
|
@ -2450,12 +2496,14 @@ bool llvm::omp::containsOpenMP(Module &M, OpenMPInModule &OMPInModule) {
|
||||||
return OMPInModule = false;
|
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)
|
"OpenMP specific optimizations", false, false)
|
||||||
INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
|
INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
|
||||||
INITIALIZE_PASS_END(OpenMPOptLegacyPass, "openmpopt",
|
INITIALIZE_PASS_END(OpenMPOptCGSCCLegacyPass, "openmp-opt-cgscc",
|
||||||
"OpenMP specific optimizations", false, false)
|
"OpenMP specific optimizations", false, false)
|
||||||
|
|
||||||
Pass *llvm::createOpenMPOptLegacyPass() { return new OpenMPOptLegacyPass(); }
|
Pass *llvm::createOpenMPOptCGSCCLegacyPass() {
|
||||||
|
return new OpenMPOptCGSCCLegacyPass();
|
||||||
|
}
|
||||||
|
|
|
@ -668,7 +668,7 @@ void PassManagerBuilder::populateModulePassManager(
|
||||||
// Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
|
// Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
|
||||||
// there are no OpenMP runtime calls present in the module.
|
// there are no OpenMP runtime calls present in the module.
|
||||||
if (OptLevel > 1)
|
if (OptLevel > 1)
|
||||||
MPM.add(createOpenMPOptLegacyPass());
|
MPM.add(createOpenMPOptCGSCCLegacyPass());
|
||||||
|
|
||||||
MPM.add(createPostOrderFunctionAttrsLegacyPass());
|
MPM.add(createPostOrderFunctionAttrsLegacyPass());
|
||||||
if (OptLevel > 2)
|
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
|
// Try to perform OpenMP specific optimizations. This is a (quick!) no-op if
|
||||||
// there are no OpenMP runtime calls present in the module.
|
// there are no OpenMP runtime calls present in the module.
|
||||||
if (OptLevel > 1)
|
if (OptLevel > 1)
|
||||||
PM.add(createOpenMPOptLegacyPass());
|
PM.add(createOpenMPOptCGSCCLegacyPass());
|
||||||
|
|
||||||
// Optimize globals again if we ran the inliner.
|
// Optimize globals again if we ran the inliner.
|
||||||
if (RunInliner)
|
if (RunInliner)
|
||||||
|
|
|
@ -89,6 +89,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||||
; CHECK-O-NEXT: Finished llvm::Function pass manager run.
|
; 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-EP-PIPELINE-EARLY-SIMPLIFICATION-NEXT: Running pass: NoOpModulePass
|
||||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
|
@ -124,8 +126,8 @@
|
||||||
; CHECK-O-NEXT: Running pass: InlinerPass
|
; CHECK-O-NEXT: Running pass: InlinerPass
|
||||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass on (foo)
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass on (foo)
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
|
||||||
; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass
|
; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass
|
||||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
|
|
|
@ -74,6 +74,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||||
; CHECK-O-NEXT: Finished llvm::Function pass manager run.
|
; 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-POSTLINK-O-NEXT: Running pass: LowerTypeTestsPass
|
||||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
|
@ -108,8 +110,8 @@
|
||||||
; CHECK-O-NEXT: Running pass: InlinerPass
|
; CHECK-O-NEXT: Running pass: InlinerPass
|
||||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass on (foo)
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass on (foo)
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)
|
||||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||||
|
|
|
@ -44,6 +44,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||||
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
|
; 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: LowerTypeTestsPass
|
||||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
|
@ -82,8 +84,8 @@
|
||||||
; CHECK-O-NEXT: Running pass: InlinerPass
|
; CHECK-O-NEXT: Running pass: InlinerPass
|
||||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||||
|
|
|
@ -58,6 +58,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
|
; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
|
||||||
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
|
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
|
||||||
; CHECK-O-NEXT: Running pass: PGOIndirectCallPromotion
|
; 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: LowerTypeTestsPass
|
||||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
|
@ -91,8 +93,8 @@
|
||||||
; CHECK-O-NEXT: Running pass: InlinerPass
|
; CHECK-O-NEXT: Running pass: InlinerPass
|
||||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||||
|
|
|
@ -45,6 +45,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||||
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
|
; 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: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
||||||
|
@ -116,8 +118,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
|
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O3-NEXT: Running analysis: TargetIRAnalysis
|
; CHECK-O3-NEXT: Running analysis: TargetIRAnalysis
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||||
|
|
|
@ -55,6 +55,8 @@
|
||||||
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
|
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
|
||||||
; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
|
; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
|
||||||
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
|
; 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: IPSCCPPass
|
||||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||||
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
||||||
|
@ -86,8 +88,8 @@
|
||||||
; CHECK-O-NEXT: Running pass: InlinerPass
|
; CHECK-O-NEXT: Running pass: InlinerPass
|
||||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||||
; CHECK-O2-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O3-NEXT: Running pass: OpenMPOptPass
|
; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass
|
||||||
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
|
||||||
; CHECK-O-NEXT: Running pass: SROA
|
; CHECK-O-NEXT: Running pass: SROA
|
||||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
; RUN: opt < %s -S -openmpopt | FileCheck %s
|
; RUN: opt < %s -S -openmp-opt-cgscc | FileCheck %s
|
||||||
; RUN: opt < %s -S -passes=openmpopt | FileCheck %s
|
; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s
|
||||||
; RUN: opt < %s -S -openmpopt -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
|
; RUN: opt < %s -S -openmp-opt-cgscc -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 -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"
|
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* }
|
%struct.omp_lock_t = type { i8* }
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
; RUN: opt < %s -S -openmpopt | FileCheck %s
|
; RUN: opt < %s -S -openmp-opt-cgscc | FileCheck %s
|
||||||
; RUN: opt < %s -S -passes=openmpopt | FileCheck %s
|
; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s
|
||||||
; RUN: opt < %s -S -openmpopt -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
|
; RUN: opt < %s -S -openmp-opt-cgscc -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 -passes=openmp-opt-cgscc -openmp-ir-builder-optimistic-attributes | FileCheck %s --check-prefix=OPTIMISTIC
|
||||||
|
|
||||||
target triple = "amdgcn-amd-amdhsa"
|
target triple = "amdgcn-amd-amdhsa"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
|
; 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 -openmp-opt-cgscc < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
|
; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc void @"_omp$reduction$reduction_func14"() unnamed_addr {
|
define internal fastcc void @"_omp$reduction$reduction_func14"() unnamed_addr {
|
||||||
%call = call i8 @_ZStplIdESt7complexIT_ERKS2_S4_()
|
%call = call i8 @_ZStplIdESt7complexIT_ERKS2_S4_()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
|
; 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 -openmp-opt-cgscc < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
|
; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
|
||||||
%struct.ident_t = type { i32, i32, i32, i32, i8* }
|
%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
|
@.str = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
; 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 -openmp-opt-cgscc -S < %s | FileCheck %s
|
||||||
; RUN: opt -passes=openmpopt -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"
|
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* }
|
%struct.ident_t = type { i32, i32, i32, i32, i8* }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: opt -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=openmpopt -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'
|
; ModuleID = 'deduplication_remarks.c'
|
||||||
source_filename = "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"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
|
|
@ -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'
|
; ModuleID = 'declare_target_codegen_globalization.cpp'
|
||||||
source_filename = "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"
|
target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"
|
||||||
|
|
|
@ -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 -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 -openmpopt -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 kernel1
|
||||||
; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel2
|
; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel2
|
||||||
|
|
|
@ -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=openmp-opt-cgscc -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 -passes=openmp-opt-cgscc -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 -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels < %s | FileCheck %s
|
||||||
|
|
||||||
; C input used for this test:
|
; C input used for this test:
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --function-signature --scrub-attributes
|
; 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"
|
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* }
|
; CHECK: %struct.__tgt_async_info = type { i8* }
|
||||||
|
|
|
@ -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 -passes=openmp-opt-cgscc -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 -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
|
||||||
|
|
||||||
; ModuleID = 'icv_remarks.c'
|
; ModuleID = 'icv_remarks.c'
|
||||||
source_filename = "icv_remarks.c"
|
source_filename = "icv_remarks.c"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
|
; 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 -openmp-opt-cgscc < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes=openmpopt < %s | FileCheck %s
|
; RUN: opt -S -passes=openmp-opt-cgscc < %s | FileCheck %s
|
||||||
|
|
||||||
%struct.ident_t = type { i32, i32, i32, i32, i8* }
|
%struct.ident_t = type { i32, i32, i32, i32, i8* }
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
|
; 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 -attributor -openmp-opt-cgscc < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes='attributor,cgscc(openmpopt)' < %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"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
|
||||||
|
|
|
@ -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 -attributor -openmp-opt-cgscc -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 -passes='attributor,cgscc(openmp-opt-cgscc)' -disable-output < %s 2>&1 | FileCheck %s
|
||||||
; ModuleID = 'parallel_deletion_remarks.ll'
|
; ModuleID = 'parallel_deletion_remarks.ll'
|
||||||
source_filename = "parallel_deletion_remarks.c"
|
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"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs
|
; 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 -attributor -openmp-opt-cgscc -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 -aa-pipeline= -passes='attributor,cgscc(openmp-opt-cgscc)' -openmp-opt-enable-merging < %s | FileCheck %s
|
||||||
; #include <omp.h>
|
; #include <omp.h>
|
||||||
; void foo();
|
; void foo();
|
||||||
; void use(int);
|
; void use(int);
|
||||||
|
|
|
@ -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 -openmp-opt-cgscc -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 -passes='devirt<2>(cgscc(openmp-opt-cgscc))' -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 -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>(openmpopt))' -stats -debug-pass-manager < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NPM
|
; 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
|
; 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"
|
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}
|
!2 = !{!3}
|
||||||
!3 = !{i64 2, i64 -1, i64 -1, i1 true}
|
!3 = !{i64 2, i64 -1, i64 -1, i1 true}
|
||||||
|
|
||||||
; NPM: Running pass: OpenMPOptPass on (.omp_outlined.)
|
; NPM: Running pass: OpenMPOptCGSCCPass on (.omp_outlined.)
|
||||||
; NPM-NOT: Running pass: OpenMPOptPass on (.omp_outlined.)
|
; NPM-NOT: Running pass: OpenMPOptCGSCCPass on (.omp_outlined.)
|
||||||
; NPM: Running pass: OpenMPOptPass on (main)
|
; NPM: Running pass: OpenMPOptCGSCCPass on (main)
|
||||||
; NPM-NOT: Running pass: OpenMPOptPass on (main)
|
; NPM-NOT: Running pass: OpenMPOptCGSCCPass on (main)
|
||||||
; ===-------------------------------------------------------------------------===
|
; ===-------------------------------------------------------------------------===
|
||||||
; ... Statistics Collected ...
|
; ... Statistics Collected ...
|
||||||
; ===-------------------------------------------------------------------------===
|
; ===-------------------------------------------------------------------------===
|
||||||
|
|
|
@ -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
|
; 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"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
@.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)
|
Loading…
Reference in New Issue