blob: feb5cd8dbece09bd1a3d131c1b6e9aa8d15dd255 [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.
28 RET_FLAG
Anton Korobeynikov32b7d5b2009-07-16 13:27:25 +000029 };
30 }
31
32 class SystemZSubtarget;
33 class SystemZTargetMachine;
34
35 class SystemZTargetLowering : public TargetLowering {
36 public:
37 explicit SystemZTargetLowering(SystemZTargetMachine &TM);
38
39 /// LowerOperation - Provide custom lowering hooks for some operations.
40 virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG);
41
42 /// getTargetNodeName - This method returns the name of a target specific
43 /// DAG node.
44 virtual const char *getTargetNodeName(unsigned Opcode) const;
45
Anton Korobeynikov974e6a52009-07-16 13:28:59 +000046 SDValue LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG);
47 SDValue LowerRET(SDValue Op, SelectionDAG &DAG);
48 SDValue LowerCCCArguments(SDValue Op, SelectionDAG &DAG);
49
50 SDNode* LowerCallResult(SDValue Chain, SDValue InFlag,
51 CallSDNode *TheCall,
52 unsigned CallingConv, SelectionDAG &DAG);
53
Anton Korobeynikov32b7d5b2009-07-16 13:27:25 +000054 private:
55 const SystemZSubtarget &Subtarget;
56 const SystemZTargetMachine &TM;
57 };
58} // namespace llvm
59
60#endif // LLVM_TARGET_SystemZ_ISELLOWERING_H