PPCISelLowering.h revision 0bbea954331b8f08afa5b094dfb0841829c70eaa
10bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner//===-- PPC32ISelLowering.h - PPC32 DAG Lowering Interface ------*- C++ -*-===//
27c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//
37c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//                     The LLVM Compiler Infrastructure
47c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//
57c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// This file was developed by Chris Lattner and is distributed under
67c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details.
77c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//
87c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//===----------------------------------------------------------------------===//
97c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//
107c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// This file defines the interfaces that PPC uses to lower LLVM code into a
117c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// selection DAG.
127c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//
137c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//===----------------------------------------------------------------------===//
147c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
157c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#ifndef LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
167c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#define LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
177c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
187c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#include "llvm/Target/TargetLowering.h"
190bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner#include "llvm/CodeGen/SelectionDAG.h"
200bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner#include "PowerPC.h"
217c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
227c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattnernamespace llvm {
230bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner  namespace PPCISD {
240bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner    enum NodeType {
250bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner      // Start the numbering where the builting ops and target ops leave off.
260bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner      FIRST_NUMBER = ISD::BUILTIN_OP_END+PPC::INSTRUCTION_LIST_END,
270bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner
280bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner      /// FSEL - Traditional three-operand fsel node.
290bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner      ///
300bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner      FSEL,
310bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner    };
320bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner  }
330bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner
347c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner  class PPC32TargetLowering : public TargetLowering {
357c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    int VarArgsFrameIndex;            // FrameIndex for start of varargs area.
367c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    int ReturnAddrIndex;              // FrameIndex for return slot.
377c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner  public:
387c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    PPC32TargetLowering(TargetMachine &TM);
397c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
40e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner    /// LowerOperation - Provide custom lowering hooks for some operations.
41e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner    ///
42e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner    virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG);
43e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner
447c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    /// LowerArguments - This hook must be implemented to indicate how we should
457c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    /// lower the arguments for the specified function, into the specified DAG.
467c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    virtual std::vector<SDOperand>
477c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner      LowerArguments(Function &F, SelectionDAG &DAG);
487c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
497c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    /// LowerCallTo - This hook lowers an abstract call to a function into an
507c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    /// actual call.
517c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    virtual std::pair<SDOperand, SDOperand>
527c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner      LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg,
537c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                  unsigned CC,
547c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                  bool isTailCall, SDOperand Callee, ArgListTy &Args,
557c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                  SelectionDAG &DAG);
567c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
577c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    virtual SDOperand LowerVAStart(SDOperand Chain, SDOperand VAListP,
587c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                                   Value *VAListV, SelectionDAG &DAG);
597c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
607c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    virtual std::pair<SDOperand,SDOperand>
617c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner      LowerVAArg(SDOperand Chain, SDOperand VAListP, Value *VAListV,
627c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                 const Type *ArgTy, SelectionDAG &DAG);
637c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
647c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner    virtual std::pair<SDOperand, SDOperand>
657c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner      LowerFrameReturnAddress(bool isFrameAddr, SDOperand Chain, unsigned Depth,
667c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner                              SelectionDAG &DAG);
677c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner  };
687c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner}
697c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner
707c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#endif   // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
71