llvm-project/llvm/tools/llvm-reduce/ReducerWorkItem.h
Matt Arsenault c23ac22f0e llvm-reduce: Don't write out IR to score IR complexity
In a testcase I'm working on, the old write out and count IR lines
was taking about 200-300ms per iteration. This drops it out of the
profile.

This doesn't account for everything, but it doesn't seem to matter.
We should probably try to account for metadata and constantexpr tree
depths.
2022-10-12 17:25:23 -07:00

55 lines
1.7 KiB
C++

//===- ReducerWorkItem.h - Wrapper for Module -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_TOOLS_LLVM_REDUCE_REDUCERWORKITEM_H
#define LLVM_TOOLS_LLVM_REDUCE_REDUCERWORKITEM_H
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/Target/TargetMachine.h"
using namespace llvm;
class ReducerWorkItem {
public:
std::shared_ptr<Module> M;
std::unique_ptr<BitcodeLTOInfo> LTOInfo;
std::unique_ptr<MachineModuleInfo> MMI;
bool isMIR() const { return MMI != nullptr; }
const Module &getModule() const { return *M; }
void print(raw_ostream &ROS, void *p = nullptr) const;
operator Module &() const { return *M; }
/// Return a number to indicate whether there was any reduction progress.
uint64_t getComplexityScore() const {
return isMIR() ? computeMIRComplexityScore() : computeIRComplexityScore();
}
private:
uint64_t computeIRComplexityScore() const;
uint64_t computeMIRComplexityScore() const;
};
std::unique_ptr<ReducerWorkItem>
parseReducerWorkItem(const char *ToolName, StringRef Filename,
LLVMContext &Ctxt, std::unique_ptr<TargetMachine> &TM,
bool IsMIR);
std::unique_ptr<ReducerWorkItem>
cloneReducerWorkItem(const ReducerWorkItem &MMM, const TargetMachine *TM);
bool verifyReducerWorkItem(const ReducerWorkItem &MMM, raw_fd_ostream *OS);
#endif