Home | History | Annotate | Download | only in Nios2
      1 //===-- Nios2ISelLowering.h - Nios2 DAG Lowering Interface ------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines the interfaces that Nios2 uses to lower LLVM code into a
     11 // selection DAG.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_LIB_TARGET_NIOS2_NIOS2ISELLOWERING_H
     16 #define LLVM_LIB_TARGET_NIOS2_NIOS2ISELLOWERING_H
     17 
     18 #include "Nios2.h"
     19 #include "llvm/CodeGen/TargetLowering.h"
     20 
     21 namespace llvm {
     22 class Nios2Subtarget;
     23 
     24 namespace Nios2ISD {
     25 enum NodeType {
     26   // Start the numbering from where ISD NodeType finishes.
     27   FIRST_NUMBER = ISD::BUILTIN_OP_END,
     28 
     29   // Get the Higher 16 bits from a 32-bit immediate
     30   // No relation with Nios2 Hi register
     31   Hi,
     32   // Get the Lower 16 bits from a 32-bit immediate
     33   // No relation with Nios2 Lo register
     34   Lo,
     35   // Return
     36   Ret
     37 };
     38 }
     39 
     40 class Nios2TargetLowering : public TargetLowering {
     41   const Nios2Subtarget *Subtarget;
     42 
     43 public:
     44   Nios2TargetLowering(const TargetMachine &TM, const Nios2Subtarget &STI);
     45 
     46   /// getTargetNodeName - This method returns the name of a target specific
     47   //  DAG node.
     48   const char *getTargetNodeName(unsigned Opcode) const override;
     49 
     50   SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
     51                                bool IsVarArg,
     52                                const SmallVectorImpl<ISD::InputArg> &Ins,
     53                                const SDLoc &dl, SelectionDAG &DAG,
     54                                SmallVectorImpl<SDValue> &InVals) const override;
     55 
     56   SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
     57                       const SmallVectorImpl<ISD::OutputArg> &Outs,
     58                       const SmallVectorImpl<SDValue> &OutVals, const SDLoc &dl,
     59                       SelectionDAG &DAG) const override;
     60 };
     61 } // end namespace llvm
     62 
     63 #endif // NIOS2_ISELLOWERING_H
     64