diff options
author | Jim Laskey <jlaskey@mac.com> | 2005-10-18 16:23:40 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2005-10-18 16:23:40 +0000 |
commit | 076866c50f6b6c45271285eb268b585b00bed9dc (patch) | |
tree | 7adae52998d06f72f9a8e1364ba65f9d87bc1955 | |
parent | 3d8df55fed4b241715cdf5ebae07c45faf48646e (diff) | |
download | llvm-076866c50f6b6c45271285eb268b585b00bed9dc.tar.gz llvm-076866c50f6b6c45271285eb268b585b00bed9dc.tar.bz2 llvm-076866c50f6b6c45271285eb268b585b00bed9dc.tar.xz |
Checking in first round of scheduling tablegen files. Not tied in as yet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23786 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/PowerPC/PPCSchedule.td | 520 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCScheduleG3.td | 89 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCScheduleG4.td | 88 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCScheduleG4Plus.td | 88 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCScheduleG5.td | 88 | ||||
-rw-r--r-- | lib/Target/TargetSchedule.td | 74 |
6 files changed, 947 insertions, 0 deletions
diff --git a/lib/Target/PowerPC/PPCSchedule.td b/lib/Target/PowerPC/PPCSchedule.td new file mode 100644 index 0000000000..dc12e76f7f --- /dev/null +++ b/lib/Target/PowerPC/PPCSchedule.td @@ -0,0 +1,520 @@ +//===- PPCSchedule.td - PowerPC Scheduling Definitions -----*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "../TargetSchedule.td" + +//===----------------------------------------------------------------------===// +// PowerPC chips sets supported by scheduling (Apple naming) +// +def G3 : Processor; +def G4 : Processor; +def G4Plus : Processor; +def G5 : Processor; + +//===----------------------------------------------------------------------===// +// Functional units across PowerPC chips sets +// +def NoUnit : FuncUnit; // Instruction not supported on chip set +def BPU : FuncUnit; // Branch unit +def SLU : FuncUnit; // Store/load unit +def SRU : FuncUnit; // special register unit +def IU1 : FuncUnit; // integer unit 1 (simple) +def IU2 : FuncUnit; // integer unit 2 (complex) +def IU3 : FuncUnit; // integer unit 3 (7450 simple) +def IU4 : FuncUnit; // integer unit 4 (7450 simple) +def FPU1 : FuncUnit; // floating point unit 1 +def FPU2 : FuncUnit; // floating point unit 2 +def VPU : FuncUnit; // vector permutation unit +def VIU1 : FuncUnit; // vector integer unit 1 (simple) +def VIU2 : FuncUnit; // vector integer unit 2 (complex) +def VFPU : FuncUnit; // vector floating point unit + + +//===----------------------------------------------------------------------===// +// Instruction Itinerary classes used for PowerPC +// +def IntGeneral : InstrItinClass; +def IntCompare : InstrItinClass; +def IntDivD : InstrItinClass; +def IntDivW : InstrItinClass; +def IntMFFS : InstrItinClass; +def IntMFVSCR : InstrItinClass; +def IntMTFSB0 : InstrItinClass; +def IntMTSRD : InstrItinClass; +def IntMulHD : InstrItinClass; +def IntMulHW : InstrItinClass; +def IntMulHWU : InstrItinClass; +def IntMulLI : InstrItinClass; +def IntRFID : InstrItinClass; +def IntRotateD : InstrItinClass; +def IntRotate : InstrItinClass; +def IntShift : InstrItinClass; +def IntTrapD : InstrItinClass; +def IntTrapW : InstrItinClass; +def BrB : InstrItinClass; +def BrCR : InstrItinClass; +def BrMCR : InstrItinClass; +def BrMCRX : InstrItinClass; +def LdStDCBA : InstrItinClass; +def LdStDCBF : InstrItinClass; +def LdStDCBI : InstrItinClass; +def LdStDCBT : InstrItinClass; +def LdStDSS : InstrItinClass; +def LdStICBI : InstrItinClass; +def LdStLBZUX : InstrItinClass; +def LdStLD : InstrItinClass; +def LdStLDARX : InstrItinClass; +def LdStLFD : InstrItinClass; +def LdStLFDU : InstrItinClass; +def LdStLHA : InstrItinClass; +def LdStLMW : InstrItinClass; +def LdStLVEBX : InstrItinClass; +def LdStLWA : InstrItinClass; +def LdStLWARX : InstrItinClass; +def LdStSLBIA : InstrItinClass; +def LdStSLBIE : InstrItinClass; +def LdStSTD : InstrItinClass; +def LdStSTDCX : InstrItinClass; +def LdStSTVEBX : InstrItinClass; +def LdStSTWCX : InstrItinClass; +def LdStSync : InstrItinClass; +def SprISYNC : InstrItinClass; +def SprMFSR : InstrItinClass; +def SprMTMSR : InstrItinClass; +def SprMTSR : InstrItinClass; +def SprTLBSYNC : InstrItinClass; +def SprMFCR : InstrItinClass; +def SprMFMSR : InstrItinClass; +def SprMFSPR : InstrItinClass; +def SprMFTB : InstrItinClass; +def SprMTSPR : InstrItinClass; +def SprMTSRIN : InstrItinClass; +def SprRFI : InstrItinClass; +def SprSC : InstrItinClass; +def FPGeneral : InstrItinClass; +def FPCompare : InstrItinClass; +def FPDivD : InstrItinClass; +def FPDivS : InstrItinClass; +def FPFused : InstrItinClass; +def FPRes : InstrItinClass; +def FPSqrt : InstrItinClass; +def VecGeneral : InstrItinClass; +def VecFP : InstrItinClass; +def VecFPCompare : InstrItinClass; +def VecComplex : InstrItinClass; +def VecPerm : InstrItinClass; +def VecFPRound : InstrItinClass; +def VecVSL : InstrItinClass; +def VecVSR : InstrItinClass; + +//===----------------------------------------------------------------------===// +// Processor instruction itineraries. + +#include "PPCScheduleG3.td" +#include "PPCScheduleG4.td" +#include "PPCScheduleG4Plus.td" +#include "PPCScheduleG5.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 IntGeneral +// addc IntGeneral +// adde IntGeneral +// addi IntGeneral +// addic IntGeneral +// addic. IntGeneral +// addis IntGeneral +// addme IntGeneral +// addze IntGeneral +// and IntGeneral +// andc IntGeneral +// andi. IntGeneral +// andis. IntGeneral +// b BrB +// bc BrB +// bcctr BrB +// bclr BrB +// cmp IntCompare +// cmpi IntCompare +// cmpl IntCompare +// cmpli IntCompare +// cntlzd IntRotateD +// cntlzw IntGeneral +// crand BrCR +// crandc BrCR +// creqv BrCR +// crnand BrCR +// crnor BrCR +// cror BrCR +// crorc BrCR +// crxor BrCR +// dcba LdStDCBA +// dcbf LdStDCBF +// dcbi LdStDCBI +// dcbst LdStDCBF +// dcbt LdStDCBT +// dcbtst LdStDCBT +// dcbz LdStDCBF +// divd IntDivD +// divdu IntDivD +// divw IntDivW +// divwu IntDivW +// dss LdStDSS +// dst LdStDSS +// dstst LdStDSS +// eciwx LdStDCBT +// ecowx LdStDCBT +// eieio LdStDCBT +// eqv IntGeneral +// extsb IntGeneral +// extsh IntGeneral +// extsw IntRotateD +// fabs FPGeneral +// fadd FPGeneral +// fadds FPGeneral +// fcfid FPGeneral +// fcmpo FPCompare +// fcmpu FPCompare +// fctid FPGeneral +// fctidz FPGeneral +// fctiw FPGeneral +// fctiwz FPGeneral +// fdiv FPDivD +// fdivs FPDivS +// fmadd FPFused +// fmadds FPGeneral +// fmr FPGeneral +// fmsub FPFused +// fmsubs FPGeneral +// fmul FPFused +// fmuls FPGeneral +// fnabs FPGeneral +// fneg FPGeneral +// fnmadd FPFused +// fnmadds FPGeneral +// fnmsub FPFused +// fnmsubs FPGeneral +// fres FPRes +// frsp FPGeneral +// frsqrte FPGeneral +// fsel FPGeneral +// fsqrt FPSqrt +// fsqrts FPSqrt +// fsub FPGeneral +// fsubs FPGeneral +// icbi LdStICBI +// isync SprISYNC +// lbz LdStDCBT +// lbzu LdStDCBT +// lbzux LdStLBZUX +// lbzx LdStDCBT +// ld LdStLD +// ldarx LdStLDARX +// ldu LdStLD +// ldux LdStLD +// ldx LdStLD +// lfd LdStLFD +// lfdu LdStLFDU +// lfdux LdStLFDU +// lfdx LdStLFDU +// lfs LdStLFDU +// lfsu LdStLFDU +// lfsux LdStLFDU +// lfsx LdStLFDU +// lha LdStLHA +// lhau LdStLHA +// lhaux LdStLHA +// lhax LdStLHA +// lhbrx LdStDCBT +// lhz LdStDCBT +// lhzu LdStDCBT +// lhzux LdStLBZUX +// lhzx LdStDCBT +// lmw LdStLMW +// lswi LdStLMW +// lswx LdStLMW +// lvebx LdStLVEBX +// lvehx LdStLVEBX +// lvewx LdStLVEBX +// lvsl LdStLVEBX +// lvsr LdStLVEBX +// lvx LdStLVEBX +// lvxl LdStLVEBX +// lwa LdStLWA +// lwarx LdStLWARX +// lwaux LdStLHA +// lwax LdStLHA +// lwbrx LdStDCBT +// lwz LdStDCBT +// lwzu LdStDCBT +// lwzux LdStLBZUX +// lwzx LdStDCBT +// mcrf BrMCR +// mcrfs FPGeneral +// mcrxr BrMCRX +// mfcr SprMFCR +// mffs IntMFFS +// mfmsr SprMFMSR +// mfspr SprMFSPR +// mfsr SprMFSR +// mfsrin SprMFSR +// mftb SprMFTB +// mfvscr IntMFVSCR +// mtcrf BrMCRX +// mtfsb0 IntMTFSB0 +// mtfsb1 IntMTFSB0 +// mtfsf IntMTFSB0 +// mtfsfi IntMTFSB0 +// mtmsr SprMTMSR +// mtmsrd LdStLD +// mtspr SprMTSPR +// mtsr SprMTSR +// mtsrd IntMTSRD +// mtsrdin IntMTSRD +// mtsrin SprMTSRIN +// mtvscr IntMFVSCR +// mulhd IntMulHD +// mulhdu IntMulHD +// mulhw IntMulHW +// mulhwu IntMulHWU +// mulld IntMulHD +// mulli IntMulLI +// mullw IntMulHW +// nand IntGeneral +// neg IntGeneral +// nor IntGeneral +// or IntGeneral +// orc IntGeneral +// ori IntGeneral +// oris IntGeneral +// rfi SprRFI +// rfid IntRFID +// rldcl IntRotateD +// rldcr IntRotateD +// rldic IntRotateD +// rldicl IntRotateD +// rldicr IntRotateD +// rldimi IntRotateD +// rlwimi IntRotate +// rlwinm IntGeneral +// rlwnm IntGeneral +// sc SprSC +// slbia LdStSLBIA +// slbie LdStSLBIE +// sld IntRotateD +// slw IntGeneral +// srad IntRotateD +// sradi IntRotateD +// sraw IntShift +// srawi IntShift +// srd IntRotateD +// srw IntGeneral +// stb LdStDCBT +// stbu LdStDCBT +// stbux LdStDCBT +// stbx LdStDCBT +// std LdStSTD +// stdcx. LdStSTDCX +// stdu LdStSTD +// stdux LdStSTD +// stdx LdStSTD +// stfd LdStLBZUX +// stfdu LdStLBZUX +// stfdux LdStLBZUX +// stfdx LdStLBZUX +// stfiwx LdStLBZUX +// stfs LdStLBZUX +// stfsu LdStLBZUX +// stfsux LdStLBZUX +// stfsx LdStLBZUX +// sth LdStDCBT +// sthbrx LdStDCBT +// sthu LdStDCBT +// sthux LdStDCBT +// sthx LdStDCBT +// stmw LdStLMW +// stswi LdStLMW +// stswx LdStLMW +// stvebx LdStSTVEBX +// stvehx LdStSTVEBX +// stvewx LdStSTVEBX +// stvx LdStSTVEBX +// stvxl LdStSTVEBX +// stw LdStDCBT +// stwbrx LdStDCBT +// stwcx. LdStSTWCX +// stwu LdStDCBT +// stwux LdStDCBT +// stwx LdStDCBT +// subf IntGeneral +// subfc IntGeneral +// subfe IntGeneral +// subfic IntGeneral +// subfme IntGeneral +// subfze IntGeneral +// sync LdStSync +// td IntTrapD +// tdi IntTrapD +// tlbia LdStSLBIA +// tlbie LdStDCBF +// tlbsync SprTLBSYNC +// tw IntTrapW +// twi IntTrapW +// vaddcuw VecGeneral +// vaddfp VecFP +// vaddsbs VecGeneral +// vaddshs VecGeneral +// vaddsws VecGeneral +// vaddubm VecGeneral +// vaddubs VecGeneral +// vadduhm VecGeneral +// vadduhs VecGeneral +// vadduwm VecGeneral +// vadduws VecGeneral +// vand VecGeneral +// vandc VecGeneral +// vavgsb VecGeneral +// vavgsh VecGeneral +// vavgsw VecGeneral +// vavgub VecGeneral +// vavguh VecGeneral +// vavguw VecGeneral +// vcfsx VecFP +// vcfux VecFP +// vcmpbfp VecFPCompare +// vcmpeqfp VecFPCompare +// vcmpequb VecGeneral +// vcmpequh VecGeneral +// vcmpequw VecGeneral +// vcmpgefp VecFPCompare +// vcmpgtfp VecFPCompare +// vcmpgtsb VecGeneral +// vcmpgtsh VecGeneral +// vcmpgtsw VecGeneral +// vcmpgtub VecGeneral +// vcmpgtuh VecGeneral +// vcmpgtuw VecGeneral +// vctsxs VecFP +// vctuxs VecFP +// vexptefp VecFP +// vlogefp VecFP +// vmaddfp VecFP +// vmaxfp VecFPCompare +// vmaxsb VecGeneral +// vmaxsh VecGeneral +// vmaxsw VecGeneral +// vmaxub VecGeneral +// vmaxuh VecGeneral +// vmaxuw VecGeneral +// vmhaddshs VecComplex +// vmhraddshs VecComplex +// vminfp VecFPCompare +// vminsb VecGeneral +// vminsh VecGeneral +// vminsw VecGeneral +// vminub VecGeneral +// vminuh VecGeneral +// vminuw VecGeneral +// vmladduhm VecComplex +// vmrghb VecPerm +// vmrghh VecPerm +// vmrghw VecPerm +// vmrglb VecPerm +// vmrglh VecPerm +// vmrglw VecPerm +// vmsubfp VecFP +// vmsummbm VecComplex +// vmsumshm VecComplex +// vmsumshs VecComplex +// vmsumubm VecComplex +// vmsumuhm VecComplex +// vmsumuhs VecComplex +// vmulesb VecComplex +// vmulesh VecComplex +// vmuleub VecComplex +// vmuleuh VecComplex +// vmulosb VecComplex +// vmulosh VecComplex +// vmuloub VecComplex +// vmulouh VecComplex +// vnor VecGeneral +// vor VecGeneral +// vperm VecPerm +// vpkpx VecPerm +// vpkshss VecPerm +// vpkshus VecPerm +// vpkswss VecPerm +// vpkswus VecPerm +// vpkuhum VecPerm +// vpkuhus VecPerm +// vpkuwum VecPerm +// vpkuwus VecPerm +// vrefp VecFPRound +// vrfim VecFPRound +// vrfin VecFPRound +// vrfip VecFPRound +// vrfiz VecFPRound +// vrlb VecGeneral +// vrlh VecGeneral +// vrlw VecGeneral +// vrsqrtefp VecFP +// vsel VecGeneral +// vsl VecVSL +// vslb VecGeneral +// vsldoi VecPerm +// vslh VecGeneral +// vslo VecPerm +// vslw VecGeneral +// vspltb VecPerm +// vsplth VecPerm +// vspltisb VecPerm +// vspltish VecPerm +// vspltisw VecPerm +// vspltw VecPerm +// vsr VecVSR +// vsrab VecGeneral +// vsrah VecGeneral +// vsraw VecGeneral +// vsrb VecGeneral +// vsrh VecGeneral +// vsro VecPerm +// vsrw VecGeneral +// vsubcuw VecGeneral +// vsubfp VecFP +// vsubsbs VecGeneral +// vsubshs VecGeneral +// vsubsws VecGeneral +// vsububm VecGeneral +// vsububs VecGeneral +// vsubuhm VecGeneral +// vsubuhs VecGeneral +// vsubuwm VecGeneral +// vsubuws VecGeneral +// vsum2sws VecComplex +// vsum4sbs VecComplex +// vsum4shs VecComplex +// vsum4ubs VecComplex +// vsumsws VecComplex +// vupkhpx VecPerm +// vupkhsb VecPerm +// vupkhsh VecPerm +// vupklpx VecPerm +// vupklsb VecPerm +// vupklsh VecPerm +// vxor VecGeneral +// xor IntGeneral +// xori IntGeneral +// xoris IntGeneral +// + diff --git a/lib/Target/PowerPC/PPCScheduleG3.td b/lib/Target/PowerPC/PPCScheduleG3.td new file mode 100644 index 0000000000..431c794859 --- /dev/null +++ b/lib/Target/PowerPC/PPCScheduleG3.td @@ -0,0 +1,89 @@ +//===- PPCScheduleG3.td - PPC G3 Scheduling Definitions ----*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the itinerary class data for the G3 (750) processor. +// +//===----------------------------------------------------------------------===// + + +def G3Itineraries : ProcessorItineraries<G3, [ + InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntDivD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntDivW , [InstrStage<19, [IU1]>]>, + InstrItinData<IntMFFS , [InstrStage<1, [FPU1]>]>, + InstrItinData<IntMFVSCR , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMTFSB0 , [InstrStage<3, [FPU1]>]>, + InstrItinData<IntMTSRD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHW , [InstrStage<5, [IU1]>]>, + InstrItinData<IntMulHWU , [InstrStage<6, [IU1]>]>, + InstrItinData<IntMulLI , [InstrStage<3, [IU1]>]>, + InstrItinData<IntRFID , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotateD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotate , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntShift , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntTrapD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntTrapW , [InstrStage<2, [IU1, IU2]>]>, + InstrItinData<BrB , [InstrStage<1, [BPU]>]>, + InstrItinData<BrCR , [InstrStage<1, [SRU]>]>, + InstrItinData<BrMCR , [InstrStage<1, [SRU]>]>, + InstrItinData<BrMCRX , [InstrStage<1, [SRU]>]>, + InstrItinData<LdStDCBA , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStDCBF , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDCBI , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDCBT , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStDSS , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStICBI , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLBZUX , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLDARX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLFD , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLFDU , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLHA , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLMW , [InstrStage<34, [SLU]>]>, + InstrItinData<LdStLVEBX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLWA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLWARX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSLBIA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSLBIE , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTDCX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTVEBX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTWCX , [InstrStage<8, [SLU]>]>, + InstrItinData<LdStSync , [InstrStage<3, [SLU]>]>, + InstrItinData<SprISYNC , [InstrStage<2, [SRU]>]>, + InstrItinData<SprMFSR , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMTMSR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMTSR , [InstrStage<2, [SRU]>]>, + InstrItinData<SprTLBSYNC , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMFCR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMFMSR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMFSPR , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMFTB , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMTSPR , [InstrStage<2, [SRU]>]>, + InstrItinData<SprMTSRIN , [InstrStage<2, [SRU]>]>, + InstrItinData<SprRFI , [InstrStage<2, [SRU]>]>, + InstrItinData<SprSC , [InstrStage<2, [SRU]>]>, + InstrItinData<FPGeneral , [InstrStage<1, [FPU1]>]>, + InstrItinData<FPCompare , [InstrStage<1, [FPU1]>]>, + InstrItinData<FPDivD , [InstrStage<31, [FPU1]>]>, + InstrItinData<FPDivS , [InstrStage<17, [FPU1]>]>, + InstrItinData<FPFused , [InstrStage<2, [FPU1]>]>, + InstrItinData<FPRes , [InstrStage<10, [FPU1]>]>, + InstrItinData<FPSqrt , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecGeneral , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecFP , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecFPCompare, [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecComplex , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecPerm , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecFPRound , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecVSL , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecVSR , [InstrStage<0, [NoUnit]>]> +]>; diff --git a/lib/Target/PowerPC/PPCScheduleG4.td b/lib/Target/PowerPC/PPCScheduleG4.td new file mode 100644 index 0000000000..28fb004f62 --- /dev/null +++ b/lib/Target/PowerPC/PPCScheduleG4.td @@ -0,0 +1,88 @@ +//===- PPCScheduleG4.td - PPC G4 Scheduling Definitions ----*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the itinerary class data for the G4 (7400) processor. +// +//===----------------------------------------------------------------------===// + +def G4Itineraries : ProcessorItineraries<G4, [ + InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntDivD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntDivW , [InstrStage<19, [IU1]>]>, + InstrItinData<IntMFFS , [InstrStage<3, [FPU1]>]>, + InstrItinData<IntMFVSCR , [InstrStage<1, [VIU1]>]>, + InstrItinData<IntMTFSB0 , [InstrStage<3, [FPU1]>]>, + InstrItinData<IntMTSRD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHW , [InstrStage<5, [IU1]>]>, + InstrItinData<IntMulHWU , [InstrStage<6, [IU1]>]>, + InstrItinData<IntMulLI , [InstrStage<3, [IU1]>]>, + InstrItinData<IntRFID , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotateD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotate , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntShift , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntTrapD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntTrapW , [InstrStage<2, [IU1, IU2]>]>, + InstrItinData<BrB , [InstrStage<1, [BPU]>]>, + InstrItinData<BrCR , [InstrStage<1, [SRU]>]>, + InstrItinData<BrMCR , [InstrStage<1, [SRU]>]>, + InstrItinData<BrMCRX , [InstrStage<1, [SRU]>]>, + InstrItinData<LdStDCBA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStDCBF , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStDCBI , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStDCBT , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStDSS , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStICBI , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLBZUX , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLDARX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLFD , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLFDU , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLHA , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLMW , [InstrStage<34, [SLU]>]>, + InstrItinData<LdStLVEBX , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStLWA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLWARX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSLBIA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSLBIE , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTDCX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTVEBX , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStSTWCX , [InstrStage<5, [SLU]>]>, + InstrItinData<LdStSync , [InstrStage<8, [SLU]>]>, + InstrItinData<SprISYNC , [InstrStage<2, [SRU]>]>, + InstrItinData<SprMFSR , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMTMSR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMTSR , [InstrStage<2, [SRU]>]>, + InstrItinData<SprTLBSYNC , [InstrStage<8, [SRU]>]>, + InstrItinData<SprMFCR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMFMSR , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMFSPR , [InstrStage<3, [SRU]>]>, + InstrItinData<SprMFTB , [InstrStage<1, [SRU]>]>, + InstrItinData<SprMTSPR , [InstrStage<2, [SRU]>]>, + InstrItinData<SprMTSRIN , [InstrStage<2, [SRU]>]>, + InstrItinData<SprRFI , [InstrStage<2, [SRU]>]>, + InstrItinData<SprSC , [InstrStage<2, [SRU]>]>, + InstrItinData<FPGeneral , [InstrStage<1, [FPU1]>]>, + InstrItinData<FPCompare , [InstrStage<1, [FPU1]>]>, + InstrItinData<FPDivD , [InstrStage<31, [FPU1]>]>, + InstrItinData<FPDivS , [InstrStage<17, [FPU1]>]>, + InstrItinData<FPFused , [InstrStage<1, [FPU1]>]>, + InstrItinData<FPRes , [InstrStage<10, [FPU1]>]>, + InstrItinData<FPSqrt , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecGeneral , [InstrStage<1, [VIU1]>]>, + InstrItinData<VecFP , [InstrStage<4, [VFPU]>]>, + InstrItinData<VecFPCompare, [InstrStage<1, [VIU1]>]>, + InstrItinData<VecComplex , [InstrStage<3, [VIU2]>]>, + InstrItinData<VecPerm , [InstrStage<1, [VPU]>]>, + InstrItinData<VecFPRound , [InstrStage<4, [VFPU]>]>, + InstrItinData<VecVSL , [InstrStage<1, [VIU1]>]>, + InstrItinData<VecVSR , [InstrStage<1, [VIU1]>]> +]>; diff --git a/lib/Target/PowerPC/PPCScheduleG4Plus.td b/lib/Target/PowerPC/PPCScheduleG4Plus.td new file mode 100644 index 0000000000..b1ec17e780 --- /dev/null +++ b/lib/Target/PowerPC/PPCScheduleG4Plus.td @@ -0,0 +1,88 @@ +//===- PPCScheduleG4Plus.td - PPC G4+ Scheduling Defs. -----*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the itinerary class data for the G4+ (7450) processor. +// +//===----------------------------------------------------------------------===// + +def G4PlusItineraries : ProcessorItineraries<G4Plus, [ + InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<IntDivD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntDivW , [InstrStage<23, [IU2]>]>, + InstrItinData<IntMFFS , [InstrStage<5, [FPU1]>]>, + InstrItinData<IntMFVSCR , [InstrStage<2, [VFPU]>]>, + InstrItinData<IntMTFSB0 , [InstrStage<5, [FPU1]>]>, + InstrItinData<IntMTSRD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHW , [InstrStage<4, [IU2]>]>, + InstrItinData<IntMulHWU , [InstrStage<4, [IU2]>]>, + InstrItinData<IntMulLI , [InstrStage<3, [IU2]>]>, + InstrItinData<IntRFID , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotateD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntRotate , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<IntShift , [InstrStage<2, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<IntTrapD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntTrapW , [InstrStage<2, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<BrB , [InstrStage<1, [BPU]>]>, + InstrItinData<BrCR , [InstrStage<2, [IU2]>]>, + InstrItinData<BrMCR , [InstrStage<2, [IU2]>]>, + InstrItinData<BrMCRX , [InstrStage<2, [IU2]>]>, + InstrItinData<LdStDCBA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStDCBF , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDCBI , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDCBT , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDSS , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStICBI , [InstrStage<3, [IU2]>]>, + InstrItinData<LdStLBZUX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLDARX , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStLFD , [InstrStage<4, [SLU]>]>, + InstrItinData<LdStLFDU , [InstrStage<4, [SLU]>]>, + InstrItinData<LdStLHA , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLMW , [InstrStage<37, [SLU]>]>, + InstrItinData<LdStLVEBX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLWA , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLWARX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSLBIA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSLBIE , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStSTD , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSTDCX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSTVEBX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSTWCX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSync , [InstrStage<35, [SLU]>]>, + InstrItinData<SprISYNC , [InstrStage<0, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<SprMFSR , [InstrStage<4, [IU2]>]>, + InstrItinData<SprMTMSR , [InstrStage<2, [IU2]>]>, + InstrItinData<SprMTSR , [InstrStage<2, [IU2]>]>, + InstrItinData<SprTLBSYNC , [InstrStage<3, [SLU]>]>, + InstrItinData<SprMFCR , [InstrStage<2, [IU2]>]>, + InstrItinData<SprMFMSR , [InstrStage<3, [IU2]>]>, + InstrItinData<SprMFSPR , [InstrStage<4, [IU2]>]>, + InstrItinData<SprMFTB , [InstrStage<5, [IU2]>]>, + InstrItinData<SprMTSPR , [InstrStage<2, [IU2]>]>, + InstrItinData<SprMTSRIN , [InstrStage<2, [IU2]>]>, + InstrItinData<SprRFI , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<SprSC , [InstrStage<0, [IU1, IU2, IU3, IU4]>]>, + InstrItinData<FPGeneral , [InstrStage<5, [FPU1]>]>, + InstrItinData<FPCompare , [InstrStage<5, [FPU1]>]>, + InstrItinData<FPDivD , [InstrStage<35, [FPU1]>]>, + InstrItinData<FPDivS , [InstrStage<21, [FPU1]>]>, + InstrItinData<FPFused , [InstrStage<5, [FPU1]>]>, + InstrItinData<FPRes , [InstrStage<14, [FPU1]>]>, + InstrItinData<FPSqrt , [InstrStage<0, [NoUnit]>]>, + InstrItinData<VecGeneral , [InstrStage<1, [VIU1]>]>, + InstrItinData<VecFP , [InstrStage<4, [VFPU]>]>, + InstrItinData<VecFPCompare, [InstrStage<2, [VFPU]>]>, + InstrItinData<VecComplex , [InstrStage<4, [VIU2]>]>, + InstrItinData<VecPerm , [InstrStage<2, [VPU]>]>, + InstrItinData<VecFPRound , [InstrStage<4, [VIU1]>]>, + InstrItinData<VecVSL , [InstrStage<2, [VPU]>]>, + InstrItinData<VecVSR , [InstrStage<2, [VPU]>]> +]>; diff --git a/lib/Target/PowerPC/PPCScheduleG5.td b/lib/Target/PowerPC/PPCScheduleG5.td new file mode 100644 index 0000000000..33fe71d62a --- /dev/null +++ b/lib/Target/PowerPC/PPCScheduleG5.td @@ -0,0 +1,88 @@ +//===- PPCScheduleG5.td - PPC G5 Scheduling Definitions ----*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the itinerary class data for the G5 (970) processor. +// +//===----------------------------------------------------------------------===// + +def G5Itineraries : ProcessorItineraries<G5, [ + InstrItinData<IntGeneral , [InstrStage<2, [IU1, IU2]>]>, + InstrItinData<IntCompare , [InstrStage<3, [IU1, IU2]>]>, + InstrItinData<IntDivD , [InstrStage<68, [IU1]>]>, + InstrItinData<IntDivW , [InstrStage<36, [IU1]>]>, + InstrItinData<IntMFFS , [InstrStage<6, [IU2]>]>, + InstrItinData<IntMFVSCR , [InstrStage<1, [VFPU]>]>, + InstrItinData<IntMTFSB0 , [InstrStage<6, [FPU1, FPU2]>]>, + InstrItinData<IntMTSRD , [InstrStage<0, [NoUnit]>]>, + InstrItinData<IntMulHD , [InstrStage<7, [IU1, IU2]>]>, + InstrItinData<IntMulHW , [InstrStage<5, [IU1, IU2]>]>, + InstrItinData<IntMulHWU , [InstrStage<5, [IU1, IU2]>]>, + InstrItinData<IntMulLI , [InstrStage<4, [IU1, IU2]>]>, + InstrItinData<IntRFID , [InstrStage<1, [IU2]>]>, + InstrItinData<IntRotateD , [InstrStage<2, [IU1, IU2]>]>, + InstrItinData<IntRotate , [InstrStage<4, [IU1, IU2]>]>, + InstrItinData<IntShift , [InstrStage<2, [IU1, IU2]>]>, + InstrItinData<IntTrapD , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<IntTrapW , [InstrStage<1, [IU1, IU2]>]>, + InstrItinData<BrB , [InstrStage<1, [BPU]>]>, + InstrItinData<BrCR , [InstrStage<4, [BPU]>]>, + InstrItinData<BrMCR , [InstrStage<2, [BPU]>]>, + InstrItinData<BrMCRX , [InstrStage<3, [BPU]>]>, + InstrItinData<LdStDCBA , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStDCBF , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDCBI , [InstrStage<0, [NoUnit]>]>, + InstrItinData<LdStDCBT , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStDSS , [InstrStage<10, [SLU]>]>, + InstrItinData<LdStICBI , [InstrStage<0, [SLU]>]>, + InstrItinData<LdStLBZUX , [InstrStage<4, [SLU]>]>, + InstrItinData<LdStLD , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLDARX , [InstrStage<11, [SLU]>]>, + InstrItinData<LdStLFD , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLFDU , [InstrStage<5, [SLU]>]>, + InstrItinData<LdStLHA , [InstrStage<5, [SLU]>]>, + InstrItinData<LdStLMW , [InstrStage<64, [SLU]>]>, + InstrItinData<LdStLVEBX , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStLWA , [InstrStage<5, [SLU]>]>, + InstrItinData<LdStLWARX , [InstrStage<11, [SLU]>]>, + InstrItinData<LdStSLBIA , [InstrStage<0, [SLU]>]>, + InstrItinData<LdStSLBIE , [InstrStage<2, [SLU]>]>, + InstrItinData<LdStSTD , [InstrStage<3, [SLU]>]>, + InstrItinData<LdStSTDCX , [InstrStage<11, [SLU]>]>, + InstrItinData<LdStSTVEBX , [InstrStage<5, [SLU]>]>, + InstrItinData<LdStSTWCX , [InstrStage<11, [SLU]>]>, + InstrItinData<LdStSync , [InstrStage<35, [SLU]>]>, + InstrItinData<SprISYNC , [InstrStage<0, [SLU]>]>, + InstrItinData<SprMFSR , [InstrStage<3, [SLU]>]>, + InstrItinData<SprMTMSR , [InstrStage<3, [SLU]>]>, + InstrItinData<SprMTSR , [InstrStage<3, [SLU]>]>, + InstrItinData<SprTLBSYNC , [InstrStage<3, [SLU]>]>, + InstrItinData<SprMFCR , [InstrStage<2, [IU2]>]>, + InstrItinData<SprMFMSR , [InstrStage<3, [IU2]>]>, + InstrItinData<SprMFSPR , [InstrStage<3, [IU2]>]>, + InstrItinData<SprMFTB , [InstrStage<10, [IU2]>]>, + InstrItinData<SprMTSPR , [InstrStage<8, [IU2]>]>, + InstrItinData<SprMTSRIN , [InstrStage<0, [NoUnit]>]>, + InstrItinData<SprRFI , [InstrStage<0, [NoUnit]>]>, + InstrItinData<SprSC , [InstrStage<1, [IU2]>]>, + InstrItinData<FPGeneral , [InstrStage<6, [FPU1, FPU2]>]>, + InstrItinData<FPCompare , [InstrStage<8, [FPU1, FPU2]>]>, + InstrItinData<FPDivD , [InstrStage<33, [FPU1, FPU2]>]>, + InstrItinData<FPDivS , [InstrStage<33, [FPU1, FPU2]>]>, + InstrItinData<FPFused , [InstrStage<6, [FPU1, FPU2]>]>, + InstrItinData<FPRes , [InstrStage<6, [FPU1, FPU2]>]>, + InstrItinData<FPSqrt , [InstrStage<40, [FPU1, FPU2]>]>, + InstrItinData<VecGeneral , [InstrStage<2, [VIU1]>]>, + InstrItinData<VecFP , [InstrStage<8, [VFPU]>]>, + InstrItinData<VecFPCompare, [InstrStage<2, [VFPU]>]>, + InstrItinData<VecComplex , [InstrStage<5, [VIU2]>]>, + InstrItinData<VecPerm , [InstrStage<3, [VPU]>]>, + InstrItinData<VecFPRound , [InstrStage<8, [VFPU]>]>, + InstrItinData<VecVSL , [InstrStage<2, [VIU1]>]>, + InstrItinData<VecVSR , [InstrStage<3, [VPU]>]> +]>; diff --git a/lib/Target/TargetSchedule.td b/lib/Target/TargetSchedule.td new file mode 100644 index 0000000000..9b4ad022d8 --- /dev/null +++ b/lib/Target/TargetSchedule.td @@ -0,0 +1,74 @@ +//===- TargetSchedule.td - Target Independent Scheduling ---*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by James M. Laskey and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the target-independent scheduling interfaces which should +// be implemented by each target which is using TableGen based scheduling. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// Processor chip sets - These values represent each of the chip sets supported +// by the scheduler. Each Processor definition requires corresponding +// instruction itineraries. +// +class Processor; + +//===----------------------------------------------------------------------===// +// Processor functional unit - These values represent the function units +// available across all chip sets for the target. Eg., IntUnit, FPUnit, ... +// These may be independent values for each chip set or may be shared across +// all chip sets of the target. Each functional unit is treated as a resource +// during scheduling and has an affect instruction order based on availability +// during a time interval. +// +class FuncUnit; + +//===----------------------------------------------------------------------===// +// Instruction stage - These values represent a step in the execution of an +// instruction. The latency represents the number of discrete time slots used +// need to complete the stage. Units represent the choice of functional units +// that can be used to complete the stage. Eg. IntUnit1, IntUnit2. +// +class InstrStage<int latency, list<FuncUnit> units> { + int Latency = latency; // length of stage in machine cycles + list<FuncUnit> Units = units; // choice of functional units +} + +//===----------------------------------------------------------------------===// +// Instruction itinerary - An itinerary represents a sequential series of steps +// required to complete an instruction. Itineraries are represented as lists of +// instruction stages. +// + +//===----------------------------------------------------------------------===// +// Instruction itinerary classes - These values represent 'named' instruction +// itinerary. Using named itineraries simplifies managing groups of +// instructions across chip sets. An instruction uses the same itinerary class +// across all chip sets. Thus a new chip set can be added without modifying +// instruction information. +// +class InstrItinClass; + +//===----------------------------------------------------------------------===// +// Instruction itinerary data - These values provide a runtime map of an +// instruction itinerary class (name) to it's itinerary data. +// +class InstrItinData<InstrItinClass Class, list<InstrStage> stages> { + InstrItinClass TheClass = Class; + list<InstrStage> Stages = stages; +} + +//===----------------------------------------------------------------------===// +// Processor itineraries - These values represent the set of all itinerary +// classes for a given chip set. +// +class ProcessorItineraries<Processor proc, list<InstrItinData> iid> { + Processor Proc = proc; + list<InstrItinData> IID = iid; +} |