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// Instruction Itinerary classes used for PowerPC
12//
13def IIC_IntSimple    : InstrItinClass;
14def IIC_IntGeneral   : InstrItinClass;
15def IIC_IntCompare   : InstrItinClass;
16def IIC_IntDivD      : InstrItinClass;
17def IIC_IntDivW      : InstrItinClass;
18def IIC_IntMFFS      : InstrItinClass;
19def IIC_IntMFVSCR    : InstrItinClass;
20def IIC_IntMTFSB0    : InstrItinClass;
21def IIC_IntMTSRD     : InstrItinClass;
22def IIC_IntMulHD     : InstrItinClass;
23def IIC_IntMulHW     : InstrItinClass;
24def IIC_IntMulHWU    : InstrItinClass;
25def IIC_IntMulLI     : InstrItinClass;
26def IIC_IntRFID      : InstrItinClass;
27def IIC_IntRotateD   : InstrItinClass;
28def IIC_IntRotateDI  : InstrItinClass;
29def IIC_IntRotate    : InstrItinClass;
30def IIC_IntShift     : InstrItinClass;
31def IIC_IntTrapD     : InstrItinClass;
32def IIC_IntTrapW     : InstrItinClass;
33def IIC_BrB          : InstrItinClass;
34def IIC_BrCR         : InstrItinClass;
35def IIC_BrMCR        : InstrItinClass;
36def IIC_BrMCRX       : InstrItinClass;
37def IIC_LdStDCBA     : InstrItinClass;
38def IIC_LdStDCBF     : InstrItinClass;
39def IIC_LdStDCBI     : InstrItinClass;
40def IIC_LdStLoad     : InstrItinClass;
41def IIC_LdStLoadUpd  : InstrItinClass;
42def IIC_LdStLoadUpdX : InstrItinClass;
43def IIC_LdStStore    : InstrItinClass;
44def IIC_LdStStoreUpd : InstrItinClass;
45def IIC_LdStDSS      : InstrItinClass;
46def IIC_LdStICBI     : InstrItinClass;
47def IIC_LdStLD       : InstrItinClass;
48def IIC_LdStLDU      : InstrItinClass;
49def IIC_LdStLDUX     : InstrItinClass;
50def IIC_LdStLDARX    : InstrItinClass;
51def IIC_LdStLFD      : InstrItinClass;
52def IIC_LdStLFDU     : InstrItinClass;
53def IIC_LdStLFDUX    : InstrItinClass;
54def IIC_LdStLHA      : InstrItinClass;
55def IIC_LdStLHAU     : InstrItinClass;
56def IIC_LdStLHAUX    : InstrItinClass;
57def IIC_LdStLMW      : InstrItinClass;
58def IIC_LdStLVecX    : InstrItinClass;
59def IIC_LdStLWA      : InstrItinClass;
60def IIC_LdStLWARX    : InstrItinClass;
61def IIC_LdStSLBIA    : InstrItinClass;
62def IIC_LdStSLBIE    : InstrItinClass;
63def IIC_LdStSTD      : InstrItinClass;
64def IIC_LdStSTDCX    : InstrItinClass;
65def IIC_LdStSTDU     : InstrItinClass;
66def IIC_LdStSTDUX    : InstrItinClass;
67def IIC_LdStSTFD     : InstrItinClass;
68def IIC_LdStSTFDU    : InstrItinClass;
69def IIC_LdStSTVEBX   : InstrItinClass;
70def IIC_LdStSTWCX    : InstrItinClass;
71def IIC_LdStSync     : InstrItinClass;
72def IIC_SprISYNC     : InstrItinClass;
73def IIC_SprMFSR      : InstrItinClass;
74def IIC_SprMTMSR     : InstrItinClass;
75def IIC_SprMTSR      : InstrItinClass;
76def IIC_SprTLBSYNC   : InstrItinClass;
77def IIC_SprMFCR      : InstrItinClass;
78def IIC_SprMFCRF     : InstrItinClass;
79def IIC_SprMFMSR     : InstrItinClass;
80def IIC_SprMFSPR     : InstrItinClass;
81def IIC_SprMFTB      : InstrItinClass;
82def IIC_SprMTSPR     : InstrItinClass;
83def IIC_SprMTSRIN    : InstrItinClass;
84def IIC_SprRFI       : InstrItinClass;
85def IIC_SprSC        : InstrItinClass;
86def IIC_FPGeneral    : InstrItinClass;
87def IIC_FPAddSub     : InstrItinClass;
88def IIC_FPCompare    : InstrItinClass;
89def IIC_FPDivD       : InstrItinClass;
90def IIC_FPDivS       : InstrItinClass;
91def IIC_FPFused      : InstrItinClass;
92def IIC_FPRes        : InstrItinClass;
93def IIC_FPSqrtD      : InstrItinClass;
94def IIC_FPSqrtS      : InstrItinClass;
95def IIC_VecGeneral   : InstrItinClass;
96def IIC_VecFP        : InstrItinClass;
97def IIC_VecFPCompare : InstrItinClass;
98def IIC_VecComplex   : InstrItinClass;
99def IIC_VecPerm      : InstrItinClass;
100def IIC_VecFPRound   : InstrItinClass;
101def IIC_VecVSL       : InstrItinClass;
102def IIC_VecVSR       : InstrItinClass;
103def IIC_SprMTMSRD    : InstrItinClass;
104def IIC_SprSLIE      : InstrItinClass;
105def IIC_SprSLBIE     : InstrItinClass;
106def IIC_SprSLBMTE    : InstrItinClass;
107def IIC_SprSLBMFEE   : InstrItinClass;
108def IIC_SprSLBIA     : InstrItinClass;
109def IIC_SprTLBIEL    : InstrItinClass;
110def IIC_SprTLBIE     : InstrItinClass;
111
112//===----------------------------------------------------------------------===//
113// Processor instruction itineraries.
114
115include "PPCScheduleG3.td"
116include "PPCSchedule440.td"
117include "PPCScheduleG4.td"
118include "PPCScheduleG4Plus.td"
119include "PPCScheduleG5.td"
120include "PPCScheduleP7.td"
121include "PPCScheduleA2.td"
122include "PPCScheduleE500mc.td"
123include "PPCScheduleE5500.td"
124
125//===----------------------------------------------------------------------===//
126// Instruction to itinerary class map - When add new opcodes to the supported
127// set, refer to the following table to determine which itinerary class the
128// opcode belongs.
129//
130//    opcode     itinerary class
131//    ======     ===============
132//    add        IIC_IntSimple
133//    addc       IIC_IntGeneral
134//    adde       IIC_IntGeneral
135//    addi       IIC_IntSimple
136//    addic      IIC_IntGeneral
137//    addic.     IIC_IntGeneral
138//    addis      IIC_IntSimple
139//    addme      IIC_IntGeneral
140//    addze      IIC_IntGeneral
141//    and        IIC_IntSimple
142//    andc       IIC_IntSimple
143//    andi.      IIC_IntGeneral
144//    andis.     IIC_IntGeneral
145//    b          IIC_BrB
146//    bc         IIC_BrB
147//    bcctr      IIC_BrB
148//    bclr       IIC_BrB
149//    cmp        IIC_IntCompare
150//    cmpi       IIC_IntCompare
151//    cmpl       IIC_IntCompare
152//    cmpli      IIC_IntCompare
153//    cntlzd     IIC_IntRotateD
154//    cntlzw     IIC_IntGeneral
155//    crand      IIC_BrCR
156//    crandc     IIC_BrCR
157//    creqv      IIC_BrCR
158//    crnand     IIC_BrCR
159//    crnor      IIC_BrCR
160//    cror       IIC_BrCR
161//    crorc      IIC_BrCR
162//    crxor      IIC_BrCR
163//    dcba       IIC_LdStDCBA
164//    dcbf       IIC_LdStDCBF
165//    dcbi       IIC_LdStDCBI
166//    dcbst      IIC_LdStDCBF
167//    dcbt       IIC_LdStLoad
168//    dcbtst     IIC_LdStLoad
169//    dcbz       IIC_LdStDCBF
170//    divd       IIC_IntDivD
171//    divdu      IIC_IntDivD
172//    divw       IIC_IntDivW
173//    divwu      IIC_IntDivW
174//    dss        IIC_LdStDSS
175//    dst        IIC_LdStDSS
176//    dstst      IIC_LdStDSS
177//    eciwx      IIC_LdStLoad
178//    ecowx      IIC_LdStLoad
179//    eieio      IIC_LdStLoad
180//    eqv        IIC_IntSimple
181//    extsb      IIC_IntSimple
182//    extsh      IIC_IntSimple
183//    extsw      IIC_IntSimple
184//    fabs       IIC_FPGeneral
185//    fadd       IIC_FPAddSub
186//    fadds      IIC_FPGeneral
187//    fcfid      IIC_FPGeneral
188//    fcmpo      IIC_FPCompare
189//    fcmpu      IIC_FPCompare
190//    fctid      IIC_FPGeneral
191//    fctidz     IIC_FPGeneral
192//    fctiw      IIC_FPGeneral
193//    fctiwz     IIC_FPGeneral
194//    fdiv       IIC_FPDivD
195//    fdivs      IIC_FPDivS
196//    fmadd      IIC_FPFused
197//    fmadds     IIC_FPGeneral
198//    fmr        IIC_FPGeneral
199//    fmsub      IIC_FPFused
200//    fmsubs     IIC_FPGeneral
201//    fmul       IIC_FPFused
202//    fmuls      IIC_FPGeneral
203//    fnabs      IIC_FPGeneral
204//    fneg       IIC_FPGeneral
205//    fnmadd     IIC_FPFused
206//    fnmadds    IIC_FPGeneral
207//    fnmsub     IIC_FPFused
208//    fnmsubs    IIC_FPGeneral
209//    fres       IIC_FPRes
210//    frsp       IIC_FPGeneral
211//    frsqrte    IIC_FPGeneral
212//    fsel       IIC_FPGeneral
213//    fsqrt      IIC_FPSqrtD
214//    fsqrts     IIC_FPSqrtS
215//    fsub       IIC_FPAddSub
216//    fsubs      IIC_FPGeneral
217//    icbi       IIC_LdStICBI
218//    isync      IIC_SprISYNC
219//    lbz        IIC_LdStLoad
220//    lbzu       IIC_LdStLoadUpd
221//    lbzux      IIC_LdStLoadUpdX
222//    lbzx       IIC_LdStLoad
223//    ld         IIC_LdStLD
224//    ldarx      IIC_LdStLDARX
225//    ldu        IIC_LdStLDU
226//    ldux       IIC_LdStLDUX
227//    ldx        IIC_LdStLD
228//    lfd        IIC_LdStLFD
229//    lfdu       IIC_LdStLFDU
230//    lfdux      IIC_LdStLFDUX
231//    lfdx       IIC_LdStLFD
232//    lfs        IIC_LdStLFD
233//    lfsu       IIC_LdStLFDU
234//    lfsux      IIC_LdStLFDUX
235//    lfsx       IIC_LdStLFD
236//    lha        IIC_LdStLHA
237//    lhau       IIC_LdStLHAU
238//    lhaux      IIC_LdStLHAUX
239//    lhax       IIC_LdStLHA
240//    lhbrx      IIC_LdStLoad
241//    lhz        IIC_LdStLoad
242//    lhzu       IIC_LdStLoadUpd
243//    lhzux      IIC_LdStLoadUpdX
244//    lhzx       IIC_LdStLoad
245//    lmw        IIC_LdStLMW
246//    lswi       IIC_LdStLMW
247//    lswx       IIC_LdStLMW
248//    lvebx      IIC_LdStLVecX
249//    lvehx      IIC_LdStLVecX
250//    lvewx      IIC_LdStLVecX
251//    lvsl       IIC_LdStLVecX
252//    lvsr       IIC_LdStLVecX
253//    lvx        IIC_LdStLVecX
254//    lvxl       IIC_LdStLVecX
255//    lwa        IIC_LdStLWA
256//    lwarx      IIC_LdStLWARX
257//    lwaux      IIC_LdStLHAUX
258//    lwax       IIC_LdStLHA
259//    lwbrx      IIC_LdStLoad
260//    lwz        IIC_LdStLoad
261//    lwzu       IIC_LdStLoadUpd
262//    lwzux      IIC_LdStLoadUpdX
263//    lwzx       IIC_LdStLoad
264//    mcrf       IIC_BrMCR
265//    mcrfs      IIC_FPGeneral
266//    mcrxr      IIC_BrMCRX
267//    mfcr       IIC_SprMFCR
268//    mffs       IIC_IntMFFS
269//    mfmsr      IIC_SprMFMSR
270//    mfspr      IIC_SprMFSPR
271//    mfsr       IIC_SprMFSR
272//    mfsrin     IIC_SprMFSR
273//    mftb       IIC_SprMFTB
274//    mfvscr     IIC_IntMFVSCR
275//    mtcrf      IIC_BrMCRX
276//    mtfsb0     IIC_IntMTFSB0
277//    mtfsb1     IIC_IntMTFSB0
278//    mtfsf      IIC_IntMTFSB0
279//    mtfsfi     IIC_IntMTFSB0
280//    mtmsr      IIC_SprMTMSR
281//    mtmsrd     IIC_LdStLD
282//    mtspr      IIC_SprMTSPR
283//    mtsr       IIC_SprMTSR
284//    mtsrd      IIC_IntMTSRD
285//    mtsrdin    IIC_IntMTSRD
286//    mtsrin     IIC_SprMTSRIN
287//    mtvscr     IIC_IntMFVSCR
288//    mulhd      IIC_IntMulHD
289//    mulhdu     IIC_IntMulHD
290//    mulhw      IIC_IntMulHW
291//    mulhwu     IIC_IntMulHWU
292//    mulld      IIC_IntMulHD
293//    mulli      IIC_IntMulLI
294//    mullw      IIC_IntMulHW
295//    nand       IIC_IntSimple
296//    neg        IIC_IntSimple
297//    nor        IIC_IntSimple
298//    or         IIC_IntSimple
299//    orc        IIC_IntSimple
300//    ori        IIC_IntSimple
301//    oris       IIC_IntSimple
302//    rfi        IIC_SprRFI
303//    rfid       IIC_IntRFID
304//    rldcl      IIC_IntRotateD
305//    rldcr      IIC_IntRotateD
306//    rldic      IIC_IntRotateDI
307//    rldicl     IIC_IntRotateDI
308//    rldicr     IIC_IntRotateDI
309//    rldimi     IIC_IntRotateDI
310//    rlwimi     IIC_IntRotate
311//    rlwinm     IIC_IntGeneral
312//    rlwnm      IIC_IntGeneral
313//    sc         IIC_SprSC
314//    slbia      IIC_LdStSLBIA
315//    slbie      IIC_LdStSLBIE
316//    sld        IIC_IntRotateD
317//    slw        IIC_IntGeneral
318//    srad       IIC_IntRotateD
319//    sradi      IIC_IntRotateDI
320//    sraw       IIC_IntShift
321//    srawi      IIC_IntShift
322//    srd        IIC_IntRotateD
323//    srw        IIC_IntGeneral
324//    stb        IIC_LdStStore
325//    stbu       IIC_LdStStoreUpd
326//    stbux      IIC_LdStStoreUpd
327//    stbx       IIC_LdStStore
328//    std        IIC_LdStSTD
329//    stdcx.     IIC_LdStSTDCX
330//    stdu       IIC_LdStSTDU
331//    stdux      IIC_LdStSTDUX
332//    stdx       IIC_LdStSTD
333//    stfd       IIC_LdStSTFD
334//    stfdu      IIC_LdStSTFDU
335//    stfdux     IIC_LdStSTFDU
336//    stfdx      IIC_LdStSTFD
337//    stfiwx     IIC_LdStSTFD
338//    stfs       IIC_LdStSTFD
339//    stfsu      IIC_LdStSTFDU
340//    stfsux     IIC_LdStSTFDU
341//    stfsx      IIC_LdStSTFD
342//    sth        IIC_LdStStore
343//    sthbrx     IIC_LdStStore
344//    sthu       IIC_LdStStoreUpd
345//    sthux      IIC_LdStStoreUpd
346//    sthx       IIC_LdStStore
347//    stmw       IIC_LdStLMW
348//    stswi      IIC_LdStLMW
349//    stswx      IIC_LdStLMW
350//    stvebx     IIC_LdStSTVEBX
351//    stvehx     IIC_LdStSTVEBX
352//    stvewx     IIC_LdStSTVEBX
353//    stvx       IIC_LdStSTVEBX
354//    stvxl      IIC_LdStSTVEBX
355//    stw        IIC_LdStStore
356//    stwbrx     IIC_LdStStore
357//    stwcx.     IIC_LdStSTWCX
358//    stwu       IIC_LdStStoreUpd
359//    stwux      IIC_LdStStoreUpd
360//    stwx       IIC_LdStStore
361//    subf       IIC_IntGeneral
362//    subfc      IIC_IntGeneral
363//    subfe      IIC_IntGeneral
364//    subfic     IIC_IntGeneral
365//    subfme     IIC_IntGeneral
366//    subfze     IIC_IntGeneral
367//    sync       IIC_LdStSync
368//    td         IIC_IntTrapD
369//    tdi        IIC_IntTrapD
370//    tlbia      IIC_LdStSLBIA
371//    tlbie      IIC_LdStDCBF
372//    tlbsync    IIC_SprTLBSYNC
373//    tw         IIC_IntTrapW
374//    twi        IIC_IntTrapW
375//    vaddcuw    IIC_VecGeneral
376//    vaddfp     IIC_VecFP
377//    vaddsbs    IIC_VecGeneral
378//    vaddshs    IIC_VecGeneral
379//    vaddsws    IIC_VecGeneral
380//    vaddubm    IIC_VecGeneral
381//    vaddubs    IIC_VecGeneral
382//    vadduhm    IIC_VecGeneral
383//    vadduhs    IIC_VecGeneral
384//    vadduwm    IIC_VecGeneral
385//    vadduws    IIC_VecGeneral
386//    vand       IIC_VecGeneral
387//    vandc      IIC_VecGeneral
388//    vavgsb     IIC_VecGeneral
389//    vavgsh     IIC_VecGeneral
390//    vavgsw     IIC_VecGeneral
391//    vavgub     IIC_VecGeneral
392//    vavguh     IIC_VecGeneral
393//    vavguw     IIC_VecGeneral
394//    vcfsx      IIC_VecFP
395//    vcfux      IIC_VecFP
396//    vcmpbfp    IIC_VecFPCompare
397//    vcmpeqfp   IIC_VecFPCompare
398//    vcmpequb   IIC_VecGeneral
399//    vcmpequh   IIC_VecGeneral
400//    vcmpequw   IIC_VecGeneral
401//    vcmpgefp   IIC_VecFPCompare
402//    vcmpgtfp   IIC_VecFPCompare
403//    vcmpgtsb   IIC_VecGeneral
404//    vcmpgtsh   IIC_VecGeneral
405//    vcmpgtsw   IIC_VecGeneral
406//    vcmpgtub   IIC_VecGeneral
407//    vcmpgtuh   IIC_VecGeneral
408//    vcmpgtuw   IIC_VecGeneral
409//    vctsxs     IIC_VecFP
410//    vctuxs     IIC_VecFP
411//    vexptefp   IIC_VecFP
412//    vlogefp    IIC_VecFP
413//    vmaddfp    IIC_VecFP
414//    vmaxfp     IIC_VecFPCompare
415//    vmaxsb     IIC_VecGeneral
416//    vmaxsh     IIC_VecGeneral
417//    vmaxsw     IIC_VecGeneral
418//    vmaxub     IIC_VecGeneral
419//    vmaxuh     IIC_VecGeneral
420//    vmaxuw     IIC_VecGeneral
421//    vmhaddshs  IIC_VecComplex
422//    vmhraddshs IIC_VecComplex
423//    vminfp     IIC_VecFPCompare
424//    vminsb     IIC_VecGeneral
425//    vminsh     IIC_VecGeneral
426//    vminsw     IIC_VecGeneral
427//    vminub     IIC_VecGeneral
428//    vminuh     IIC_VecGeneral
429//    vminuw     IIC_VecGeneral
430//    vmladduhm  IIC_VecComplex
431//    vmrghb     IIC_VecPerm
432//    vmrghh     IIC_VecPerm
433//    vmrghw     IIC_VecPerm
434//    vmrglb     IIC_VecPerm
435//    vmrglh     IIC_VecPerm
436//    vmrglw     IIC_VecPerm
437//    vmsubfp    IIC_VecFP
438//    vmsummbm   IIC_VecComplex
439//    vmsumshm   IIC_VecComplex
440//    vmsumshs   IIC_VecComplex
441//    vmsumubm   IIC_VecComplex
442//    vmsumuhm   IIC_VecComplex
443//    vmsumuhs   IIC_VecComplex
444//    vmulesb    IIC_VecComplex
445//    vmulesh    IIC_VecComplex
446//    vmuleub    IIC_VecComplex
447//    vmuleuh    IIC_VecComplex
448//    vmulosb    IIC_VecComplex
449//    vmulosh    IIC_VecComplex
450//    vmuloub    IIC_VecComplex
451//    vmulouh    IIC_VecComplex
452//    vnor       IIC_VecGeneral
453//    vor        IIC_VecGeneral
454//    vperm      IIC_VecPerm
455//    vpkpx      IIC_VecPerm
456//    vpkshss    IIC_VecPerm
457//    vpkshus    IIC_VecPerm
458//    vpkswss    IIC_VecPerm
459//    vpkswus    IIC_VecPerm
460//    vpkuhum    IIC_VecPerm
461//    vpkuhus    IIC_VecPerm
462//    vpkuwum    IIC_VecPerm
463//    vpkuwus    IIC_VecPerm
464//    vrefp      IIC_VecFPRound
465//    vrfim      IIC_VecFPRound
466//    vrfin      IIC_VecFPRound
467//    vrfip      IIC_VecFPRound
468//    vrfiz      IIC_VecFPRound
469//    vrlb       IIC_VecGeneral
470//    vrlh       IIC_VecGeneral
471//    vrlw       IIC_VecGeneral
472//    vrsqrtefp  IIC_VecFP
473//    vsel       IIC_VecGeneral
474//    vsl        IIC_VecVSL
475//    vslb       IIC_VecGeneral
476//    vsldoi     IIC_VecPerm
477//    vslh       IIC_VecGeneral
478//    vslo       IIC_VecPerm
479//    vslw       IIC_VecGeneral
480//    vspltb     IIC_VecPerm
481//    vsplth     IIC_VecPerm
482//    vspltisb   IIC_VecPerm
483//    vspltish   IIC_VecPerm
484//    vspltisw   IIC_VecPerm
485//    vspltw     IIC_VecPerm
486//    vsr        IIC_VecVSR
487//    vsrab      IIC_VecGeneral
488//    vsrah      IIC_VecGeneral
489//    vsraw      IIC_VecGeneral
490//    vsrb       IIC_VecGeneral
491//    vsrh       IIC_VecGeneral
492//    vsro       IIC_VecPerm
493//    vsrw       IIC_VecGeneral
494//    vsubcuw    IIC_VecGeneral
495//    vsubfp     IIC_VecFP
496//    vsubsbs    IIC_VecGeneral
497//    vsubshs    IIC_VecGeneral
498//    vsubsws    IIC_VecGeneral
499//    vsububm    IIC_VecGeneral
500//    vsububs    IIC_VecGeneral
501//    vsubuhm    IIC_VecGeneral
502//    vsubuhs    IIC_VecGeneral
503//    vsubuwm    IIC_VecGeneral
504//    vsubuws    IIC_VecGeneral
505//    vsum2sws   IIC_VecComplex
506//    vsum4sbs   IIC_VecComplex
507//    vsum4shs   IIC_VecComplex
508//    vsum4ubs   IIC_VecComplex
509//    vsumsws    IIC_VecComplex
510//    vupkhpx    IIC_VecPerm
511//    vupkhsb    IIC_VecPerm
512//    vupkhsh    IIC_VecPerm
513//    vupklpx    IIC_VecPerm
514//    vupklsb    IIC_VecPerm
515//    vupklsh    IIC_VecPerm
516//    vxor       IIC_VecGeneral
517//    xor        IIC_IntSimple
518//    xori       IIC_IntSimple
519//    xoris      IIC_IntSimple
520//
521