SystemZISelLowering.h revision ba249e41f3ffa9e947b9173e3965385ec6324ffb
1//==-- SystemZISelLowering.h - SystemZ 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 SystemZ uses to lower LLVM code into a
11// selection DAG.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_TARGET_SystemZ_ISELLOWERING_H
16#define LLVM_TARGET_SystemZ_ISELLOWERING_H
17
18#include "SystemZ.h"
19#include "llvm/CodeGen/SelectionDAG.h"
20#include "llvm/Target/TargetLowering.h"
21
22namespace llvm {
23  namespace SystemZISD {
24    enum {
25      FIRST_NUMBER = ISD::BUILTIN_OP_END,
26
27      /// Return with a flag operand. Operand 0 is the chain operand.
28      RET_FLAG,
29
30      /// CALL/TAILCALL - These operations represent an abstract call
31      /// instruction, which includes a bunch of information.
32      CALL
33    };
34  }
35
36  class SystemZSubtarget;
37  class SystemZTargetMachine;
38
39  class SystemZTargetLowering : public TargetLowering {
40  public:
41    explicit SystemZTargetLowering(SystemZTargetMachine &TM);
42
43    /// LowerOperation - Provide custom lowering hooks for some operations.
44    virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG);
45
46    /// getTargetNodeName - This method returns the name of a target specific
47    /// DAG node.
48    virtual const char *getTargetNodeName(unsigned Opcode) const;
49
50    SDValue LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG);
51    SDValue LowerRET(SDValue Op, SelectionDAG &DAG);
52    SDValue LowerCALL(SDValue Op, SelectionDAG &DAG);
53
54    SDValue LowerCCCArguments(SDValue Op, SelectionDAG &DAG);
55    SDValue LowerCCCCallTo(SDValue Op, SelectionDAG &DAG, unsigned CC);
56
57    SDNode* LowerCallResult(SDValue Chain, SDValue InFlag,
58                            CallSDNode *TheCall,
59                            unsigned CallingConv, SelectionDAG &DAG);
60
61  private:
62    const SystemZSubtarget &Subtarget;
63    const SystemZTargetMachine &TM;
64  };
65} // namespace llvm
66
67#endif // LLVM_TARGET_SystemZ_ISELLOWERING_H
68