blob: 760a51d8dd5a8f0d4127a3411d199e2871c4b355 [file] [log] [blame]
Anton Korobeynikov32b7d5b2009-07-16 13:27:25 +00001//==-- 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 {
Anton Korobeynikov974e6a52009-07-16 13:28:59 +000025 FIRST_NUMBER = ISD::BUILTIN_OP_END,
26
27 /// Return with a flag operand. Operand 0 is the chain operand.
Anton Korobeynikov961cd4a2009-07-16 13:50:21 +000028 RET_FLAG,
29
30 /// CALL/TAILCALL - These operations represent an abstract call
31 /// instruction, which includes a bunch of information.
32 CALL
Anton Korobeynikov32b7d5b2009-07-16 13:27:25 +000033 };
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
Anton Korobeynikov974e6a52009-07-16 13:28:59 +000050 SDValue LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG);
51 SDValue LowerRET(SDValue Op, SelectionDAG &DAG);
Anton Korobeynikov961cd4a2009-07-16 13:50:21 +000052 SDValue LowerCALL(SDValue Op, SelectionDAG &DAG);
53
Anton Korobeynikov974e6a52009-07-16 13:28:59 +000054 SDValue LowerCCCArguments(SDValue Op, SelectionDAG &DAG);
Anton Korobeynikov961cd4a2009-07-16 13:50:21 +000055 SDValue LowerCCCCallTo(SDValue Op, SelectionDAG &DAG, unsigned CC);
Anton Korobeynikov974e6a52009-07-16 13:28:59 +000056
57 SDNode* LowerCallResult(SDValue Chain, SDValue InFlag,
58 CallSDNode *TheCall,
59 unsigned CallingConv, SelectionDAG &DAG);
60
Anton Korobeynikov32b7d5b2009-07-16 13:27:25 +000061 private:
62 const SystemZSubtarget &Subtarget;
63 const SystemZTargetMachine &TM;
64 };
65} // namespace llvm
66
67#endif // LLVM_TARGET_SystemZ_ISELLOWERING_H