blob: 92ba69c2c6b8eb24c4218f6230bcc7a73d49ad4a [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;
Roman Divacky62cb6352013-09-12 17:50:54 +0000111def SprMTMSRD : InstrItinClass;
112def SprSLIE : InstrItinClass;
113def SprSLBIE : InstrItinClass;
114def SprSLBMTE : InstrItinClass;
115def SprSLBMFEE : InstrItinClass;
116def SprSLBIA : InstrItinClass;
117def SprTLBIEL : InstrItinClass;
118def SprTLBIE : InstrItinClass;
Jim Laskeyc6533002005-10-18 16:23:40 +0000119
120//===----------------------------------------------------------------------===//
121// Processor instruction itineraries.
122
Jim Laskey74ab9962005-10-19 19:51:16 +0000123include "PPCScheduleG3.td"
Hal Finkel6fa56972011-10-17 04:03:49 +0000124include "PPCSchedule440.td"
Jim Laskey74ab9962005-10-19 19:51:16 +0000125include "PPCScheduleG4.td"
126include "PPCScheduleG4Plus.td"
127include "PPCScheduleG5.td"
Hal Finkel9f9f8922012-04-01 19:22:40 +0000128include "PPCScheduleA2.td"
Hal Finkel742b5352012-08-28 16:12:39 +0000129include "PPCScheduleE500mc.td"
130include "PPCScheduleE5500.td"
Jim Laskeyc6533002005-10-18 16:23:40 +0000131
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// ====== ===============
Hal Finkel8c33dde2012-06-12 19:01:24 +0000139// add IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000140// addc IntGeneral
141// adde IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000142// addi IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000143// addic IntGeneral
144// addic. IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000145// addis IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000146// addme IntGeneral
147// addze IntGeneral
Hal Finkel8c33dde2012-06-12 19:01:24 +0000148// and IntSimple
149// andc IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000150// 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
Hal Finkel59607e62012-04-01 04:44:16 +0000174// dcbt LdStLoad
175// dcbtst LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000176// dcbz LdStDCBF
177// divd IntDivD
178// divdu IntDivD
179// divw IntDivW
180// divwu IntDivW
181// dss LdStDSS
182// dst LdStDSS
183// dstst LdStDSS
Hal Finkel59607e62012-04-01 04:44:16 +0000184// eciwx LdStLoad
185// ecowx LdStLoad
186// eieio LdStLoad
Hal Finkel8c33dde2012-06-12 19:01:24 +0000187// eqv IntSimple
188// extsb IntSimple
189// extsh IntSimple
190// extsw IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000191// fabs FPGeneral
Hal Finkel679c73c2012-08-28 02:49:14 +0000192// fadd FPAddSub
Jim Laskeyc6533002005-10-18 16:23:40 +0000193// 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
Hal Finkel679c73c2012-08-28 02:49:14 +0000222// fsub FPAddSub
Jim Laskeyc6533002005-10-18 16:23:40 +0000223// fsubs FPGeneral
224// icbi LdStICBI
225// isync SprISYNC
Hal Finkel59607e62012-04-01 04:44:16 +0000226// lbz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000227// lbzu LdStLoadUpd
228// lbzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000229// lbzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000230// ld LdStLD
231// ldarx LdStLDARX
Hal Finkel679c73c2012-08-28 02:49:14 +0000232// ldu LdStLDU
233// ldux LdStLDU
Jim Laskeyc6533002005-10-18 16:23:40 +0000234// ldx LdStLD
235// lfd LdStLFD
236// lfdu LdStLFDU
237// lfdux LdStLFDU
Hal Finkel679c73c2012-08-28 02:49:14 +0000238// lfdx LdStLFD
239// lfs LdStLFD
Jim Laskeyc6533002005-10-18 16:23:40 +0000240// lfsu LdStLFDU
241// lfsux LdStLFDU
Hal Finkel679c73c2012-08-28 02:49:14 +0000242// lfsx LdStLFD
Jim Laskeyc6533002005-10-18 16:23:40 +0000243// lha LdStLHA
Hal Finkel679c73c2012-08-28 02:49:14 +0000244// lhau LdStLHAU
245// lhaux LdStLHAU
Jim Laskeyc6533002005-10-18 16:23:40 +0000246// lhax LdStLHA
Hal Finkel59607e62012-04-01 04:44:16 +0000247// lhbrx LdStLoad
248// lhz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000249// lhzu LdStLoadUpd
250// lhzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000251// lhzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000252// lmw LdStLMW
253// lswi LdStLMW
254// lswx LdStLMW
Jim Laskey74ab9962005-10-19 19:51:16 +0000255// lvebx LdStLVecX
256// lvehx LdStLVecX
257// lvewx LdStLVecX
258// lvsl LdStLVecX
259// lvsr LdStLVecX
260// lvx LdStLVecX
261// lvxl LdStLVecX
Jim Laskeyc6533002005-10-18 16:23:40 +0000262// lwa LdStLWA
263// lwarx LdStLWARX
Hal Finkel679c73c2012-08-28 02:49:14 +0000264// lwaux LdStLHAU
Jim Laskeyc6533002005-10-18 16:23:40 +0000265// lwax LdStLHA
Hal Finkel59607e62012-04-01 04:44:16 +0000266// lwbrx LdStLoad
267// lwz LdStLoad
Hal Finkel679c73c2012-08-28 02:49:14 +0000268// lwzu LdStLoadUpd
269// lwzux LdStLoadUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000270// lwzx LdStLoad
Jim Laskeyc6533002005-10-18 16:23:40 +0000271// 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
Hal Finkel8c33dde2012-06-12 19:01:24 +0000302// nand IntSimple
303// neg IntSimple
304// nor IntSimple
305// or IntSimple
306// orc IntSimple
307// ori IntSimple
308// oris IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000309// rfi SprRFI
310// rfid IntRFID
311// rldcl IntRotateD
312// rldcr IntRotateD
Hal Finkel679c73c2012-08-28 02:49:14 +0000313// rldic IntRotateDI
314// rldicl IntRotateDI
315// rldicr IntRotateDI
316// rldimi IntRotateDI
Jim Laskeyc6533002005-10-18 16:23:40 +0000317// 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
Hal Finkel679c73c2012-08-28 02:49:14 +0000326// sradi IntRotateDI
Jim Laskeyc6533002005-10-18 16:23:40 +0000327// sraw IntShift
328// srawi IntShift
329// srd IntRotateD
330// srw IntGeneral
Hal Finkel59607e62012-04-01 04:44:16 +0000331// stb LdStStore
Hal Finkel679c73c2012-08-28 02:49:14 +0000332// stbu LdStStoreUpd
333// stbux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000334// stbx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000335// std LdStSTD
336// stdcx. LdStSTDCX
Hal Finkel679c73c2012-08-28 02:49:14 +0000337// stdu LdStSTDU
338// stdux LdStSTDU
Jim Laskeyc6533002005-10-18 16:23:40 +0000339// stdx LdStSTD
Hal Finkel679c73c2012-08-28 02:49:14 +0000340// 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
Hal Finkel59607e62012-04-01 04:44:16 +0000349// sth LdStStore
350// sthbrx LdStStore
Hal Finkel679c73c2012-08-28 02:49:14 +0000351// sthu LdStStoreUpd
352// sthux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000353// sthx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000354// stmw LdStLMW
355// stswi LdStLMW
356// stswx LdStLMW
357// stvebx LdStSTVEBX
358// stvehx LdStSTVEBX
359// stvewx LdStSTVEBX
360// stvx LdStSTVEBX
361// stvxl LdStSTVEBX
Hal Finkel59607e62012-04-01 04:44:16 +0000362// stw LdStStore
363// stwbrx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000364// stwcx. LdStSTWCX
Hal Finkel679c73c2012-08-28 02:49:14 +0000365// stwu LdStStoreUpd
366// stwux LdStStoreUpd
Hal Finkel59607e62012-04-01 04:44:16 +0000367// stwx LdStStore
Jim Laskeyc6533002005-10-18 16:23:40 +0000368// 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
Hal Finkel8c33dde2012-06-12 19:01:24 +0000524// xor IntSimple
525// xori IntSimple
526// xoris IntSimple
Jim Laskeyc6533002005-10-18 16:23:40 +0000527//