blob: 660c0c3b63598813e10707bff00d7292927e31ae [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
2//
Jim Laskeyc6533002005-10-18 16:23:40 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jia Liub22310f2012-02-18 12:03:15 +00007//
Jim Laskeyc6533002005-10-18 16:23:40 +00008//===----------------------------------------------------------------------===//
9
Jim Laskeyc6533002005-10-18 16:23:40 +000010//===----------------------------------------------------------------------===//
11// Functional units across PowerPC chips sets
12//
Jim Laskeyc6533002005-10-18 16:23:40 +000013def 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)
Jim Laskeyc6533002005-10-18 16:23:40 +000018def 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
Jim Laskeyc6533002005-10-18 16:23:40 +000025//===----------------------------------------------------------------------===//
26// Instruction Itinerary classes used for PowerPC
27//
Hal Finkel8c33dde2012-06-12 19:01:24 +000028def IntSimple : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000029def 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;
Hal Finkel679c73c2012-08-28 02:49:14 +000043def IntRotateDI : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000044def 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;
Hal Finkel59607e62012-04-01 04:44:16 +000055def LdStLoad : InstrItinClass;
Hal Finkel679c73c2012-08-28 02:49:14 +000056def LdStLoadUpd : InstrItinClass;
Hal Finkel59607e62012-04-01 04:44:16 +000057def LdStStore : InstrItinClass;
Hal Finkel679c73c2012-08-28 02:49:14 +000058def LdStStoreUpd : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000059def LdStDSS : InstrItinClass;
60def LdStICBI : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000061def LdStLD : InstrItinClass;
Hal Finkel679c73c2012-08-28 02:49:14 +000062def LdStLDU : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000063def LdStLDARX : InstrItinClass;
64def LdStLFD : InstrItinClass;
65def LdStLFDU : InstrItinClass;
66def LdStLHA : InstrItinClass;
Hal Finkel679c73c2012-08-28 02:49:14 +000067def LdStLHAU : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000068def LdStLMW : InstrItinClass;
Jim Laskey74ab9962005-10-19 19:51:16 +000069def LdStLVecX : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000070def LdStLWA : InstrItinClass;
71def LdStLWARX : InstrItinClass;
72def LdStSLBIA : InstrItinClass;
73def LdStSLBIE : InstrItinClass;
74def LdStSTD : InstrItinClass;
75def LdStSTDCX : InstrItinClass;
Hal Finkel679c73c2012-08-28 02:49:14 +000076def LdStSTDU : InstrItinClass;
77def LdStSTFD : InstrItinClass;
78def LdStSTFDU : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000079def 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;
Hal Finkel679c73c2012-08-28 02:49:14 +000096def FPAddSub : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +000097def 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;
111
112//===----------------------------------------------------------------------===//
113// Processor instruction itineraries.
114
Jim Laskey74ab9962005-10-19 19:51:16 +0000115include "PPCScheduleG3.td"
Hal Finkel6fa56972011-10-17 04:03:49 +0000116include "PPCSchedule440.td"
Jim Laskey74ab9962005-10-19 19:51:16 +0000117include "PPCScheduleG4.td"
118include "PPCScheduleG4Plus.td"
119include "PPCScheduleG5.td"
Hal Finkel9f9f8922012-04-01 19:22:40 +0000120include "PPCScheduleA2.td"
Hal Finkel742b5352012-08-28 16:12:39 +0000121include "PPCScheduleE500mc.td"
122include "PPCScheduleE5500.td"
Jim Laskeyc6533002005-10-18 16:23:40 +0000123
124//===----------------------------------------------------------------------===//
125// Instruction to itinerary class map - When add new opcodes to the supported
126// set, refer to the following table to determine which itinerary class the
127// opcode belongs.
128//
129// opcode itinerary class
130// ====== ===============
Hal Finkel8c33dde2012-06-12 19:01:24 +0000131// add IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000132// addc IntGeneral
133// adde IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000134// addi IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000135// addic IntGeneral
136// addic. IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000137// addis IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000138// addme IntGeneral
139// addze IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000140// and IntSimple
141// andc IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000142// andi. IntGeneral
143// andis. IntGeneral
144// b BrB
145// bc BrB
146// bcctr BrB
147// bclr BrB
148// cmp IntCompare
149// cmpi IntCompare
150// cmpl IntCompare
151// cmpli IntCompare
152// cntlzd IntRotateD
153// cntlzw IntGeneral
154// crand BrCR
155// crandc BrCR
156// creqv BrCR
157// crnand BrCR
158// crnor BrCR
159// cror BrCR
160// crorc BrCR
161// crxor BrCR
162// dcba LdStDCBA
163// dcbf LdStDCBF
164// dcbi LdStDCBI
165// dcbst LdStDCBF
Hal Finkel59607e62012-04-01 04:44:16 +0000166// dcbt LdStLoad
167// dcbtst LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000168// dcbz LdStDCBF
169// divd IntDivD
170// divdu IntDivD
171// divw IntDivW
172// divwu IntDivW
173// dss LdStDSS
174// dst LdStDSS
175// dstst LdStDSS
Hal Finkel59607e62012-04-01 04:44:16 +0000176// eciwx LdStLoad
177// ecowx LdStLoad
178// eieio LdStLoad
Hal Finkel8c33dde2012-06-12 19:01:24 +0000179// eqv IntSimple
180// extsb IntSimple
181// extsh IntSimple
182// extsw IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000183// fabs FPGeneral
Hal Finkel679c73c2012-08-28 02:49:14 +0000184// fadd FPAddSub
Jim Laskeyc6533002005-10-18 16:23:40 +0000185// fadds FPGeneral
186// fcfid FPGeneral
187// fcmpo FPCompare
188// fcmpu FPCompare
189// fctid FPGeneral
190// fctidz FPGeneral
191// fctiw FPGeneral
192// fctiwz FPGeneral
193// fdiv FPDivD
194// fdivs FPDivS
195// fmadd FPFused
196// fmadds FPGeneral
197// fmr FPGeneral
198// fmsub FPFused
199// fmsubs FPGeneral
200// fmul FPFused
201// fmuls FPGeneral
202// fnabs FPGeneral
203// fneg FPGeneral
204// fnmadd FPFused
205// fnmadds FPGeneral
206// fnmsub FPFused
207// fnmsubs FPGeneral
208// fres FPRes
209// frsp FPGeneral
210// frsqrte FPGeneral
211// fsel FPGeneral
212// fsqrt FPSqrt
213// fsqrts FPSqrt
Hal Finkel679c73c2012-08-28 02:49:14 +0000214// fsub FPAddSub
Jim Laskeyc6533002005-10-18 16:23:40 +0000215// fsubs FPGeneral
216// icbi LdStICBI
217// isync SprISYNC
Hal Finkel59607e62012-04-01 04:44:16 +0000218// lbz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000219// lbzu LdStLoadUpd
220// lbzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000221// lbzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000222// ld LdStLD
223// ldarx LdStLDARX
Hal Finkel679c73c2012-08-28 02:49:14 +0000224// ldu LdStLDU
225// ldux LdStLDU
Jim Laskeyc6533002005-10-18 16:23:40 +0000226// ldx LdStLD
227// lfd LdStLFD
228// lfdu LdStLFDU
229// lfdux LdStLFDU
Hal Finkel679c73c2012-08-28 02:49:14 +0000230// lfdx LdStLFD
231// lfs LdStLFD
Jim Laskeyc6533002005-10-18 16:23:40 +0000232// lfsu LdStLFDU
233// lfsux LdStLFDU
Hal Finkel679c73c2012-08-28 02:49:14 +0000234// lfsx LdStLFD
Jim Laskeyc6533002005-10-18 16:23:40 +0000235// lha LdStLHA
Hal Finkel679c73c2012-08-28 02:49:14 +0000236// lhau LdStLHAU
237// lhaux LdStLHAU
Jim Laskeyc6533002005-10-18 16:23:40 +0000238// lhax LdStLHA
Hal Finkel59607e62012-04-01 04:44:16 +0000239// lhbrx LdStLoad
240// lhz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000241// lhzu LdStLoadUpd
242// lhzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000243// lhzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000244// lmw LdStLMW
245// lswi LdStLMW
246// lswx LdStLMW
Jim Laskey74ab9962005-10-19 19:51:16 +0000247// lvebx LdStLVecX
248// lvehx LdStLVecX
249// lvewx LdStLVecX
250// lvsl LdStLVecX
251// lvsr LdStLVecX
252// lvx LdStLVecX
253// lvxl LdStLVecX
Jim Laskeyc6533002005-10-18 16:23:40 +0000254// lwa LdStLWA
255// lwarx LdStLWARX
Hal Finkel679c73c2012-08-28 02:49:14 +0000256// lwaux LdStLHAU
Jim Laskeyc6533002005-10-18 16:23:40 +0000257// lwax LdStLHA
Hal Finkel59607e62012-04-01 04:44:16 +0000258// lwbrx LdStLoad
259// lwz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000260// lwzu LdStLoadUpd
261// lwzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000262// lwzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000263// mcrf BrMCR
264// mcrfs FPGeneral
265// mcrxr BrMCRX
266// mfcr SprMFCR
267// mffs IntMFFS
268// mfmsr SprMFMSR
269// mfspr SprMFSPR
270// mfsr SprMFSR
271// mfsrin SprMFSR
272// mftb SprMFTB
273// mfvscr IntMFVSCR
274// mtcrf BrMCRX
275// mtfsb0 IntMTFSB0
276// mtfsb1 IntMTFSB0
277// mtfsf IntMTFSB0
278// mtfsfi IntMTFSB0
279// mtmsr SprMTMSR
280// mtmsrd LdStLD
281// mtspr SprMTSPR
282// mtsr SprMTSR
283// mtsrd IntMTSRD
284// mtsrdin IntMTSRD
285// mtsrin SprMTSRIN
286// mtvscr IntMFVSCR
287// mulhd IntMulHD
288// mulhdu IntMulHD
289// mulhw IntMulHW
290// mulhwu IntMulHWU
291// mulld IntMulHD
292// mulli IntMulLI
293// mullw IntMulHW
Hal Finkel8c33dde2012-06-12 19:01:24 +0000294// nand IntSimple
295// neg IntSimple
296// nor IntSimple
297// or IntSimple
298// orc IntSimple
299// ori IntSimple
300// oris IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000301// rfi SprRFI
302// rfid IntRFID
303// rldcl IntRotateD
304// rldcr IntRotateD
Hal Finkel679c73c2012-08-28 02:49:14 +0000305// rldic IntRotateDI
306// rldicl IntRotateDI
307// rldicr IntRotateDI
308// rldimi IntRotateDI
Jim Laskeyc6533002005-10-18 16:23:40 +0000309// rlwimi IntRotate
310// rlwinm IntGeneral
311// rlwnm IntGeneral
312// sc SprSC
313// slbia LdStSLBIA
314// slbie LdStSLBIE
315// sld IntRotateD
316// slw IntGeneral
317// srad IntRotateD
Hal Finkel679c73c2012-08-28 02:49:14 +0000318// sradi IntRotateDI
Jim Laskeyc6533002005-10-18 16:23:40 +0000319// sraw IntShift
320// srawi IntShift
321// srd IntRotateD
322// srw IntGeneral
Hal Finkel59607e62012-04-01 04:44:16 +0000323// stb LdStStore
Hal Finkel679c73c2012-08-28 02:49:14 +0000324// stbu LdStStoreUpd
325// stbux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000326// stbx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000327// std LdStSTD
328// stdcx. LdStSTDCX
Hal Finkel679c73c2012-08-28 02:49:14 +0000329// stdu LdStSTDU
330// stdux LdStSTDU
Jim Laskeyc6533002005-10-18 16:23:40 +0000331// stdx LdStSTD
Hal Finkel679c73c2012-08-28 02:49:14 +0000332// stfd LdStSTFD
333// stfdu LdStSTFDU
334// stfdux LdStSTFDU
335// stfdx LdStSTFD
336// stfiwx LdStSTFD
337// stfs LdStSTFD
338// stfsu LdStSTFDU
339// stfsux LdStSTFDU
340// stfsx LdStSTFD
Hal Finkel59607e62012-04-01 04:44:16 +0000341// sth LdStStore
342// sthbrx LdStStore
Hal Finkel679c73c2012-08-28 02:49:14 +0000343// sthu LdStStoreUpd
344// sthux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000345// sthx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000346// stmw LdStLMW
347// stswi LdStLMW
348// stswx LdStLMW
349// stvebx LdStSTVEBX
350// stvehx LdStSTVEBX
351// stvewx LdStSTVEBX
352// stvx LdStSTVEBX
353// stvxl LdStSTVEBX
Hal Finkel59607e62012-04-01 04:44:16 +0000354// stw LdStStore
355// stwbrx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000356// stwcx. LdStSTWCX
Hal Finkel679c73c2012-08-28 02:49:14 +0000357// stwu LdStStoreUpd
358// stwux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000359// stwx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000360// subf IntGeneral
361// subfc IntGeneral
362// subfe IntGeneral
363// subfic IntGeneral
364// subfme IntGeneral
365// subfze IntGeneral
366// sync LdStSync
367// td IntTrapD
368// tdi IntTrapD
369// tlbia LdStSLBIA
370// tlbie LdStDCBF
371// tlbsync SprTLBSYNC
372// tw IntTrapW
373// twi IntTrapW
374// vaddcuw VecGeneral
375// vaddfp VecFP
376// vaddsbs VecGeneral
377// vaddshs VecGeneral
378// vaddsws VecGeneral
379// vaddubm VecGeneral
380// vaddubs VecGeneral
381// vadduhm VecGeneral
382// vadduhs VecGeneral
383// vadduwm VecGeneral
384// vadduws VecGeneral
385// vand VecGeneral
386// vandc VecGeneral
387// vavgsb VecGeneral
388// vavgsh VecGeneral
389// vavgsw VecGeneral
390// vavgub VecGeneral
391// vavguh VecGeneral
392// vavguw VecGeneral
393// vcfsx VecFP
394// vcfux VecFP
395// vcmpbfp VecFPCompare
396// vcmpeqfp VecFPCompare
397// vcmpequb VecGeneral
398// vcmpequh VecGeneral
399// vcmpequw VecGeneral
400// vcmpgefp VecFPCompare
401// vcmpgtfp VecFPCompare
402// vcmpgtsb VecGeneral
403// vcmpgtsh VecGeneral
404// vcmpgtsw VecGeneral
405// vcmpgtub VecGeneral
406// vcmpgtuh VecGeneral
407// vcmpgtuw VecGeneral
408// vctsxs VecFP
409// vctuxs VecFP
410// vexptefp VecFP
411// vlogefp VecFP
412// vmaddfp VecFP
413// vmaxfp VecFPCompare
414// vmaxsb VecGeneral
415// vmaxsh VecGeneral
416// vmaxsw VecGeneral
417// vmaxub VecGeneral
418// vmaxuh VecGeneral
419// vmaxuw VecGeneral
420// vmhaddshs VecComplex
421// vmhraddshs VecComplex
422// vminfp VecFPCompare
423// vminsb VecGeneral
424// vminsh VecGeneral
425// vminsw VecGeneral
426// vminub VecGeneral
427// vminuh VecGeneral
428// vminuw VecGeneral
429// vmladduhm VecComplex
430// vmrghb VecPerm
431// vmrghh VecPerm
432// vmrghw VecPerm
433// vmrglb VecPerm
434// vmrglh VecPerm
435// vmrglw VecPerm
436// vmsubfp VecFP
437// vmsummbm VecComplex
438// vmsumshm VecComplex
439// vmsumshs VecComplex
440// vmsumubm VecComplex
441// vmsumuhm VecComplex
442// vmsumuhs VecComplex
443// vmulesb VecComplex
444// vmulesh VecComplex
445// vmuleub VecComplex
446// vmuleuh VecComplex
447// vmulosb VecComplex
448// vmulosh VecComplex
449// vmuloub VecComplex
450// vmulouh VecComplex
451// vnor VecGeneral
452// vor VecGeneral
453// vperm VecPerm
454// vpkpx VecPerm
455// vpkshss VecPerm
456// vpkshus VecPerm
457// vpkswss VecPerm
458// vpkswus VecPerm
459// vpkuhum VecPerm
460// vpkuhus VecPerm
461// vpkuwum VecPerm
462// vpkuwus VecPerm
463// vrefp VecFPRound
464// vrfim VecFPRound
465// vrfin VecFPRound
466// vrfip VecFPRound
467// vrfiz VecFPRound
468// vrlb VecGeneral
469// vrlh VecGeneral
470// vrlw VecGeneral
471// vrsqrtefp VecFP
472// vsel VecGeneral
473// vsl VecVSL
474// vslb VecGeneral
475// vsldoi VecPerm
476// vslh VecGeneral
477// vslo VecPerm
478// vslw VecGeneral
479// vspltb VecPerm
480// vsplth VecPerm
481// vspltisb VecPerm
482// vspltish VecPerm
483// vspltisw VecPerm
484// vspltw VecPerm
485// vsr VecVSR
486// vsrab VecGeneral
487// vsrah VecGeneral
488// vsraw VecGeneral
489// vsrb VecGeneral
490// vsrh VecGeneral
491// vsro VecPerm
492// vsrw VecGeneral
493// vsubcuw VecGeneral
494// vsubfp VecFP
495// vsubsbs VecGeneral
496// vsubshs VecGeneral
497// vsubsws VecGeneral
498// vsububm VecGeneral
499// vsububs VecGeneral
500// vsubuhm VecGeneral
501// vsubuhs VecGeneral
502// vsubuwm VecGeneral
503// vsubuws VecGeneral
504// vsum2sws VecComplex
505// vsum4sbs VecComplex
506// vsum4shs VecComplex
507// vsum4ubs VecComplex
508// vsumsws VecComplex
509// vupkhpx VecPerm
510// vupkhsb VecPerm
511// vupkhsh VecPerm
512// vupklpx VecPerm
513// vupklsb VecPerm
514// vupklsh VecPerm
515// vxor VecGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000516// xor IntSimple
517// xori IntSimple
518// xoris IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000519//