1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- R600ISelLowering.h - R600 DAG Lowering Interface -*- C++ -*--------===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief R600 DAG Lowering interface definition 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef R600ISELLOWERING_H 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define R600ISELLOWERING_H 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUISelLowering.h" 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass R600InstrInfo; 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass R600TargetLowering : public AMDGPUTargetLowering { 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard R600TargetLowering(TargetMachine &TM); 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr *MI, 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard MachineBasicBlock * BB) const; 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard void ReplaceNodeResults(SDNode * N, 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SmallVectorImpl<SDValue> &Results, 33f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SelectionDAG &DAG) const; 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue LowerFormalArguments( 35f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue Chain, 36f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard CallingConv::ID CallConv, 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool isVarArg, 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const SmallVectorImpl<ISD::InputArg> &Ins, 39ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick SDLoc DL, SelectionDAG &DAG, 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SmallVectorImpl<SDValue> &InVals) const; 41225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault virtual EVT getSetCCResultType(LLVMContext &, EVT VT) const; 42f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardprivate: 43c6f13db656c7649f933c74c4f90c09ff74de52a8Vincent Lejeune unsigned Gen; 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// Each OpenCL kernel has nine implicit parameters that are stored in the 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// first nine dwords of a Vertex Buffer. These implicit parameters are 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// lowered to load instructions which retreive the values from the Vertex 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// Buffer. 48f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerImplicitParameter(SelectionDAG &DAG, EVT VT, 49ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick SDLoc DL, unsigned DwordOffset) const; 50f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard void lowerImplicitParameter(MachineInstr *MI, MachineBasicBlock &BB, 52f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard MachineRegisterInfo & MRI, unsigned dword_offset) const; 5398017a015bb862afce4f90d432eded4e28fe1d26Vincent Lejeune SDValue OptimizeSwizzle(SDValue BuildVector, SDValue Swz[], SelectionDAG &DAG) const; 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \brief Lower ROTL opcode to BITALIGN 56f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerROTL(SDValue Op, SelectionDAG &DAG) const; 57f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 58f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; 59f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const; 60f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) const; 61f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerFPTOUINT(SDValue Op, SelectionDAG &DAG) const; 629f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) const; 63c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard SDValue LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const; 64c6f13db656c7649f933c74c4f90c09ff74de52a8Vincent Lejeune SDValue LowerTrig(SDValue Op, SelectionDAG &DAG) const; 65c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard 66c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard SDValue stackPtrToRegIndex(SDValue Ptr, unsigned StackWidth, 67c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard SelectionDAG &DAG) const; 68c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard void getStackAddress(unsigned StackWidth, unsigned ElemIdx, 69c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard unsigned &Channel, unsigned &PtrIncr) const; 70f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool isZero(SDValue Op) const; 71f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 72f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 73f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm; 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif // R600ISELLOWERING_H 76