49 lines · cpp
1//===- RunIRPasses.cpp ----------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "RunIRPasses.h"10#include "llvm/Passes/PassBuilder.h"11#include "llvm/Support/CommandLine.h"12#include "llvm/Support/ErrorHandling.h"13 14using namespace llvm;15 16extern cl::OptionCategory LLVMReduceOptions;17 18static cl::opt<std::string>19 PassPipeline("ir-passes",20 cl::desc("A textual description of the pass pipeline, same as "21 "what's passed to `opt -passes`."),22 cl::init("function(sroa,instcombine<no-verify-fixpoint>,gvn,"23 "simplifycfg,infer-address-spaces)"),24 cl::cat(LLVMReduceOptions));25 26void llvm::runIRPassesDeltaPass(Oracle &O, ReducerWorkItem &WorkItem) {27 Module &Program = WorkItem.getModule();28 LoopAnalysisManager LAM;29 FunctionAnalysisManager FAM;30 CGSCCAnalysisManager CGAM;31 ModuleAnalysisManager MAM;32 33 PassInstrumentationCallbacks PIC;34 PIC.registerShouldRunOptionalPassCallback(35 [&](StringRef, Any) { return !O.shouldKeep(); });36 PassBuilder PB(nullptr, PipelineTuningOptions(), std::nullopt, &PIC);37 38 PB.registerModuleAnalyses(MAM);39 PB.registerCGSCCAnalyses(CGAM);40 PB.registerFunctionAnalyses(FAM);41 PB.registerLoopAnalyses(LAM);42 PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);43 44 ModulePassManager MPM;45 if (auto Err = PB.parsePassPipeline(MPM, PassPipeline))46 report_fatal_error(std::move(Err), false);47 MPM.run(Program, MAM);48}49