#include "ReducerWorkItem.h"
#include "TestRunner.h"
#include "llvm/Analysis/ModuleSummaryAnalysis.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/CodeGen/CommandFlags.h"
#include "llvm/CodeGen/MIRParser/MIRParser.h"
#include "llvm/CodeGen/MIRPrinter.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/PseudoSourceValueManager.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Support/MemoryBufferRef.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/WithColor.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include <optional>
usingnamespacellvm;
ReducerWorkItem::ReducerWorkItem() = default;
ReducerWorkItem::~ReducerWorkItem() = default;
extern cl::OptionCategory LLVMReduceOptions;
static cl::opt<std::string> TargetTriple("mtriple",
cl::desc("Set the target triple"),
cl::cat(LLVMReduceOptions));
static cl::opt<bool> PrintInvalidMachineReductions(
"print-invalid-reduction-machine-verifier-errors",
cl::desc(
"Print machine verifier errors on invalid reduction attempts triple"),
cl::cat(LLVMReduceOptions));
static cl::opt<bool> TmpFilesAsBitcode(
"write-tmp-files-as-bitcode",
cl::desc("Always write temporary files as bitcode instead of textual IR"),
cl::init(false), cl::cat(LLVMReduceOptions));
static void cloneFrameInfo(
MachineFrameInfo &DstMFI, const MachineFrameInfo &SrcMFI,
const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) { … }
static void cloneJumpTableInfo(
MachineFunction &DstMF, const MachineJumpTableInfo &SrcJTI,
const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) { … }
static void cloneMemOperands(MachineInstr &DstMI, MachineInstr &SrcMI,
MachineFunction &SrcMF, MachineFunction &DstMF) { … }
static std::unique_ptr<MachineFunction> cloneMF(MachineFunction *SrcMF,
MachineModuleInfo &DestMMI) { … }
static void initializeTargetInfo() { … }
void ReducerWorkItem::print(raw_ostream &ROS, void *p) const { … }
bool ReducerWorkItem::verify(raw_fd_ostream *OS) const { … }
bool ReducerWorkItem::isReduced(const TestRunner &Test) const { … }
std::unique_ptr<ReducerWorkItem>
ReducerWorkItem::clone(const TargetMachine *TM) const { … }
static uint64_t computeMIRComplexityScoreImpl(const MachineFunction &MF) { … }
uint64_t ReducerWorkItem::computeMIRComplexityScore() const { … }
static unsigned classifyReductivePower(const Value *V) { … }
static uint64_t computeIRComplexityScoreImpl(const Function &F) { … }
uint64_t ReducerWorkItem::computeIRComplexityScore() const { … }
void ReducerWorkItem::writeOutput(raw_ostream &OS, bool EmitBitcode) const { … }
void ReducerWorkItem::readBitcode(MemoryBufferRef Data, LLVMContext &Ctx,
StringRef ToolName) { … }
void ReducerWorkItem::writeBitcode(raw_ostream &OutStream) const { … }
std::pair<std::unique_ptr<ReducerWorkItem>, bool>
llvm::parseReducerWorkItem(StringRef ToolName, StringRef Filename,
LLVMContext &Ctxt,
std::unique_ptr<TargetMachine> &TM, bool IsMIR) { … }