SIISelLowering.h revision f95b1621887e3409ceec2db47e1b44271d934735
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; 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; 29e86f9d70ca29429ea83bc2361cf908dc566783afTom Stellard SDValue LowerSIGN_EXTEND(SDValue Op, SelectionDAG &DAG) const; 308cd70d3a5bbc5c2b02d288337748a4fd5ddc9f54Tom Stellard SDValue LowerZERO_EXTEND(SDValue Op, SelectionDAG &DAG) const; 316b7d99d47321ebb478b22afd2e317fe89d2149dbTom Stellard SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const; 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 3368db37b952be497c94c7aa98cf26f3baadb5afd3Tom Stellard SDValue ResourceDescriptorToi128(SDValue Op, SelectionDAG &DAG) const; 34d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig bool foldImm(SDValue &Operand, int32_t &Immediate, 35d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig bool &ScalarSlotUsed) const; 363406d882c02a6cd1e16f4636351c23dcb68d785fTom Stellard const TargetRegisterClass *getRegClassForNode(SelectionDAG &DAG, 373406d882c02a6cd1e16f4636351c23dcb68d785fTom Stellard const SDValue &Op) const; 389bf4590aaa26ebb5afdbec079daeee8e0b268b47Tom Stellard bool fitsRegClass(SelectionDAG &DAG, const SDValue &Op, 399bf4590aaa26ebb5afdbec079daeee8e0b268b47Tom Stellard unsigned RegClass) const; 40225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault void ensureSRegLimit(SelectionDAG &DAG, SDValue &Operand, 41d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig unsigned RegClass, bool &ScalarSlotUsed) const; 42d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig 4384a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig SDNode *foldOperands(MachineSDNode *N, SelectionDAG &DAG) const; 4484a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig void adjustWritemask(MachineSDNode *&N, SelectionDAG &DAG) const; 4517e8ad67f0ba5e81e53ce21cd260fe3368d6231dTom Stellard MachineSDNode *AdjustRegClass(MachineSDNode *N, SelectionDAG &DAG) const; 4684a775d8e3d5a3765e01db4b454f849ed8be99beChristian Konig 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 48f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard SITargetLowering(TargetMachine &tm); 4973e44d8ae4c227af92b8f96f447e4a7ed38f6de5Tom Stellard bool allowsUnalignedMemoryAccesses(EVT VT, bool *IsFast) const; 50a41520cf9b9cefed2091a0624a34c5f7fdb42a68Tom Stellard virtual bool shouldSplitVectorElementType(EVT VT) const; 5190c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig 5290c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, 5390c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig bool isVarArg, 5490c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig const SmallVectorImpl<ISD::InputArg> &Ins, 55ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick SDLoc DL, SelectionDAG &DAG, 5690c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig SmallVectorImpl<SDValue> &InVals) const; 5790c64cbaa124e0e8541680efeaa56f0e6eb78d9aChristian Konig 58f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr * MI, 59f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard MachineBasicBlock * BB) const; 60225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault virtual EVT getSetCCResultType(LLVMContext &Context, EVT VT) const; 61b87082228bb5151598addcf0eb3756cf0f906ab6Christian Konig virtual MVT getScalarShiftAmountTy(EVT VT) const; 626e4dbcd1150ea6d4fbf87a7840b3d8481bfcc8c5Niels Ole Salscheider virtual bool isFMAFasterThanFMulAndFAdd(EVT VT) const; 63f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 64f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 65c018ecac2f2f475b6e1023e90d0e48fcf9bd6e1dChristian Konig virtual SDNode *PostISelFolding(MachineSDNode *N, SelectionDAG &DAG) const; 664d0e8a8a3e2e5b98f598acad4d57452b99d52e74Christian Konig virtual void AdjustInstrPostInstrSelection(MachineInstr *MI, 674d0e8a8a3e2e5b98f598acad4d57452b99d52e74Christian Konig SDNode *Node) const; 68d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig 69d3b5509b8099b72104bd8a0d9a998a69eb56ab2aChristian Konig int32_t analyzeImmediate(const SDNode *N) const; 70e5fcc0dee4b41658986047f346201ad98757e7d5Tom Stellard SDValue CreateLiveInRegister(SelectionDAG &DAG, const TargetRegisterClass *RC, 71e5fcc0dee4b41658986047f346201ad98757e7d5Tom Stellard unsigned Reg, EVT VT) const; 72f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 73f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 76f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif //SIISELLOWERING_H 77