SparcISelLowering.h revision 79aa3417eb6f58d668aadfedf075240a41d35a26
1e62c1185bee05facc25d1d725434f517261d308bChris Lattner//===-- SparcISelLowering.h - Sparc DAG Lowering Interface ------*- C++ -*-===// 23da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 301d45827a1e512f3b19ba857772bf02baa3c0c4eJohn Criswell// The LLVM Compiler Infrastructure 401d45827a1e512f3b19ba857772bf02baa3c0c4eJohn Criswell// 53060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// This file is distributed under the University of Illinois Open Source 63060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// License. See LICENSE.TXT for details. 73da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 801d45827a1e512f3b19ba857772bf02baa3c0c4eJohn Criswell//===----------------------------------------------------------------------===// 9e62c1185bee05facc25d1d725434f517261d308bChris Lattner// 1014d7c59491347a2f8f29e120fd75a4cad42f68e7Chris Lattner// This file defines the interfaces that Sparc uses to lower LLVM code into a 1114d7c59491347a2f8f29e120fd75a4cad42f68e7Chris Lattner// selection DAG. 12e62c1185bee05facc25d1d725434f517261d308bChris Lattner// 13e62c1185bee05facc25d1d725434f517261d308bChris Lattner//===----------------------------------------------------------------------===// 14e62c1185bee05facc25d1d725434f517261d308bChris Lattner 15e62c1185bee05facc25d1d725434f517261d308bChris Lattner#ifndef SPARC_ISELLOWERING_H 16e62c1185bee05facc25d1d725434f517261d308bChris Lattner#define SPARC_ISELLOWERING_H 17e62c1185bee05facc25d1d725434f517261d308bChris Lattner 18099e198ae84c1a6cfe2a7c79ee9f47fa67caac8fChris Lattner#include "Sparc.h" 193cc52ea33c0b96d1682f14fc45c45b57df0f39b6Michael J. Spencer#include "llvm/Target/TargetLowering.h" 201a55180238dbcf11113f610aea010447e51f595bDaniel Dunbar 21e62c1185bee05facc25d1d725434f517261d308bChris Lattnernamespace llvm { 22028936ada14335bb04f377d46a6261dc4c66dafdJohn Criswell namespace SPISD { 23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke enum { 241a55180238dbcf11113f610aea010447e51f595bDaniel Dunbar FIRST_NUMBER = ISD::BUILTIN_OP_END, 2521870411d9c1807526b613d04c2ebae5a43c263bBob Wilson CMPICC, // Compare two GPR operands, set icc. 267dda395004eb962cef1c1554b1e8b2ad069760e0Chris Lattner CMPFCC, // Compare two FP operands, set fcc. 277cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner BRICC, // Branch to dest on icc condition 287cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner BRFCC, // Branch to dest on fcc condition 297cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner SELECT_ICC, // Select between two values using the current ICC flags. 307cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner SELECT_FCC, // Select between two values using the current FCC flags. 317cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner 327cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner Hi, Lo, // Hi/Lo operations, typically on a global address. 3340f71134b9fef0ca06c516f033cc9403394a913cChris Lattner 347cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner FTOI, // FP to Int within a FP register. 357cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner ITOF, // Int to FP within a FP register. 367dda395004eb962cef1c1554b1e8b2ad069760e0Chris Lattner 37d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher CALL, // A call instruction. 38e62c1185bee05facc25d1d725434f517261d308bChris Lattner RET_FLAG, // Return with a flag operand. 39e62c1185bee05facc25d1d725434f517261d308bChris Lattner GLOBAL_BASE_REG, // Global base reg for PIC 40e62c1185bee05facc25d1d725434f517261d308bChris Lattner FLUSHW // FLUSH register windows to stack 41e62c1185bee05facc25d1d725434f517261d308bChris Lattner }; 42e62c1185bee05facc25d1d725434f517261d308bChris Lattner } 43e3a1d054483d6e2551a43232f2c968fc7ce523f2Chris Lattner 44e62c1185bee05facc25d1d725434f517261d308bChris Lattner class SparcTargetLowering : public TargetLowering { 45e6c27de069225e1122c78385ad22a2ff656db8e6David Greene public: 46711e5d96aa648ebe96b09483d0775f3b16283e3dChris Lattner SparcTargetLowering(TargetMachine &TM); 474afc509b7ffe2c4ea234dfd7af5105feb21685d9David Greene virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 48e62c1185bee05facc25d1d725434f517261d308bChris Lattner 498e9a9774eb12b5242f74b8ac5b20e0a938ec9c53Chris Lattner /// computeMaskedBitsForTargetNode - Determine which of the bits specified 50b45b3b3cd14faaf5a3ea5226af7e1e3cd653e6cbChris Lattner /// in Mask are known to be either zero or one and return them in the 51b45b3b3cd14faaf5a3ea5226af7e1e3cd653e6cbChris Lattner /// KnownZero/KnownOne bitsets. 52a1651900e1772b05afd2280308e9acc5a58cefb8Chris Lattner virtual void computeMaskedBitsForTargetNode(const SDValue Op, 53b45b3b3cd14faaf5a3ea5226af7e1e3cd653e6cbChris Lattner const APInt &Mask, 541dba7abdd77e19c230f0426825a5ae4879471dccChris Lattner APInt &KnownZero, 557cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner APInt &KnownOne, 567dda395004eb962cef1c1554b1e8b2ad069760e0Chris Lattner const SelectionDAG &DAG, 57e62c1185bee05facc25d1d725434f517261d308bChris Lattner unsigned Depth = 0) const; 587dda395004eb962cef1c1554b1e8b2ad069760e0Chris Lattner 59293b13350c2fbae8a64b0b0beb440cb859968c8cBob Wilson virtual MachineBasicBlock * 6067db883487fca3472fdde51e931657e22d4d0495Chris Lattner EmitInstrWithCustomInserter(MachineInstr *MI, 61e62c1185bee05facc25d1d725434f517261d308bChris Lattner MachineBasicBlock *MBB) const; 62e62c1185bee05facc25d1d725434f517261d308bChris Lattner 63e62c1185bee05facc25d1d725434f517261d308bChris Lattner virtual const char *getTargetNodeName(unsigned Opcode) const; 64e62c1185bee05facc25d1d725434f517261d308bChris Lattner 65e62c1185bee05facc25d1d725434f517261d308bChris Lattner ConstraintType getConstraintType(const std::string &Constraint) const; 66e62c1185bee05facc25d1d725434f517261d308bChris Lattner std::pair<unsigned, const TargetRegisterClass*> 67e62c1185bee05facc25d1d725434f517261d308bChris Lattner getRegForInlineAsmConstraint(const std::string &Constraint, EVT VT) const; 68e62c1185bee05facc25d1d725434f517261d308bChris Lattner 6999ba1f7b8deaf2a296c98600dbf593754cbd43a2Chris Lattner virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; 701a55180238dbcf11113f610aea010447e51f595bDaniel Dunbar 717cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner virtual SDValue 727cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner LowerFormalArguments(SDValue Chain, 737cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner CallingConv::ID CallConv, 747cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner bool isVarArg, 757cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner const SmallVectorImpl<ISD::InputArg> &Ins, 767cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner DebugLoc dl, SelectionDAG &DAG, 777cf0ce4b8d122575c3348b5fa4947014c3d8432dChris Lattner SmallVectorImpl<SDValue> &InVals) const; 78d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher 79d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher virtual SDValue 80d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher LowerCall(SDValue Chain, SDValue Callee, CallingConv::ID CallConv, 81d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher bool isVarArg, bool doesNotRet, bool &isTailCall, 82d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher const SmallVectorImpl<ISD::OutputArg> &Outs, 83d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher const SmallVectorImpl<SDValue> &OutVals, 84d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher const SmallVectorImpl<ISD::InputArg> &Ins, 85d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher DebugLoc dl, SelectionDAG &DAG, 86e6c27de069225e1122c78385ad22a2ff656db8e6David Greene SmallVectorImpl<SDValue> &InVals) const; 87d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher 88d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher virtual SDValue 89e8cf21e8e3db64dd49777d6bf6c867d47e9f5407David Greene LowerReturn(SDValue Chain, 90d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher CallingConv::ID CallConv, bool isVarArg, 91d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher const SmallVectorImpl<ISD::OutputArg> &Outs, 924afc509b7ffe2c4ea234dfd7af5105feb21685d9David Greene const SmallVectorImpl<SDValue> &OutVals, 93d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher DebugLoc dl, SelectionDAG &DAG) const; 94d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher 95d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const; 96d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const; 97d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher 98d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher unsigned getSRetArgSize(SelectionDAG &DAG, SDValue Callee) const; 99d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher }; 100b45b3b3cd14faaf5a3ea5226af7e1e3cd653e6cbChris Lattner} // end namespace llvm 101d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher 102d568b3f55294917d1cc701da14a8a7daeb6563e6Eric Christopher#endif // SPARC_ISELLOWERING_H 103b45b3b3cd14faaf5a3ea5226af7e1e3cd653e6cbChris Lattner