llvm-project/llvm/lib/Target/PowerPC/PPCSchedule.td

521 lines
16 KiB
TableGen

//===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
// Instruction Itinerary classes used for PowerPC
//
def IIC_IntSimple : InstrItinClass;
def IIC_IntGeneral : InstrItinClass;
def IIC_IntCompare : InstrItinClass;
def IIC_IntDivD : InstrItinClass;
def IIC_IntDivW : InstrItinClass;
def IIC_IntMFFS : InstrItinClass;
def IIC_IntMFVSCR : InstrItinClass;
def IIC_IntMTFSB0 : InstrItinClass;
def IIC_IntMTSRD : InstrItinClass;
def IIC_IntMulHD : InstrItinClass;
def IIC_IntMulHW : InstrItinClass;
def IIC_IntMulHWU : InstrItinClass;
def IIC_IntMulLI : InstrItinClass;
def IIC_IntRFID : InstrItinClass;
def IIC_IntRotateD : InstrItinClass;
def IIC_IntRotateDI : InstrItinClass;
def IIC_IntRotate : InstrItinClass;
def IIC_IntShift : InstrItinClass;
def IIC_IntTrapD : InstrItinClass;
def IIC_IntTrapW : InstrItinClass;
def IIC_BrB : InstrItinClass;
def IIC_BrCR : InstrItinClass;
def IIC_BrMCR : InstrItinClass;
def IIC_BrMCRX : InstrItinClass;
def IIC_LdStDCBA : InstrItinClass;
def IIC_LdStDCBF : InstrItinClass;
def IIC_LdStDCBI : InstrItinClass;
def IIC_LdStLoad : InstrItinClass;
def IIC_LdStLoadUpd : InstrItinClass;
def IIC_LdStLoadUpdX : InstrItinClass;
def IIC_LdStStore : InstrItinClass;
def IIC_LdStStoreUpd : InstrItinClass;
def IIC_LdStDSS : InstrItinClass;
def IIC_LdStICBI : InstrItinClass;
def IIC_LdStLD : InstrItinClass;
def IIC_LdStLDU : InstrItinClass;
def IIC_LdStLDUX : InstrItinClass;
def IIC_LdStLDARX : InstrItinClass;
def IIC_LdStLFD : InstrItinClass;
def IIC_LdStLFDU : InstrItinClass;
def IIC_LdStLFDUX : InstrItinClass;
def IIC_LdStLHA : InstrItinClass;
def IIC_LdStLHAU : InstrItinClass;
def IIC_LdStLHAUX : InstrItinClass;
def IIC_LdStLMW : InstrItinClass;
def IIC_LdStLVecX : InstrItinClass;
def IIC_LdStLWA : InstrItinClass;
def IIC_LdStLWARX : InstrItinClass;
def IIC_LdStSLBIA : InstrItinClass;
def IIC_LdStSLBIE : InstrItinClass;
def IIC_LdStSTD : InstrItinClass;
def IIC_LdStSTDCX : InstrItinClass;
def IIC_LdStSTDU : InstrItinClass;
def IIC_LdStSTDUX : InstrItinClass;
def IIC_LdStSTFD : InstrItinClass;
def IIC_LdStSTFDU : InstrItinClass;
def IIC_LdStSTVEBX : InstrItinClass;
def IIC_LdStSTWCX : InstrItinClass;
def IIC_LdStSync : InstrItinClass;
def IIC_SprISYNC : InstrItinClass;
def IIC_SprMFSR : InstrItinClass;
def IIC_SprMTMSR : InstrItinClass;
def IIC_SprMTSR : InstrItinClass;
def IIC_SprTLBSYNC : InstrItinClass;
def IIC_SprMFCR : InstrItinClass;
def IIC_SprMFCRF : InstrItinClass;
def IIC_SprMFMSR : InstrItinClass;
def IIC_SprMFSPR : InstrItinClass;
def IIC_SprMFTB : InstrItinClass;
def IIC_SprMTSPR : InstrItinClass;
def IIC_SprMTSRIN : InstrItinClass;
def IIC_SprRFI : InstrItinClass;
def IIC_SprSC : InstrItinClass;
def IIC_FPGeneral : InstrItinClass;
def IIC_FPAddSub : InstrItinClass;
def IIC_FPCompare : InstrItinClass;
def IIC_FPDivD : InstrItinClass;
def IIC_FPDivS : InstrItinClass;
def IIC_FPFused : InstrItinClass;
def IIC_FPRes : InstrItinClass;
def IIC_FPSqrtD : InstrItinClass;
def IIC_FPSqrtS : InstrItinClass;
def IIC_VecGeneral : InstrItinClass;
def IIC_VecFP : InstrItinClass;
def IIC_VecFPCompare : InstrItinClass;
def IIC_VecComplex : InstrItinClass;
def IIC_VecPerm : InstrItinClass;
def IIC_VecFPRound : InstrItinClass;
def IIC_VecVSL : InstrItinClass;
def IIC_VecVSR : InstrItinClass;
def IIC_SprMTMSRD : InstrItinClass;
def IIC_SprSLIE : InstrItinClass;
def IIC_SprSLBIE : InstrItinClass;
def IIC_SprSLBMTE : InstrItinClass;
def IIC_SprSLBMFEE : InstrItinClass;
def IIC_SprSLBIA : InstrItinClass;
def IIC_SprTLBIEL : InstrItinClass;
def IIC_SprTLBIE : InstrItinClass;
//===----------------------------------------------------------------------===//
// Processor instruction itineraries.
include "PPCScheduleG3.td"
include "PPCSchedule440.td"
include "PPCScheduleG4.td"
include "PPCScheduleG4Plus.td"
include "PPCScheduleG5.td"
include "PPCScheduleP7.td"
include "PPCScheduleA2.td"
include "PPCScheduleE500mc.td"
include "PPCScheduleE5500.td"
//===----------------------------------------------------------------------===//
// Instruction to itinerary class map - When add new opcodes to the supported
// set, refer to the following table to determine which itinerary class the
// opcode belongs.
//
// opcode itinerary class
// ====== ===============
// add IIC_IntSimple
// addc IIC_IntGeneral
// adde IIC_IntGeneral
// addi IIC_IntSimple
// addic IIC_IntGeneral
// addic. IIC_IntGeneral
// addis IIC_IntSimple
// addme IIC_IntGeneral
// addze IIC_IntGeneral
// and IIC_IntSimple
// andc IIC_IntSimple
// andi. IIC_IntGeneral
// andis. IIC_IntGeneral
// b IIC_BrB
// bc IIC_BrB
// bcctr IIC_BrB
// bclr IIC_BrB
// cmp IIC_IntCompare
// cmpi IIC_IntCompare
// cmpl IIC_IntCompare
// cmpli IIC_IntCompare
// cntlzd IIC_IntRotateD
// cntlzw IIC_IntGeneral
// crand IIC_BrCR
// crandc IIC_BrCR
// creqv IIC_BrCR
// crnand IIC_BrCR
// crnor IIC_BrCR
// cror IIC_BrCR
// crorc IIC_BrCR
// crxor IIC_BrCR
// dcba IIC_LdStDCBA
// dcbf IIC_LdStDCBF
// dcbi IIC_LdStDCBI
// dcbst IIC_LdStDCBF
// dcbt IIC_LdStLoad
// dcbtst IIC_LdStLoad
// dcbz IIC_LdStDCBF
// divd IIC_IntDivD
// divdu IIC_IntDivD
// divw IIC_IntDivW
// divwu IIC_IntDivW
// dss IIC_LdStDSS
// dst IIC_LdStDSS
// dstst IIC_LdStDSS
// eciwx IIC_LdStLoad
// ecowx IIC_LdStLoad
// eieio IIC_LdStLoad
// eqv IIC_IntSimple
// extsb IIC_IntSimple
// extsh IIC_IntSimple
// extsw IIC_IntSimple
// fabs IIC_FPGeneral
// fadd IIC_FPAddSub
// fadds IIC_FPGeneral
// fcfid IIC_FPGeneral
// fcmpo IIC_FPCompare
// fcmpu IIC_FPCompare
// fctid IIC_FPGeneral
// fctidz IIC_FPGeneral
// fctiw IIC_FPGeneral
// fctiwz IIC_FPGeneral
// fdiv IIC_FPDivD
// fdivs IIC_FPDivS
// fmadd IIC_FPFused
// fmadds IIC_FPGeneral
// fmr IIC_FPGeneral
// fmsub IIC_FPFused
// fmsubs IIC_FPGeneral
// fmul IIC_FPFused
// fmuls IIC_FPGeneral
// fnabs IIC_FPGeneral
// fneg IIC_FPGeneral
// fnmadd IIC_FPFused
// fnmadds IIC_FPGeneral
// fnmsub IIC_FPFused
// fnmsubs IIC_FPGeneral
// fres IIC_FPRes
// frsp IIC_FPGeneral
// frsqrte IIC_FPGeneral
// fsel IIC_FPGeneral
// fsqrt IIC_FPSqrtD
// fsqrts IIC_FPSqrtS
// fsub IIC_FPAddSub
// fsubs IIC_FPGeneral
// icbi IIC_LdStICBI
// isync IIC_SprISYNC
// lbz IIC_LdStLoad
// lbzu IIC_LdStLoadUpd
// lbzux IIC_LdStLoadUpdX
// lbzx IIC_LdStLoad
// ld IIC_LdStLD
// ldarx IIC_LdStLDARX
// ldu IIC_LdStLDU
// ldux IIC_LdStLDUX
// ldx IIC_LdStLD
// lfd IIC_LdStLFD
// lfdu IIC_LdStLFDU
// lfdux IIC_LdStLFDUX
// lfdx IIC_LdStLFD
// lfs IIC_LdStLFD
// lfsu IIC_LdStLFDU
// lfsux IIC_LdStLFDUX
// lfsx IIC_LdStLFD
// lha IIC_LdStLHA
// lhau IIC_LdStLHAU
// lhaux IIC_LdStLHAUX
// lhax IIC_LdStLHA
// lhbrx IIC_LdStLoad
// lhz IIC_LdStLoad
// lhzu IIC_LdStLoadUpd
// lhzux IIC_LdStLoadUpdX
// lhzx IIC_LdStLoad
// lmw IIC_LdStLMW
// lswi IIC_LdStLMW
// lswx IIC_LdStLMW
// lvebx IIC_LdStLVecX
// lvehx IIC_LdStLVecX
// lvewx IIC_LdStLVecX
// lvsl IIC_LdStLVecX
// lvsr IIC_LdStLVecX
// lvx IIC_LdStLVecX
// lvxl IIC_LdStLVecX
// lwa IIC_LdStLWA
// lwarx IIC_LdStLWARX
// lwaux IIC_LdStLHAUX
// lwax IIC_LdStLHA
// lwbrx IIC_LdStLoad
// lwz IIC_LdStLoad
// lwzu IIC_LdStLoadUpd
// lwzux IIC_LdStLoadUpdX
// lwzx IIC_LdStLoad
// mcrf IIC_BrMCR
// mcrfs IIC_FPGeneral
// mcrxr IIC_BrMCRX
// mfcr IIC_SprMFCR
// mffs IIC_IntMFFS
// mfmsr IIC_SprMFMSR
// mfspr IIC_SprMFSPR
// mfsr IIC_SprMFSR
// mfsrin IIC_SprMFSR
// mftb IIC_SprMFTB
// mfvscr IIC_IntMFVSCR
// mtcrf IIC_BrMCRX
// mtfsb0 IIC_IntMTFSB0
// mtfsb1 IIC_IntMTFSB0
// mtfsf IIC_IntMTFSB0
// mtfsfi IIC_IntMTFSB0
// mtmsr IIC_SprMTMSR
// mtmsrd IIC_LdStLD
// mtspr IIC_SprMTSPR
// mtsr IIC_SprMTSR
// mtsrd IIC_IntMTSRD
// mtsrdin IIC_IntMTSRD
// mtsrin IIC_SprMTSRIN
// mtvscr IIC_IntMFVSCR
// mulhd IIC_IntMulHD
// mulhdu IIC_IntMulHD
// mulhw IIC_IntMulHW
// mulhwu IIC_IntMulHWU
// mulld IIC_IntMulHD
// mulli IIC_IntMulLI
// mullw IIC_IntMulHW
// nand IIC_IntSimple
// neg IIC_IntSimple
// nor IIC_IntSimple
// or IIC_IntSimple
// orc IIC_IntSimple
// ori IIC_IntSimple
// oris IIC_IntSimple
// rfi IIC_SprRFI
// rfid IIC_IntRFID
// rldcl IIC_IntRotateD
// rldcr IIC_IntRotateD
// rldic IIC_IntRotateDI
// rldicl IIC_IntRotateDI
// rldicr IIC_IntRotateDI
// rldimi IIC_IntRotateDI
// rlwimi IIC_IntRotate
// rlwinm IIC_IntGeneral
// rlwnm IIC_IntGeneral
// sc IIC_SprSC
// slbia IIC_LdStSLBIA
// slbie IIC_LdStSLBIE
// sld IIC_IntRotateD
// slw IIC_IntGeneral
// srad IIC_IntRotateD
// sradi IIC_IntRotateDI
// sraw IIC_IntShift
// srawi IIC_IntShift
// srd IIC_IntRotateD
// srw IIC_IntGeneral
// stb IIC_LdStStore
// stbu IIC_LdStStoreUpd
// stbux IIC_LdStStoreUpd
// stbx IIC_LdStStore
// std IIC_LdStSTD
// stdcx. IIC_LdStSTDCX
// stdu IIC_LdStSTDU
// stdux IIC_LdStSTDUX
// stdx IIC_LdStSTD
// stfd IIC_LdStSTFD
// stfdu IIC_LdStSTFDU
// stfdux IIC_LdStSTFDU
// stfdx IIC_LdStSTFD
// stfiwx IIC_LdStSTFD
// stfs IIC_LdStSTFD
// stfsu IIC_LdStSTFDU
// stfsux IIC_LdStSTFDU
// stfsx IIC_LdStSTFD
// sth IIC_LdStStore
// sthbrx IIC_LdStStore
// sthu IIC_LdStStoreUpd
// sthux IIC_LdStStoreUpd
// sthx IIC_LdStStore
// stmw IIC_LdStLMW
// stswi IIC_LdStLMW
// stswx IIC_LdStLMW
// stvebx IIC_LdStSTVEBX
// stvehx IIC_LdStSTVEBX
// stvewx IIC_LdStSTVEBX
// stvx IIC_LdStSTVEBX
// stvxl IIC_LdStSTVEBX
// stw IIC_LdStStore
// stwbrx IIC_LdStStore
// stwcx. IIC_LdStSTWCX
// stwu IIC_LdStStoreUpd
// stwux IIC_LdStStoreUpd
// stwx IIC_LdStStore
// subf IIC_IntGeneral
// subfc IIC_IntGeneral
// subfe IIC_IntGeneral
// subfic IIC_IntGeneral
// subfme IIC_IntGeneral
// subfze IIC_IntGeneral
// sync IIC_LdStSync
// td IIC_IntTrapD
// tdi IIC_IntTrapD
// tlbia IIC_LdStSLBIA
// tlbie IIC_LdStDCBF
// tlbsync IIC_SprTLBSYNC
// tw IIC_IntTrapW
// twi IIC_IntTrapW
// vaddcuw IIC_VecGeneral
// vaddfp IIC_VecFP
// vaddsbs IIC_VecGeneral
// vaddshs IIC_VecGeneral
// vaddsws IIC_VecGeneral
// vaddubm IIC_VecGeneral
// vaddubs IIC_VecGeneral
// vadduhm IIC_VecGeneral
// vadduhs IIC_VecGeneral
// vadduwm IIC_VecGeneral
// vadduws IIC_VecGeneral
// vand IIC_VecGeneral
// vandc IIC_VecGeneral
// vavgsb IIC_VecGeneral
// vavgsh IIC_VecGeneral
// vavgsw IIC_VecGeneral
// vavgub IIC_VecGeneral
// vavguh IIC_VecGeneral
// vavguw IIC_VecGeneral
// vcfsx IIC_VecFP
// vcfux IIC_VecFP
// vcmpbfp IIC_VecFPCompare
// vcmpeqfp IIC_VecFPCompare
// vcmpequb IIC_VecGeneral
// vcmpequh IIC_VecGeneral
// vcmpequw IIC_VecGeneral
// vcmpgefp IIC_VecFPCompare
// vcmpgtfp IIC_VecFPCompare
// vcmpgtsb IIC_VecGeneral
// vcmpgtsh IIC_VecGeneral
// vcmpgtsw IIC_VecGeneral
// vcmpgtub IIC_VecGeneral
// vcmpgtuh IIC_VecGeneral
// vcmpgtuw IIC_VecGeneral
// vctsxs IIC_VecFP
// vctuxs IIC_VecFP
// vexptefp IIC_VecFP
// vlogefp IIC_VecFP
// vmaddfp IIC_VecFP
// vmaxfp IIC_VecFPCompare
// vmaxsb IIC_VecGeneral
// vmaxsh IIC_VecGeneral
// vmaxsw IIC_VecGeneral
// vmaxub IIC_VecGeneral
// vmaxuh IIC_VecGeneral
// vmaxuw IIC_VecGeneral
// vmhaddshs IIC_VecComplex
// vmhraddshs IIC_VecComplex
// vminfp IIC_VecFPCompare
// vminsb IIC_VecGeneral
// vminsh IIC_VecGeneral
// vminsw IIC_VecGeneral
// vminub IIC_VecGeneral
// vminuh IIC_VecGeneral
// vminuw IIC_VecGeneral
// vmladduhm IIC_VecComplex
// vmrghb IIC_VecPerm
// vmrghh IIC_VecPerm
// vmrghw IIC_VecPerm
// vmrglb IIC_VecPerm
// vmrglh IIC_VecPerm
// vmrglw IIC_VecPerm
// vmsubfp IIC_VecFP
// vmsummbm IIC_VecComplex
// vmsumshm IIC_VecComplex
// vmsumshs IIC_VecComplex
// vmsumubm IIC_VecComplex
// vmsumuhm IIC_VecComplex
// vmsumuhs IIC_VecComplex
// vmulesb IIC_VecComplex
// vmulesh IIC_VecComplex
// vmuleub IIC_VecComplex
// vmuleuh IIC_VecComplex
// vmulosb IIC_VecComplex
// vmulosh IIC_VecComplex
// vmuloub IIC_VecComplex
// vmulouh IIC_VecComplex
// vnor IIC_VecGeneral
// vor IIC_VecGeneral
// vperm IIC_VecPerm
// vpkpx IIC_VecPerm
// vpkshss IIC_VecPerm
// vpkshus IIC_VecPerm
// vpkswss IIC_VecPerm
// vpkswus IIC_VecPerm
// vpkuhum IIC_VecPerm
// vpkuhus IIC_VecPerm
// vpkuwum IIC_VecPerm
// vpkuwus IIC_VecPerm
// vrefp IIC_VecFPRound
// vrfim IIC_VecFPRound
// vrfin IIC_VecFPRound
// vrfip IIC_VecFPRound
// vrfiz IIC_VecFPRound
// vrlb IIC_VecGeneral
// vrlh IIC_VecGeneral
// vrlw IIC_VecGeneral
// vrsqrtefp IIC_VecFP
// vsel IIC_VecGeneral
// vsl IIC_VecVSL
// vslb IIC_VecGeneral
// vsldoi IIC_VecPerm
// vslh IIC_VecGeneral
// vslo IIC_VecPerm
// vslw IIC_VecGeneral
// vspltb IIC_VecPerm
// vsplth IIC_VecPerm
// vspltisb IIC_VecPerm
// vspltish IIC_VecPerm
// vspltisw IIC_VecPerm
// vspltw IIC_VecPerm
// vsr IIC_VecVSR
// vsrab IIC_VecGeneral
// vsrah IIC_VecGeneral
// vsraw IIC_VecGeneral
// vsrb IIC_VecGeneral
// vsrh IIC_VecGeneral
// vsro IIC_VecPerm
// vsrw IIC_VecGeneral
// vsubcuw IIC_VecGeneral
// vsubfp IIC_VecFP
// vsubsbs IIC_VecGeneral
// vsubshs IIC_VecGeneral
// vsubsws IIC_VecGeneral
// vsububm IIC_VecGeneral
// vsububs IIC_VecGeneral
// vsubuhm IIC_VecGeneral
// vsubuhs IIC_VecGeneral
// vsubuwm IIC_VecGeneral
// vsubuws IIC_VecGeneral
// vsum2sws IIC_VecComplex
// vsum4sbs IIC_VecComplex
// vsum4shs IIC_VecComplex
// vsum4ubs IIC_VecComplex
// vsumsws IIC_VecComplex
// vupkhpx IIC_VecPerm
// vupkhsb IIC_VecPerm
// vupkhsh IIC_VecPerm
// vupklpx IIC_VecPerm
// vupklsb IIC_VecPerm
// vupklsh IIC_VecPerm
// vxor IIC_VecGeneral
// xor IIC_IntSimple
// xori IIC_IntSimple
// xoris IIC_IntSimple
//