PPCSchedule.td revision 263508
1//===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10//===----------------------------------------------------------------------===//
11// Functional units across PowerPC chips sets
12//
13def BPU    : FuncUnit; // Branch unit
14def SLU    : FuncUnit; // Store/load unit
15def SRU    : FuncUnit; // special register unit
16def IU1    : FuncUnit; // integer unit 1 (simple)
17def IU2    : FuncUnit; // integer unit 2 (complex)
18def FPU1   : FuncUnit; // floating point unit 1
19def FPU2   : FuncUnit; // floating point unit 2
20def VPU    : FuncUnit; // vector permutation unit
21def VIU1   : FuncUnit; // vector integer unit 1 (simple)
22def VIU2   : FuncUnit; // vector integer unit 2 (complex)
23def VFPU   : FuncUnit; // vector floating point unit
24
25//===----------------------------------------------------------------------===//
26// Instruction Itinerary classes used for PowerPC
27//
28def IntSimple    : InstrItinClass;
29def IntGeneral   : InstrItinClass;
30def IntCompare   : InstrItinClass;
31def IntDivD      : InstrItinClass;
32def IntDivW      : InstrItinClass;
33def IntMFFS      : InstrItinClass;
34def IntMFVSCR    : InstrItinClass;
35def IntMTFSB0    : InstrItinClass;
36def IntMTSRD     : InstrItinClass;
37def IntMulHD     : InstrItinClass;
38def IntMulHW     : InstrItinClass;
39def IntMulHWU    : InstrItinClass;
40def IntMulLI     : InstrItinClass;
41def IntRFID      : InstrItinClass;
42def IntRotateD   : InstrItinClass;
43def IntRotateDI  : InstrItinClass;
44def IntRotate    : InstrItinClass;
45def IntShift     : InstrItinClass;
46def IntTrapD     : InstrItinClass;
47def IntTrapW     : InstrItinClass;
48def BrB          : InstrItinClass;
49def BrCR         : InstrItinClass;
50def BrMCR        : InstrItinClass;
51def BrMCRX       : InstrItinClass;
52def LdStDCBA     : InstrItinClass;
53def LdStDCBF     : InstrItinClass;
54def LdStDCBI     : InstrItinClass;
55def LdStLoad     : InstrItinClass;
56def LdStLoadUpd  : InstrItinClass;
57def LdStStore    : InstrItinClass;
58def LdStStoreUpd : InstrItinClass;
59def LdStDSS      : InstrItinClass;
60def LdStICBI     : InstrItinClass;
61def LdStLD       : InstrItinClass;
62def LdStLDU      : InstrItinClass;
63def LdStLDARX    : InstrItinClass;
64def LdStLFD      : InstrItinClass;
65def LdStLFDU     : InstrItinClass;
66def LdStLHA      : InstrItinClass;
67def LdStLHAU     : InstrItinClass;
68def LdStLMW      : InstrItinClass;
69def LdStLVecX    : InstrItinClass;
70def LdStLWA      : InstrItinClass;
71def LdStLWARX    : InstrItinClass;
72def LdStSLBIA    : InstrItinClass;
73def LdStSLBIE    : InstrItinClass;
74def LdStSTD      : InstrItinClass;
75def LdStSTDCX    : InstrItinClass;
76def LdStSTDU     : InstrItinClass;
77def LdStSTFD     : InstrItinClass;
78def LdStSTFDU    : InstrItinClass;
79def LdStSTVEBX   : InstrItinClass;
80def LdStSTWCX    : InstrItinClass;
81def LdStSync     : InstrItinClass;
82def SprISYNC     : InstrItinClass;
83def SprMFSR      : InstrItinClass;
84def SprMTMSR     : InstrItinClass;
85def SprMTSR      : InstrItinClass;
86def SprTLBSYNC   : InstrItinClass;
87def SprMFCR      : InstrItinClass;
88def SprMFMSR     : InstrItinClass;
89def SprMFSPR     : InstrItinClass;
90def SprMFTB      : InstrItinClass;
91def SprMTSPR     : InstrItinClass;
92def SprMTSRIN    : InstrItinClass;
93def SprRFI       : InstrItinClass;
94def SprSC        : InstrItinClass;
95def FPGeneral    : InstrItinClass;
96def FPAddSub     : InstrItinClass;
97def FPCompare    : InstrItinClass;
98def FPDivD       : InstrItinClass;
99def FPDivS       : InstrItinClass;
100def FPFused      : InstrItinClass;
101def FPRes        : InstrItinClass;
102def FPSqrt       : InstrItinClass;
103def VecGeneral   : InstrItinClass;
104def VecFP        : InstrItinClass;
105def VecFPCompare : InstrItinClass;
106def VecComplex   : InstrItinClass;
107def VecPerm      : InstrItinClass;
108def VecFPRound   : InstrItinClass;
109def VecVSL       : InstrItinClass;
110def VecVSR       : InstrItinClass;
111def SprMTMSRD    : InstrItinClass;
112def SprSLIE      : InstrItinClass;
113def SprSLBIE     : InstrItinClass;
114def SprSLBMTE    : InstrItinClass;
115def SprSLBMFEE   : InstrItinClass;
116def SprSLBIA     : InstrItinClass;
117def SprTLBIEL    : InstrItinClass;
118def SprTLBIE     : InstrItinClass;
119
120//===----------------------------------------------------------------------===//
121// Processor instruction itineraries.
122
123include "PPCScheduleG3.td"
124include "PPCSchedule440.td"
125include "PPCScheduleG4.td"
126include "PPCScheduleG4Plus.td"
127include "PPCScheduleG5.td"
128include "PPCScheduleA2.td"
129include "PPCScheduleE500mc.td"
130include "PPCScheduleE5500.td"
131
132//===----------------------------------------------------------------------===//
133// Instruction to itinerary class map - When add new opcodes to the supported
134// set, refer to the following table to determine which itinerary class the
135// opcode belongs.
136//
137//    opcode     itinerary class
138//    ======     ===============
139//    add        IntSimple
140//    addc       IntGeneral
141//    adde       IntGeneral
142//    addi       IntSimple
143//    addic      IntGeneral
144//    addic.     IntGeneral
145//    addis      IntSimple
146//    addme      IntGeneral
147//    addze      IntGeneral
148//    and        IntSimple
149//    andc       IntSimple
150//    andi.      IntGeneral
151//    andis.     IntGeneral
152//    b          BrB
153//    bc         BrB
154//    bcctr      BrB
155//    bclr       BrB
156//    cmp        IntCompare
157//    cmpi       IntCompare
158//    cmpl       IntCompare
159//    cmpli      IntCompare
160//    cntlzd     IntRotateD
161//    cntlzw     IntGeneral
162//    crand      BrCR
163//    crandc     BrCR
164//    creqv      BrCR
165//    crnand     BrCR
166//    crnor      BrCR
167//    cror       BrCR
168//    crorc      BrCR
169//    crxor      BrCR
170//    dcba       LdStDCBA
171//    dcbf       LdStDCBF
172//    dcbi       LdStDCBI
173//    dcbst      LdStDCBF
174//    dcbt       LdStLoad
175//    dcbtst     LdStLoad
176//    dcbz       LdStDCBF
177//    divd       IntDivD
178//    divdu      IntDivD
179//    divw       IntDivW
180//    divwu      IntDivW
181//    dss        LdStDSS
182//    dst        LdStDSS
183//    dstst      LdStDSS
184//    eciwx      LdStLoad
185//    ecowx      LdStLoad
186//    eieio      LdStLoad
187//    eqv        IntSimple
188//    extsb      IntSimple
189//    extsh      IntSimple
190//    extsw      IntSimple
191//    fabs       FPGeneral
192//    fadd       FPAddSub
193//    fadds      FPGeneral
194//    fcfid      FPGeneral
195//    fcmpo      FPCompare
196//    fcmpu      FPCompare
197//    fctid      FPGeneral
198//    fctidz     FPGeneral
199//    fctiw      FPGeneral
200//    fctiwz     FPGeneral
201//    fdiv       FPDivD
202//    fdivs      FPDivS
203//    fmadd      FPFused
204//    fmadds     FPGeneral
205//    fmr        FPGeneral
206//    fmsub      FPFused
207//    fmsubs     FPGeneral
208//    fmul       FPFused
209//    fmuls      FPGeneral
210//    fnabs      FPGeneral
211//    fneg       FPGeneral
212//    fnmadd     FPFused
213//    fnmadds    FPGeneral
214//    fnmsub     FPFused
215//    fnmsubs    FPGeneral
216//    fres       FPRes
217//    frsp       FPGeneral
218//    frsqrte    FPGeneral
219//    fsel       FPGeneral
220//    fsqrt      FPSqrt
221//    fsqrts     FPSqrt
222//    fsub       FPAddSub
223//    fsubs      FPGeneral
224//    icbi       LdStICBI
225//    isync      SprISYNC
226//    lbz        LdStLoad
227//    lbzu       LdStLoadUpd
228//    lbzux      LdStLoadUpd
229//    lbzx       LdStLoad
230//    ld         LdStLD
231//    ldarx      LdStLDARX
232//    ldu        LdStLDU
233//    ldux       LdStLDU
234//    ldx        LdStLD
235//    lfd        LdStLFD
236//    lfdu       LdStLFDU
237//    lfdux      LdStLFDU
238//    lfdx       LdStLFD
239//    lfs        LdStLFD
240//    lfsu       LdStLFDU
241//    lfsux      LdStLFDU
242//    lfsx       LdStLFD
243//    lha        LdStLHA
244//    lhau       LdStLHAU
245//    lhaux      LdStLHAU
246//    lhax       LdStLHA
247//    lhbrx      LdStLoad
248//    lhz        LdStLoad
249//    lhzu       LdStLoadUpd
250//    lhzux      LdStLoadUpd
251//    lhzx       LdStLoad
252//    lmw        LdStLMW
253//    lswi       LdStLMW
254//    lswx       LdStLMW
255//    lvebx      LdStLVecX
256//    lvehx      LdStLVecX
257//    lvewx      LdStLVecX
258//    lvsl       LdStLVecX
259//    lvsr       LdStLVecX
260//    lvx        LdStLVecX
261//    lvxl       LdStLVecX
262//    lwa        LdStLWA
263//    lwarx      LdStLWARX
264//    lwaux      LdStLHAU
265//    lwax       LdStLHA
266//    lwbrx      LdStLoad
267//    lwz        LdStLoad
268//    lwzu       LdStLoadUpd
269//    lwzux      LdStLoadUpd
270//    lwzx       LdStLoad
271//    mcrf       BrMCR
272//    mcrfs      FPGeneral
273//    mcrxr      BrMCRX
274//    mfcr       SprMFCR
275//    mffs       IntMFFS
276//    mfmsr      SprMFMSR
277//    mfspr      SprMFSPR
278//    mfsr       SprMFSR
279//    mfsrin     SprMFSR
280//    mftb       SprMFTB
281//    mfvscr     IntMFVSCR
282//    mtcrf      BrMCRX
283//    mtfsb0     IntMTFSB0
284//    mtfsb1     IntMTFSB0
285//    mtfsf      IntMTFSB0
286//    mtfsfi     IntMTFSB0
287//    mtmsr      SprMTMSR
288//    mtmsrd     LdStLD
289//    mtspr      SprMTSPR
290//    mtsr       SprMTSR
291//    mtsrd      IntMTSRD
292//    mtsrdin    IntMTSRD
293//    mtsrin     SprMTSRIN
294//    mtvscr     IntMFVSCR
295//    mulhd      IntMulHD
296//    mulhdu     IntMulHD
297//    mulhw      IntMulHW
298//    mulhwu     IntMulHWU
299//    mulld      IntMulHD
300//    mulli      IntMulLI
301//    mullw      IntMulHW
302//    nand       IntSimple
303//    neg        IntSimple
304//    nor        IntSimple
305//    or         IntSimple
306//    orc        IntSimple
307//    ori        IntSimple
308//    oris       IntSimple
309//    rfi        SprRFI
310//    rfid       IntRFID
311//    rldcl      IntRotateD
312//    rldcr      IntRotateD
313//    rldic      IntRotateDI
314//    rldicl     IntRotateDI
315//    rldicr     IntRotateDI
316//    rldimi     IntRotateDI
317//    rlwimi     IntRotate
318//    rlwinm     IntGeneral
319//    rlwnm      IntGeneral
320//    sc         SprSC
321//    slbia      LdStSLBIA
322//    slbie      LdStSLBIE
323//    sld        IntRotateD
324//    slw        IntGeneral
325//    srad       IntRotateD
326//    sradi      IntRotateDI
327//    sraw       IntShift
328//    srawi      IntShift
329//    srd        IntRotateD
330//    srw        IntGeneral
331//    stb        LdStStore
332//    stbu       LdStStoreUpd
333//    stbux      LdStStoreUpd
334//    stbx       LdStStore
335//    std        LdStSTD
336//    stdcx.     LdStSTDCX
337//    stdu       LdStSTDU
338//    stdux      LdStSTDU
339//    stdx       LdStSTD
340//    stfd       LdStSTFD
341//    stfdu      LdStSTFDU
342//    stfdux     LdStSTFDU
343//    stfdx      LdStSTFD
344//    stfiwx     LdStSTFD
345//    stfs       LdStSTFD
346//    stfsu      LdStSTFDU
347//    stfsux     LdStSTFDU
348//    stfsx      LdStSTFD
349//    sth        LdStStore
350//    sthbrx     LdStStore
351//    sthu       LdStStoreUpd
352//    sthux      LdStStoreUpd
353//    sthx       LdStStore
354//    stmw       LdStLMW
355//    stswi      LdStLMW
356//    stswx      LdStLMW
357//    stvebx     LdStSTVEBX
358//    stvehx     LdStSTVEBX
359//    stvewx     LdStSTVEBX
360//    stvx       LdStSTVEBX
361//    stvxl      LdStSTVEBX
362//    stw        LdStStore
363//    stwbrx     LdStStore
364//    stwcx.     LdStSTWCX
365//    stwu       LdStStoreUpd
366//    stwux      LdStStoreUpd
367//    stwx       LdStStore
368//    subf       IntGeneral
369//    subfc      IntGeneral
370//    subfe      IntGeneral
371//    subfic     IntGeneral
372//    subfme     IntGeneral
373//    subfze     IntGeneral
374//    sync       LdStSync
375//    td         IntTrapD
376//    tdi        IntTrapD
377//    tlbia      LdStSLBIA
378//    tlbie      LdStDCBF
379//    tlbsync    SprTLBSYNC
380//    tw         IntTrapW
381//    twi        IntTrapW
382//    vaddcuw    VecGeneral
383//    vaddfp     VecFP
384//    vaddsbs    VecGeneral
385//    vaddshs    VecGeneral
386//    vaddsws    VecGeneral
387//    vaddubm    VecGeneral
388//    vaddubs    VecGeneral
389//    vadduhm    VecGeneral
390//    vadduhs    VecGeneral
391//    vadduwm    VecGeneral
392//    vadduws    VecGeneral
393//    vand       VecGeneral
394//    vandc      VecGeneral
395//    vavgsb     VecGeneral
396//    vavgsh     VecGeneral
397//    vavgsw     VecGeneral
398//    vavgub     VecGeneral
399//    vavguh     VecGeneral
400//    vavguw     VecGeneral
401//    vcfsx      VecFP
402//    vcfux      VecFP
403//    vcmpbfp    VecFPCompare
404//    vcmpeqfp   VecFPCompare
405//    vcmpequb   VecGeneral
406//    vcmpequh   VecGeneral
407//    vcmpequw   VecGeneral
408//    vcmpgefp   VecFPCompare
409//    vcmpgtfp   VecFPCompare
410//    vcmpgtsb   VecGeneral
411//    vcmpgtsh   VecGeneral
412//    vcmpgtsw   VecGeneral
413//    vcmpgtub   VecGeneral
414//    vcmpgtuh   VecGeneral
415//    vcmpgtuw   VecGeneral
416//    vctsxs     VecFP
417//    vctuxs     VecFP
418//    vexptefp   VecFP
419//    vlogefp    VecFP
420//    vmaddfp    VecFP
421//    vmaxfp     VecFPCompare
422//    vmaxsb     VecGeneral
423//    vmaxsh     VecGeneral
424//    vmaxsw     VecGeneral
425//    vmaxub     VecGeneral
426//    vmaxuh     VecGeneral
427//    vmaxuw     VecGeneral
428//    vmhaddshs  VecComplex
429//    vmhraddshs VecComplex
430//    vminfp     VecFPCompare
431//    vminsb     VecGeneral
432//    vminsh     VecGeneral
433//    vminsw     VecGeneral
434//    vminub     VecGeneral
435//    vminuh     VecGeneral
436//    vminuw     VecGeneral
437//    vmladduhm  VecComplex
438//    vmrghb     VecPerm
439//    vmrghh     VecPerm
440//    vmrghw     VecPerm
441//    vmrglb     VecPerm
442//    vmrglh     VecPerm
443//    vmrglw     VecPerm
444//    vmsubfp    VecFP
445//    vmsummbm   VecComplex
446//    vmsumshm   VecComplex
447//    vmsumshs   VecComplex
448//    vmsumubm   VecComplex
449//    vmsumuhm   VecComplex
450//    vmsumuhs   VecComplex
451//    vmulesb    VecComplex
452//    vmulesh    VecComplex
453//    vmuleub    VecComplex
454//    vmuleuh    VecComplex
455//    vmulosb    VecComplex
456//    vmulosh    VecComplex
457//    vmuloub    VecComplex
458//    vmulouh    VecComplex
459//    vnor       VecGeneral
460//    vor        VecGeneral
461//    vperm      VecPerm
462//    vpkpx      VecPerm
463//    vpkshss    VecPerm
464//    vpkshus    VecPerm
465//    vpkswss    VecPerm
466//    vpkswus    VecPerm
467//    vpkuhum    VecPerm
468//    vpkuhus    VecPerm
469//    vpkuwum    VecPerm
470//    vpkuwus    VecPerm
471//    vrefp      VecFPRound
472//    vrfim      VecFPRound
473//    vrfin      VecFPRound
474//    vrfip      VecFPRound
475//    vrfiz      VecFPRound
476//    vrlb       VecGeneral
477//    vrlh       VecGeneral
478//    vrlw       VecGeneral
479//    vrsqrtefp  VecFP
480//    vsel       VecGeneral
481//    vsl        VecVSL
482//    vslb       VecGeneral
483//    vsldoi     VecPerm
484//    vslh       VecGeneral
485//    vslo       VecPerm
486//    vslw       VecGeneral
487//    vspltb     VecPerm
488//    vsplth     VecPerm
489//    vspltisb   VecPerm
490//    vspltish   VecPerm
491//    vspltisw   VecPerm
492//    vspltw     VecPerm
493//    vsr        VecVSR
494//    vsrab      VecGeneral
495//    vsrah      VecGeneral
496//    vsraw      VecGeneral
497//    vsrb       VecGeneral
498//    vsrh       VecGeneral
499//    vsro       VecPerm
500//    vsrw       VecGeneral
501//    vsubcuw    VecGeneral
502//    vsubfp     VecFP
503//    vsubsbs    VecGeneral
504//    vsubshs    VecGeneral
505//    vsubsws    VecGeneral
506//    vsububm    VecGeneral
507//    vsububs    VecGeneral
508//    vsubuhm    VecGeneral
509//    vsubuhs    VecGeneral
510//    vsubuwm    VecGeneral
511//    vsubuws    VecGeneral
512//    vsum2sws   VecComplex
513//    vsum4sbs   VecComplex
514//    vsum4shs   VecComplex
515//    vsum4ubs   VecComplex
516//    vsumsws    VecComplex
517//    vupkhpx    VecPerm
518//    vupkhsb    VecPerm
519//    vupkhsh    VecPerm
520//    vupklpx    VecPerm
521//    vupklsb    VecPerm
522//    vupklsh    VecPerm
523//    vxor       VecGeneral
524//    xor        IntSimple
525//    xori       IntSimple
526//    xoris      IntSimple
527//
528