]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/Nios2/Nios2ISelLowering.h
MFC r345805: Unify SCSI_STATUS_BUSY retry handling with other cases.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / Nios2 / Nios2ISelLowering.h
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