38 #define DEBUG_TYPE "mips-isel"
53 processFunctionAfterISel(MF);
69 bool MipsDAGToDAGISel::selectAddrRegImm(
SDValue Addr,
SDValue &Base,
75 bool MipsDAGToDAGISel::selectAddrRegReg(
SDValue Addr,
SDValue &Base,
81 bool MipsDAGToDAGISel::selectAddrDefault(
SDValue Addr,
SDValue &Base,
93 bool MipsDAGToDAGISel::selectIntAddrMM(
SDValue Addr,
SDValue &Base,
99 bool MipsDAGToDAGISel::selectIntAddrLSL2MM(
SDValue Addr,
SDValue &Base,
105 bool MipsDAGToDAGISel::selectIntAddrMSA(
SDValue Addr,
SDValue &Base,
117 bool MipsDAGToDAGISel::selectVSplat(
SDNode *
N,
APInt &Imm,
118 unsigned MinSizeInBits)
const {
123 bool MipsDAGToDAGISel::selectVSplatUimm1(
SDValue N,
SDValue &Imm)
const {
128 bool MipsDAGToDAGISel::selectVSplatUimm2(
SDValue N,
SDValue &Imm)
const {
133 bool MipsDAGToDAGISel::selectVSplatUimm3(
SDValue N,
SDValue &Imm)
const {
138 bool MipsDAGToDAGISel::selectVSplatUimm4(
SDValue N,
SDValue &Imm)
const {
143 bool MipsDAGToDAGISel::selectVSplatUimm5(
SDValue N,
SDValue &Imm)
const {
148 bool MipsDAGToDAGISel::selectVSplatUimm6(
SDValue N,
SDValue &Imm)
const {
153 bool MipsDAGToDAGISel::selectVSplatUimm8(
SDValue N,
SDValue &Imm)
const {
158 bool MipsDAGToDAGISel::selectVSplatSimm5(
SDValue N,
SDValue &Imm)
const {
163 bool MipsDAGToDAGISel::selectVSplatUimmPow2(
SDValue N,
SDValue &Imm)
const {
168 bool MipsDAGToDAGISel::selectVSplatUimmInvPow2(
SDValue N,
SDValue &Imm)
const {
173 bool MipsDAGToDAGISel::selectVSplatMaskL(
SDValue N,
SDValue &Imm)
const {
178 bool MipsDAGToDAGISel::selectVSplatMaskR(
SDValue N,
SDValue &Imm)
const {
199 std::pair<bool, SDNode*>
Ret = selectNode(Node);
215 cast<MemSDNode>(Node)->getMemoryVT().getSizeInBits() / 8 <=
216 cast<MemSDNode>(Node)->getAlignment()) &&
217 "Unexpected unaligned loads/stores.");
223 SDNode *ResNode = SelectCode(Node);
226 if (ResNode ==
nullptr || ResNode == Node)
234 bool MipsDAGToDAGISel::
235 SelectInlineAsmMemoryOperand(
const SDValue &Op,
unsigned ConstraintID,
236 std::vector<SDValue> &OutOps) {
238 switch(ConstraintID) {
245 OutOps.push_back(Op);
raw_ostream & errs()
This returns a reference to a raw_ostream for standard error.
void dump() const
Dump this node, for debugging.
unsigned getOpcode() const
Return the SelectionDAG opcode value for this node.
void setNodeId(int Id)
Set unique node id.
GlobalBaseReg - On Darwin, this node represents the result of the mflr at function entry...
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
bool systemSupportsUnalignedAccess() const
Does the system support unaligned memory access.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
const TargetLowering * getTargetLowering() const
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
const DataLayout & getDataLayout() const
SDNode * getNode() const
get the SDNode which holds the desired result
const MipsSubtarget * Subtarget
Keep a pointer to the MipsSubtarget around so that we can make the right decision when generating cod...
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
Represents one node in the SelectionDAG.
Class for arbitrary precision integers.
SDNode * getGlobalBaseReg()
getGlobalBaseReg - Output the instructions required to put the GOT address into a register...
LOAD and STORE have token chains as their first operand, then the same operands as an LLVM load/store...
MipsFunctionInfo - This class is derived from MachineFunction private Mips target-specific informatio...
SDValue getRegister(unsigned Reg, EVT VT)
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation...
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
bool isMachineOpcode() const
Test if this node has a post-isel opcode, directly corresponding to a MachineInstr opcode...