#include "HexagonBitTracker.h"
#include "Hexagon.h"
#include "HexagonInstrInfo.h"
#include "HexagonRegisterInfo.h"
#include "HexagonSubtarget.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstdlib>
#include <utility>
#include <vector>
usingnamespacellvm;
BT;
HexagonEvaluator::HexagonEvaluator(const HexagonRegisterInfo &tri,
MachineRegisterInfo &mri,
const HexagonInstrInfo &tii,
MachineFunction &mf)
: … { … }
BT::BitMask HexagonEvaluator::mask(Register Reg, unsigned Sub) const { … }
uint16_t HexagonEvaluator::getPhysRegBitWidth(MCRegister Reg) const { … }
const TargetRegisterClass &HexagonEvaluator::composeWithSubRegIndex(
const TargetRegisterClass &RC, unsigned Idx) const { … }
namespace {
class RegisterRefs { … };
}
bool HexagonEvaluator::evaluate(const MachineInstr &MI,
const CellMapType &Inputs,
CellMapType &Outputs) const { … }
bool HexagonEvaluator::evaluate(const MachineInstr &BI,
const CellMapType &Inputs,
BranchTargetList &Targets,
bool &FallsThru) const { … }
unsigned HexagonEvaluator::getUniqueDefVReg(const MachineInstr &MI) const { … }
bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
const CellMapType &Inputs,
CellMapType &Outputs) const { … }
bool HexagonEvaluator::evaluateFormalCopy(const MachineInstr &MI,
const CellMapType &Inputs,
CellMapType &Outputs) const { … }
unsigned HexagonEvaluator::getNextPhysReg(unsigned PReg, unsigned Width) const { … }
unsigned HexagonEvaluator::getVirtRegFor(unsigned PReg) const { … }