1 //==-- MSP430ISelLowering.h - MSP430 DAG Lowering Interface ------*- C++ -*-==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the interfaces that MSP430 uses to lower LLVM code into a
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_TARGET_MSP430_ISELLOWERING_H
16 #define LLVM_TARGET_MSP430_ISELLOWERING_H
19 #include "llvm/CodeGen/SelectionDAG.h"
20 #include "llvm/Target/TargetLowering.h"
25 FIRST_NUMBER
= ISD::BUILTIN_OP_END
,
27 /// Return with a flag operand. Operand 0 is the chain operand.
30 /// Y = R{R,L}A X, rotate right (left) arithmetically
33 /// Y = RRC X, rotate right via carry
36 /// CALL - These operations represent an abstract call
37 /// instruction, which includes a bunch of information.
40 /// Wrapper - A wrapper node for TargetConstantPool, TargetExternalSymbol,
41 /// and TargetGlobalAddress.
44 /// CMP - Compare instruction.
47 /// SetCC. Operand 0 is condition code, and operand 1 is the flag
48 /// operand produced by a CMP instruction.
51 /// MSP430 conditional branches. Operand 0 is the chain operand, operand 1
52 /// is the block to branch if condition is true, operand 2 is the
53 /// condition code, and operand 3 is the flag operand produced by a CMP
57 /// SELECT_CC. Operand 0 and operand 1 are selection variable, operand 3
58 /// is condition code and operand 4 is flag operand.
63 class MSP430Subtarget
;
64 class MSP430TargetMachine
;
66 class MSP430TargetLowering
: public TargetLowering
{
68 explicit MSP430TargetLowering(MSP430TargetMachine
&TM
);
70 /// LowerOperation - Provide custom lowering hooks for some operations.
71 virtual SDValue
LowerOperation(SDValue Op
, SelectionDAG
&DAG
);
73 /// getTargetNodeName - This method returns the name of a target specific
75 virtual const char *getTargetNodeName(unsigned Opcode
) const;
77 /// getFunctionAlignment - Return the Log2 alignment of this function.
78 virtual unsigned getFunctionAlignment(const Function
*F
) const;
80 SDValue
LowerShifts(SDValue Op
, SelectionDAG
&DAG
);
81 SDValue
LowerGlobalAddress(SDValue Op
, SelectionDAG
&DAG
);
82 SDValue
LowerExternalSymbol(SDValue Op
, SelectionDAG
&DAG
);
83 SDValue
LowerBR_CC(SDValue Op
, SelectionDAG
&DAG
);
84 SDValue
LowerSELECT_CC(SDValue Op
, SelectionDAG
&DAG
);
85 SDValue
LowerSIGN_EXTEND(SDValue Op
, SelectionDAG
&DAG
);
87 TargetLowering::ConstraintType
88 getConstraintType(const std::string
&Constraint
) const;
89 std::pair
<unsigned, const TargetRegisterClass
*>
90 getRegForInlineAsmConstraint(const std::string
&Constraint
, EVT VT
) const;
92 MachineBasicBlock
* EmitInstrWithCustomInserter(MachineInstr
*MI
,
93 MachineBasicBlock
*BB
) const;
96 SDValue
LowerCCCCallTo(SDValue Chain
, SDValue Callee
,
97 CallingConv::ID CallConv
, bool isVarArg
,
99 const SmallVectorImpl
<ISD::OutputArg
> &Outs
,
100 const SmallVectorImpl
<ISD::InputArg
> &Ins
,
101 DebugLoc dl
, SelectionDAG
&DAG
,
102 SmallVectorImpl
<SDValue
> &InVals
);
104 SDValue
LowerCCCArguments(SDValue Chain
,
105 CallingConv::ID CallConv
,
107 const SmallVectorImpl
<ISD::InputArg
> &Ins
,
110 SmallVectorImpl
<SDValue
> &InVals
);
112 SDValue
LowerCallResult(SDValue Chain
, SDValue InFlag
,
113 CallingConv::ID CallConv
, bool isVarArg
,
114 const SmallVectorImpl
<ISD::InputArg
> &Ins
,
115 DebugLoc dl
, SelectionDAG
&DAG
,
116 SmallVectorImpl
<SDValue
> &InVals
);
119 LowerFormalArguments(SDValue Chain
,
120 CallingConv::ID CallConv
, bool isVarArg
,
121 const SmallVectorImpl
<ISD::InputArg
> &Ins
,
122 DebugLoc dl
, SelectionDAG
&DAG
,
123 SmallVectorImpl
<SDValue
> &InVals
);
125 LowerCall(SDValue Chain
, SDValue Callee
,
126 CallingConv::ID CallConv
, bool isVarArg
, bool isTailCall
,
127 const SmallVectorImpl
<ISD::OutputArg
> &Outs
,
128 const SmallVectorImpl
<ISD::InputArg
> &Ins
,
129 DebugLoc dl
, SelectionDAG
&DAG
,
130 SmallVectorImpl
<SDValue
> &InVals
);
133 LowerReturn(SDValue Chain
,
134 CallingConv::ID CallConv
, bool isVarArg
,
135 const SmallVectorImpl
<ISD::OutputArg
> &Outs
,
136 DebugLoc dl
, SelectionDAG
&DAG
);
138 const MSP430Subtarget
&Subtarget
;
139 const MSP430TargetMachine
&TM
;
143 #endif // LLVM_TARGET_MSP430_ISELLOWERING_H