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