本文整理汇总了C++中SILPassPipelinePlan类的典型用法代码示例。如果您正苦于以下问题:C++ SILPassPipelinePlan类的具体用法?C++ SILPassPipelinePlan怎么用?C++ SILPassPipelinePlan使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SILPassPipelinePlan类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addHighLevelEarlyLoopOptPipeline
static void addHighLevelEarlyLoopOptPipeline(SILPassPipelinePlan &P) {
P.startPipeline("HighLevel+EarlyLoopOpt");
// FIXME: update this to be a function pass.
P.addEagerSpecializer();
addSSAPasses(P, OptimizationLevelKind::HighLevel);
addHighLevelLoopOptPasses(P);
}
示例2:
SILPassPipelinePlan
SILPassPipelinePlan::getPassPipelineForKinds(ArrayRef<PassKind> PassKinds) {
SILPassPipelinePlan P;
P.startPipeline("Pass List Pipeline");
P.addPasses(PassKinds);
return P;
}
示例3: addIRGenPreparePipeline
/// Non-mandatory passes that should run as preparation for IRGen.
static void addIRGenPreparePipeline(SILPassPipelinePlan &P) {
P.startPipeline("IRGen Preparation");
// Insert SIL passes to run during IRGen.
// Hoist generic alloc_stack instructions to the entry block to enable better
// llvm-ir generation for dynamic alloca instructions.
P.addAllocStackHoisting();
}
示例4: addLastChanceOptPassPipeline
// Run passes that
// - should only run after all general SIL transformations.
// - have no reason to run before any other SIL optimizations.
// - don't require IRGen information.
static void addLastChanceOptPassPipeline(SILPassPipelinePlan &P) {
// Optimize access markers for improved IRGen after all other optimizations.
P.addAccessEnforcementOpts();
// Only has an effect if the -assume-single-thread option is specified.
P.addAssumeSingleThreaded();
}
示例5: addMidLevelPassPipeline
static void addMidLevelPassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("MidLevel");
addSSAPasses(P, OptimizationLevelKind::MidLevel);
// Specialize partially applied functions with dead arguments as a preparation
// for CapturePropagation.
P.addDeadArgSignatureOpt();
}
示例6: addPerfEarlyModulePassPipeline
static void addPerfEarlyModulePassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("EarlyModulePasses");
// Get rid of apparently dead functions as soon as possible so that
// we do not spend time optimizing them.
P.addDeadFunctionElimination();
// Start by cloning functions from stdlib.
P.addSILLinker();
}
示例7: addSimplifyCFGSILCombinePasses
void addSimplifyCFGSILCombinePasses(SILPassPipelinePlan &P) {
P.addSimplifyCFG();
P.addConditionForwarding();
// Jump threading can expose opportunity for silcombine (enum -> is_enum_tag->
// cond_br).
P.addSILCombine();
// Which can expose opportunity for simplifcfg.
P.addSimplifyCFG();
}
示例8:
/// Mandatory IRGen preparation. It is the caller's job to set the set stage to
/// "lowered" after running this pipeline.
SILPassPipelinePlan
SILPassPipelinePlan::getLoweringPassPipeline() {
SILPassPipelinePlan P;
P.startPipeline("Address Lowering");
P.addIRGenPrepare();
P.addAddressLowering();
return P;
}
示例9: addLowLevelPassPipeline
static void addLowLevelPassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("LowLevel");
// Should be after FunctionSignatureOpts and before the last inliner.
P.addReleaseDevirtualizer();
addSSAPasses(P, OptimizationLevelKind::LowLevel);
P.addDeadStoreElimination();
// We've done a lot of optimizations on this function, attempt to FSO.
P.addFunctionSignatureOpts();
}
示例10: DEBUG
SILPassPipelinePlan
SILPassPipelinePlan::getPassPipelineFromFile(StringRef Filename) {
namespace yaml = llvm::yaml;
DEBUG(llvm::dbgs() << "Parsing Pass Pipeline from " << Filename << "\n");
// Load the input file.
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> FileBufOrErr =
llvm::MemoryBuffer::getFileOrSTDIN(Filename);
if (!FileBufOrErr) {
llvm_unreachable("Failed to read yaml file");
}
StringRef Buffer = FileBufOrErr->get()->getBuffer();
llvm::SourceMgr SM;
yaml::Stream Stream(Buffer, SM);
yaml::document_iterator DI = Stream.begin();
assert(DI != Stream.end() && "Failed to read a document");
yaml::Node *N = DI->getRoot();
assert(N && "Failed to find a root");
SILPassPipelinePlan P;
auto *RootList = cast<yaml::SequenceNode>(N);
llvm::SmallVector<PassKind, 32> Passes;
for (yaml::Node &PipelineNode :
make_range(RootList->begin(), RootList->end())) {
Passes.clear();
DEBUG(llvm::dbgs() << "New Pipeline:\n");
auto *Desc = cast<yaml::SequenceNode>(&PipelineNode);
yaml::SequenceNode::iterator DescIter = Desc->begin();
StringRef Name = cast<yaml::ScalarNode>(&*DescIter)->getRawValue();
DEBUG(llvm::dbgs() << " Name: \"" << Name << "\"\n");
++DescIter;
for (auto DescEnd = Desc->end(); DescIter != DescEnd; ++DescIter) {
auto *InnerPassList = cast<yaml::SequenceNode>(&*DescIter);
auto *FirstNode = &*InnerPassList->begin();
StringRef PassName = cast<yaml::ScalarNode>(FirstNode)->getRawValue();
unsigned Size = PassName.size() - 2;
PassName = PassName.substr(1, Size);
DEBUG(llvm::dbgs() << " Pass: \"" << PassName << "\"\n");
auto Kind = PassKindFromString(PassName);
assert(Kind != PassKind::invalidPassKind && "Found invalid pass kind?!");
Passes.push_back(Kind);
}
P.startPipeline(Name);
P.addPasses(Passes);
}
return P;
}
示例11: addMidLevelPassPipeline
static void addMidLevelPassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("MidLevel");
addSSAPasses(P, OptimizationLevelKind::MidLevel);
// Specialize partially applied functions with dead arguments as a preparation
// for CapturePropagation.
P.addDeadArgSignatureOpt();
// Run loop unrolling after inlining and constant propagation, because loop
// trip counts may have became constant.
P.addLoopUnroll();
}
示例12: addPerfEarlyModulePassPipeline
static void addPerfEarlyModulePassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("EarlyModulePasses");
// Get rid of apparently dead functions as soon as possible so that
// we do not spend time optimizing them.
P.addDeadFunctionElimination();
// Start by cloning functions from stdlib.
P.addSILLinker();
// Cleanup after SILGen: remove trivial copies to temporaries.
P.addTempRValueOpt();
}
示例13: addPerfDebugSerializationPipeline
SILPassPipelinePlan
SILPassPipelinePlan::getSILOptPreparePassPipeline(const SILOptions &Options) {
SILPassPipelinePlan P;
if (Options.DebugSerialization) {
addPerfDebugSerializationPipeline(P);
return P;
}
P.startPipeline("SILOpt Prepare Passes");
P.addAccessMarkerElimination();
return P;
}
示例14: addLateLoopOptPassPipeline
static void addLateLoopOptPassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("LateLoopOpt");
// Delete dead code and drop the bodies of shared functions.
P.addDeadFunctionElimination();
// Perform the final lowering transformations.
P.addCodeSinking();
P.addLICM();
// Optimize overflow checks.
P.addRedundantOverflowCheckRemoval();
P.addMergeCondFails();
// Remove dead code.
P.addDCE();
P.addSILCombine();
P.addSimplifyCFG();
// Try to hoist all releases, including epilogue releases. This should be
// after FSO.
P.addLateReleaseHoisting();
}
示例15: addMidModulePassesStackPromotePassPipeline
static void addMidModulePassesStackPromotePassPipeline(SILPassPipelinePlan &P) {
P.startPipeline("MidModulePasses+StackPromote");
P.addDeadFunctionElimination();
P.addSILLinker();
P.addDeadObjectElimination();
P.addGlobalPropertyOpt();
// Do the first stack promotion on high-level SIL.
P.addStackPromotion();
}