bdd55480b7444e7107682dd7b4a1765fe6c037b3
[oota-llvm.git] / lib / Target / PowerPC / PPCISelLowering.h
1 //===-- PPC32ISelLowering.h - PPC32 DAG Lowering Interface ------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Chris Lattner and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the interfaces that PPC uses to lower LLVM code into a
11 // selection DAG.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
16 #define LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
17
18 #include "llvm/Target/TargetLowering.h"
19 #include "llvm/CodeGen/SelectionDAG.h"
20 #include "PowerPC.h"
21
22 namespace llvm {
23   namespace PPCISD {
24     enum NodeType {
25       // Start the numbering where the builting ops and target ops leave off.
26       FIRST_NUMBER = ISD::BUILTIN_OP_END+PPC::INSTRUCTION_LIST_END,
27
28       /// FSEL - Traditional three-operand fsel node.
29       ///
30       FSEL,
31     };
32   }  
33   
34   class PPC32TargetLowering : public TargetLowering {
35     int VarArgsFrameIndex;            // FrameIndex for start of varargs area.
36     int ReturnAddrIndex;              // FrameIndex for return slot.
37   public:
38     PPC32TargetLowering(TargetMachine &TM);
39     
40     /// LowerOperation - Provide custom lowering hooks for some operations.
41     ///
42     virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG);
43     
44     /// LowerArguments - This hook must be implemented to indicate how we should
45     /// lower the arguments for the specified function, into the specified DAG.
46     virtual std::vector<SDOperand>
47       LowerArguments(Function &F, SelectionDAG &DAG);
48     
49     /// LowerCallTo - This hook lowers an abstract call to a function into an
50     /// actual call.
51     virtual std::pair<SDOperand, SDOperand>
52       LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg,
53                   unsigned CC,
54                   bool isTailCall, SDOperand Callee, ArgListTy &Args,
55                   SelectionDAG &DAG);
56     
57     virtual SDOperand LowerVAStart(SDOperand Chain, SDOperand VAListP,
58                                    Value *VAListV, SelectionDAG &DAG);
59     
60     virtual std::pair<SDOperand,SDOperand>
61       LowerVAArg(SDOperand Chain, SDOperand VAListP, Value *VAListV,
62                  const Type *ArgTy, SelectionDAG &DAG);
63     
64     virtual std::pair<SDOperand, SDOperand>
65       LowerFrameReturnAddress(bool isFrameAddr, SDOperand Chain, unsigned Depth,
66                               SelectionDAG &DAG);
67     
68     virtual MachineBasicBlock *InsertAtEndOfBasicBlock(MachineInstr *MI,
69                                                        MachineBasicBlock *MBB);
70   };
71 }
72
73 #endif   // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H