summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h')
-rw-r--r--gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h148
1 files changed, 0 insertions, 148 deletions
diff --git a/gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h b/gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h
deleted file mode 100644
index 701b6368690..00000000000
--- a/gnu/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h
+++ /dev/null
@@ -1,148 +0,0 @@
-//===- InstrEmitter.h - Emit MachineInstrs for the SelectionDAG -*- C++ -*--==//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This declares the Emit routines for the SelectionDAG class, which creates
-// MachineInstrs based on the decisions of the SelectionDAG instruction
-// selection.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_CODEGEN_SELECTIONDAG_INSTREMITTER_H
-#define LLVM_LIB_CODEGEN_SELECTIONDAG_INSTREMITTER_H
-
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/CodeGen/MachineBasicBlock.h"
-#include "llvm/CodeGen/SelectionDAG.h"
-
-namespace llvm {
-
-class MachineInstrBuilder;
-class MCInstrDesc;
-class SDDbgValue;
-
-class LLVM_LIBRARY_VISIBILITY InstrEmitter {
- MachineFunction *MF;
- MachineRegisterInfo *MRI;
- const TargetInstrInfo *TII;
- const TargetRegisterInfo *TRI;
- const TargetLowering *TLI;
-
- MachineBasicBlock *MBB;
- MachineBasicBlock::iterator InsertPos;
-
- /// EmitCopyFromReg - Generate machine code for an CopyFromReg node or an
- /// implicit physical register output.
- void EmitCopyFromReg(SDNode *Node, unsigned ResNo,
- bool IsClone, bool IsCloned,
- unsigned SrcReg,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-
- /// getDstOfCopyToRegUse - If the only use of the specified result number of
- /// node is a CopyToReg, return its destination register. Return 0 otherwise.
- unsigned getDstOfOnlyCopyToRegUse(SDNode *Node,
- unsigned ResNo) const;
-
- void CreateVirtualRegisters(SDNode *Node,
- MachineInstrBuilder &MIB,
- const MCInstrDesc &II,
- bool IsClone, bool IsCloned,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-
- /// getVR - Return the virtual register corresponding to the specified result
- /// of the specified node.
- unsigned getVR(SDValue Op,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-
- /// AddRegisterOperand - Add the specified register as an operand to the
- /// specified machine instr. Insert register copies if the register is
- /// not in the required register class.
- void AddRegisterOperand(MachineInstrBuilder &MIB,
- SDValue Op,
- unsigned IIOpNum,
- const MCInstrDesc *II,
- DenseMap<SDValue, unsigned> &VRBaseMap,
- bool IsDebug, bool IsClone, bool IsCloned);
-
- /// AddOperand - Add the specified operand to the specified machine instr. II
- /// specifies the instruction information for the node, and IIOpNum is the
- /// operand number (in the II) that we are adding. IIOpNum and II are used for
- /// assertions only.
- void AddOperand(MachineInstrBuilder &MIB,
- SDValue Op,
- unsigned IIOpNum,
- const MCInstrDesc *II,
- DenseMap<SDValue, unsigned> &VRBaseMap,
- bool IsDebug, bool IsClone, bool IsCloned);
-
- /// ConstrainForSubReg - Try to constrain VReg to a register class that
- /// supports SubIdx sub-registers. Emit a copy if that isn't possible.
- /// Return the virtual register to use.
- unsigned ConstrainForSubReg(unsigned VReg, unsigned SubIdx, MVT VT,
- const DebugLoc &DL);
-
- /// EmitSubregNode - Generate machine code for subreg nodes.
- ///
- void EmitSubregNode(SDNode *Node, DenseMap<SDValue, unsigned> &VRBaseMap,
- bool IsClone, bool IsCloned);
-
- /// EmitCopyToRegClassNode - Generate machine code for COPY_TO_REGCLASS nodes.
- /// COPY_TO_REGCLASS is just a normal copy, except that the destination
- /// register is constrained to be in a particular register class.
- ///
- void EmitCopyToRegClassNode(SDNode *Node,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-
- /// EmitRegSequence - Generate machine code for REG_SEQUENCE nodes.
- ///
- void EmitRegSequence(SDNode *Node, DenseMap<SDValue, unsigned> &VRBaseMap,
- bool IsClone, bool IsCloned);
-public:
- /// CountResults - The results of target nodes have register or immediate
- /// operands first, then an optional chain, and optional flag operands
- /// (which do not go into the machine instrs.)
- static unsigned CountResults(SDNode *Node);
-
- /// EmitDbgValue - Generate machine instruction for a dbg_value node.
- ///
- MachineInstr *EmitDbgValue(SDDbgValue *SD,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-
- /// Generate machine instruction for a dbg_label node.
- MachineInstr *EmitDbgLabel(SDDbgLabel *SD);
-
- /// EmitNode - Generate machine code for a node and needed dependencies.
- ///
- void EmitNode(SDNode *Node, bool IsClone, bool IsCloned,
- DenseMap<SDValue, unsigned> &VRBaseMap) {
- if (Node->isMachineOpcode())
- EmitMachineNode(Node, IsClone, IsCloned, VRBaseMap);
- else
- EmitSpecialNode(Node, IsClone, IsCloned, VRBaseMap);
- }
-
- /// getBlock - Return the current basic block.
- MachineBasicBlock *getBlock() { return MBB; }
-
- /// getInsertPos - Return the current insertion position.
- MachineBasicBlock::iterator getInsertPos() { return InsertPos; }
-
- /// InstrEmitter - Construct an InstrEmitter and set it to start inserting
- /// at the given position in the given block.
- InstrEmitter(MachineBasicBlock *mbb, MachineBasicBlock::iterator insertpos);
-
-private:
- void EmitMachineNode(SDNode *Node, bool IsClone, bool IsCloned,
- DenseMap<SDValue, unsigned> &VRBaseMap);
- void EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned,
- DenseMap<SDValue, unsigned> &VRBaseMap);
-};
-
-}
-
-#endif