#include "HexagonInstrInfo.h"
#include "HexagonSubtarget.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/TargetOpcodes.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <string>
#include <vector>
usingnamespacellvm;
#define DEBUG_TYPE …
static cl::opt<bool>
TraceHexVectorStoresOnly("trace-hex-vector-stores-only", cl::Hidden,
cl::desc("Enables tracing of vector stores"));
namespace llvm {
FunctionPass *createHexagonVectorPrint();
void initializeHexagonVectorPrintPass(PassRegistry&);
}
namespace {
class HexagonVectorPrint : public MachineFunctionPass { … };
}
char HexagonVectorPrint::ID = …;
static bool isVecReg(unsigned Reg) { … }
static std::string getStringReg(unsigned R) { … }
static void addAsmInstr(MachineBasicBlock *MBB, unsigned Reg,
MachineBasicBlock::instr_iterator I,
const DebugLoc &DL, const HexagonInstrInfo *QII,
MachineFunction &Fn) { … }
static bool getInstrVecReg(const MachineInstr &MI, unsigned &Reg) { … }
bool HexagonVectorPrint::runOnMachineFunction(MachineFunction &Fn) { … }
INITIALIZE_PASS(…)
FunctionPass *llvm::createHexagonVectorPrint() { … }