SIISelLowering.h revision a2b4eb6d15a13de257319ac6231b5ab622cd02b1
1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- SIISelLowering.h - SI 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 SI DAG Lowering interface definition 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef SIISELLOWERING_H 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define SIISELLOWERING_H 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUISelLowering.h" 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "SIInstrInfo.h" 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass SITargetLowering : public AMDGPUTargetLowering { 24f95b1621887e3409ceec2db47e1b44271d934735Tom Stellard SDValue LowerParameter(SelectionDAG &DAG, EVT VT, EVT MemVT, SDLoc DL, 25e5fcc0dee4b41658986047f346201ad98757e7d5Tom Stellard SDValue Chain, unsigned Offset) const; 2668db37b952be497c94c7aa98cf26f3baadb5afd3Tom Stellard SDValue LowerSampleIntrinsic(unsigned Opcode, const SDValue &Op, 2768db37b952be497c94c7aa98cf26f3baadb5afd3Tom Stellard SelectionDAG &DAG) const; 28a2b4eb6d15a13de257319ac6231b5ab622cd02b1Tom Stellard SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) const; 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; 30e86f9d70ca29429ea83bc2361cf908dc566783afTom Stellard SDValue LowerSIGN_EXTEND(SDValue Op, SelectionDAG &DAG) const; 31a2b4eb6d15a13de257319ac6231b5ab622cd02b1Tom Stellard SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) const; 328cd70d3a5bbc5c2b02d288337748a4fd5ddc9f54Tom Stellard SDValue LowerZERO_EXTEND(SDValue Op, SelectionDAG &DAG) const; 336b7d99d47321ebb478b22afd2e317fe89d2149dbTom Stellard SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const; 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 3568db37b952be497c94c7aa98cf26f3baadb5afd3Tom Stellard SDValue ResourceDescriptorToi128(SDValue Op, SelectionDAG &DAG) const; 36d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig bool foldImm(SDValue &Operand, int32_t &Immediate, 37d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig bool &ScalarSlotUsed) const; 383406d882c02a6cd1e16f4636351c23dcb68d785fTom Stellard const TargetRegisterClass *getRegClassForNode(SelectionDAG &DAG, 393406d882c02a6cd1e16f4636351c23dcb68d785fTom Stellard const SDValue &Op) const; 409bf4590aaa26ebb5afdbec079daeee8e0b268b47Tom Stellard bool fitsRegClass(SelectionDAG &DAG, const SDValue &Op, 419bf4590aaa26ebb5afdbec079daeee8e0b268b47Tom Stellard unsigned RegClass) const; 42225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault void ensureSRegLimit(SelectionDAG &DAG, SDValue &Operand, 43d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig unsigned RegClass, bool &ScalarSlotUsed) const; 44d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig 4584a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig SDNode *foldOperands(MachineSDNode *N, SelectionDAG &DAG) const; 4684a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig void adjustWritemask(MachineSDNode *&N, SelectionDAG &DAG) const; 4717e8ad67f0ba5e81e53ce21cd260fe3368d6231dTom Stellard MachineSDNode *AdjustRegClass(MachineSDNode *N, SelectionDAG &DAG) const; 4884a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig 49f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 50f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SITargetLowering(TargetMachine &tm); 5173e44d8ae4c227af92b8f96f447e4a7ed38f6de5Tom Stellard bool allowsUnalignedMemoryAccesses(EVT VT, bool *IsFast) const; 52a41520cf9b9cefed2091a0624a34c5f7fdb42a68Tom Stellard virtual bool shouldSplitVectorElementType(EVT VT) const; 5390c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig 5490c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, 5590c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig bool isVarArg, 5690c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig const SmallVectorImpl<ISD::InputArg> &Ins, 57ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick SDLoc DL, SelectionDAG &DAG, 5890c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig SmallVectorImpl<SDValue> &InVals) const; 5990c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig 60f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr * MI, 61f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard MachineBasicBlock * BB) const; 62225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault virtual EVT getSetCCResultType(LLVMContext &Context, EVT VT) const; 63b87082228bb5151598addcf0eb3756cf0f906ab6Christian Konig virtual MVT getScalarShiftAmountTy(EVT VT) const; 646e4dbcd1150ea6d4fbf87a7840b3d8481bfcc8c5Niels Ole Salscheider virtual bool isFMAFasterThanFMulAndFAdd(EVT VT) const; 65f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 66f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 67c018ecac2f2f475b6e1023e90d0e48fcf9bd6e1dChristian Konig virtual SDNode *PostISelFolding(MachineSDNode *N, SelectionDAG &DAG) const; 684d0e8a8a3e2e5b98f598acad4d57452b99d52e74Christian Konig virtual void AdjustInstrPostInstrSelection(MachineInstr *MI, 694d0e8a8a3e2e5b98f598acad4d57452b99d52e74Christian Konig SDNode *Node) const; 70d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig 71d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig int32_t analyzeImmediate(const SDNode *N) const; 72e5fcc0dee4b41658986047f346201ad98757e7d5Tom Stellard SDValue CreateLiveInRegister(SelectionDAG &DAG, const TargetRegisterClass *RC, 73e5fcc0dee4b41658986047f346201ad98757e7d5Tom Stellard unsigned Reg, EVT VT) const; 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 76f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 77f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 78f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif //SIISELLOWERING_H 79