aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen/InstrSelectionSupport.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/CodeGen/InstrSelectionSupport.h')
-rw-r--r--include/llvm/CodeGen/InstrSelectionSupport.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/InstrSelectionSupport.h b/include/llvm/CodeGen/InstrSelectionSupport.h
new file mode 100644
index 0000000..5253ef8
--- /dev/null
+++ b/include/llvm/CodeGen/InstrSelectionSupport.h
@@ -0,0 +1,102 @@
+// $Id$ -*-c++-*-
+//***************************************************************************
+// File:
+// InstrSelectionSupport.h
+//
+// Purpose:
+// Target-independent instruction selection code.
+// See SparcInstrSelection.cpp for usage.
+//
+// History:
+// 10/10/01 - Vikram Adve - Created
+//**************************************************************************/
+
+#ifndef LLVM_CODEGEN_INSTR_SELECTION_SUPPORT_H
+#define LLVM_CODEGEN_INSTR_SELECTION_SUPPORT_H
+
+#include "llvm/Instruction.h"
+#include "llvm/CodeGen/MachineInstr.h"
+class Method;
+class InstrForest;
+class MachineInstr;
+class InstructionNode;
+class TmpInstruction;
+class ConstPoolVal;
+class TargetMachine;
+
+//************************ Exported Functions ******************************/
+
+
+//---------------------------------------------------------------------------
+// Function: FoldGetElemChain
+//
+// Purpose:
+// Fold a chain of GetElementPtr instructions into an equivalent
+// (Pointer, IndexVector) pair. Returns the pointer Value, and
+// stores the resulting IndexVector in argument chainIdxVec.
+//---------------------------------------------------------------------------
+
+Value* FoldGetElemChain (const InstructionNode* getElemInstrNode,
+ vector<ConstPoolVal*>& chainIdxVec);
+
+
+//------------------------------------------------------------------------
+// Function Set2OperandsFromInstr
+// Function Set3OperandsFromInstr
+//
+// Purpose:
+//
+// For the common case of 2- and 3-operand arithmetic/logical instructions,
+// set the m/c instr. operands directly from the VM instruction's operands.
+// Check whether the first or second operand is 0 and can use a dedicated
+// "0" register.
+// Check whether the second operand should use an immediate field or register.
+// (First and third operands are never immediates for such instructions.)
+//
+// Arguments:
+// canDiscardResult: Specifies that the result operand can be discarded
+// by using the dedicated "0"
+//
+// op1position, op2position and resultPosition: Specify in which position
+// in the machine instruction the 3 operands (arg1, arg2
+// and result) should go.
+//
+// RETURN VALUE: unsigned int flags, where
+// flags & 0x01 => operand 1 is constant and needs a register
+// flags & 0x02 => operand 2 is constant and needs a register
+//------------------------------------------------------------------------
+
+void Set2OperandsFromInstr (MachineInstr* minstr,
+ InstructionNode* vmInstrNode,
+ const TargetMachine& targetMachine,
+ bool canDiscardResult = false,
+ int op1Position = 0,
+ int resultPosition = 1);
+
+void Set3OperandsFromInstr (MachineInstr* minstr,
+ InstructionNode* vmInstrNode,
+ const TargetMachine& targetMachine,
+ bool canDiscardResult = false,
+ int op1Position = 0,
+ int op2Position = 1,
+ int resultPosition = 2);
+
+
+//---------------------------------------------------------------------------
+// Function: ChooseRegOrImmed
+//
+// Purpose:
+//
+//---------------------------------------------------------------------------
+
+MachineOperand::MachineOperandType
+ ChooseRegOrImmed (Value* val,
+ MachineOpCode opCode,
+ const TargetMachine& targetMachine,
+ bool canUseImmed,
+ unsigned int& getMachineRegNum,
+ int64_t& getImmedValue);
+
+//**************************************************************************/
+
+#endif