Previously, this unconditionally emitted text IR. I ran into a bug that manifested in broken disassembly, so the desired output was the bitcode format. If the input format was binary bitcode, the requested output file ends in .bc, or an explicit -output-bitcode option was used, emit bitcode.
55 lines
1.8 KiB
C++
55 lines
1.8 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::pair<std::unique_ptr<ReducerWorkItem>, bool>
|
|
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
|