SystemZISelLowering.h revision 4ec3e5ffd10b23c3614cd9a766c2a3ec1fe62ba4
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 "SystemZRegisterInfo.h" 20#include "llvm/CodeGen/SelectionDAG.h" 21#include "llvm/Target/TargetLowering.h" 22 23namespace llvm { 24 namespace SystemZISD { 25 enum { 26 FIRST_NUMBER = ISD::BUILTIN_OP_END, 27 28 /// Return with a flag operand. Operand 0 is the chain operand. 29 RET_FLAG, 30 31 /// CALL/TAILCALL - These operations represent an abstract call 32 /// instruction, which includes a bunch of information. 33 CALL, 34 35 CMP, 36 UCMP, 37 BRCOND 38 }; 39 } 40 41 class SystemZSubtarget; 42 class SystemZTargetMachine; 43 44 class SystemZTargetLowering : public TargetLowering { 45 public: 46 explicit SystemZTargetLowering(SystemZTargetMachine &TM); 47 48 /// LowerOperation - Provide custom lowering hooks for some operations. 49 virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG); 50 51 /// getTargetNodeName - This method returns the name of a target specific 52 /// DAG node. 53 virtual const char *getTargetNodeName(unsigned Opcode) const; 54 55 SDValue LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG); 56 SDValue LowerRET(SDValue Op, SelectionDAG &DAG); 57 SDValue LowerCALL(SDValue Op, SelectionDAG &DAG); 58 SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG); 59 60 SDValue LowerCCCArguments(SDValue Op, SelectionDAG &DAG); 61 SDValue LowerCCCCallTo(SDValue Op, SelectionDAG &DAG, unsigned CC); 62 SDNode* LowerCallResult(SDValue Chain, SDValue InFlag, 63 CallSDNode *TheCall, 64 unsigned CallingConv, SelectionDAG &DAG); 65 66 SDValue EmitCmp(SDValue LHS, SDValue RHS, 67 ISD::CondCode CC, SDValue &SystemZCC, 68 SelectionDAG &DAG); 69 70 private: 71 const SystemZSubtarget &Subtarget; 72 const SystemZTargetMachine &TM; 73 const SystemZRegisterInfo *RegInfo; 74 }; 75} // namespace llvm 76 77#endif // LLVM_TARGET_SystemZ_ISELLOWERING_H 78