blob: 6a6ccb9d9852da7be4a2e92726969eaf9ec7c990 [file] [log] [blame]
Jia Liu31d157a2012-02-18 12:03:15 +00001//===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
2//
Jim Laskey076866c2005-10-18 16:23:40 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-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 Liu31d157a2012-02-18 12:03:15 +00007//
Jim Laskey076866c2005-10-18 16:23:40 +00008//===----------------------------------------------------------------------===//
9
Jim Laskey076866c2005-10-18 16:23:40 +000010//===----------------------------------------------------------------------===//
11// Functional units across PowerPC chips sets
12//
Jim Laskey076866c2005-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 Laskey076866c2005-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 Laskey076866c2005-10-18 16:23:40 +000025//===----------------------------------------------------------------------===//
26// Instruction Itinerary classes used for PowerPC
27//
Hal Finkel16803092012-06-12 19:01:24 +000028def IntSimple : InstrItinClass;
Jim Laskey076866c2005-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;
43def IntRotate : InstrItinClass;
44def IntShift : InstrItinClass;
45def IntTrapD : InstrItinClass;
46def IntTrapW : InstrItinClass;
47def BrB : InstrItinClass;
48def BrCR : InstrItinClass;
49def BrMCR : InstrItinClass;
50def BrMCRX : InstrItinClass;
51def LdStDCBA : InstrItinClass;
52def LdStDCBF : InstrItinClass;
53def LdStDCBI : InstrItinClass;
Hal Finkel20b529b2012-04-01 04:44:16 +000054def LdStLoad : InstrItinClass;
55def LdStStore : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000056def LdStDSS : InstrItinClass;
57def LdStICBI : InstrItinClass;
Jim Laskey53842142005-10-19 19:51:16 +000058def LdStUX : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000059def LdStLD : InstrItinClass;
60def LdStLDARX : InstrItinClass;
61def LdStLFD : InstrItinClass;
62def LdStLFDU : InstrItinClass;
63def LdStLHA : InstrItinClass;
64def LdStLMW : InstrItinClass;
Jim Laskey53842142005-10-19 19:51:16 +000065def LdStLVecX : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000066def LdStLWA : InstrItinClass;
67def LdStLWARX : InstrItinClass;
68def LdStSLBIA : InstrItinClass;
69def LdStSLBIE : InstrItinClass;
70def LdStSTD : InstrItinClass;
71def LdStSTDCX : InstrItinClass;
72def LdStSTVEBX : InstrItinClass;
73def LdStSTWCX : InstrItinClass;
74def LdStSync : InstrItinClass;
75def SprISYNC : InstrItinClass;
76def SprMFSR : InstrItinClass;
77def SprMTMSR : InstrItinClass;
78def SprMTSR : InstrItinClass;
79def SprTLBSYNC : InstrItinClass;
80def SprMFCR : InstrItinClass;
81def SprMFMSR : InstrItinClass;
82def SprMFSPR : InstrItinClass;
83def SprMFTB : InstrItinClass;
84def SprMTSPR : InstrItinClass;
85def SprMTSRIN : InstrItinClass;
86def SprRFI : InstrItinClass;
87def SprSC : InstrItinClass;
88def FPGeneral : InstrItinClass;
89def FPCompare : InstrItinClass;
90def FPDivD : InstrItinClass;
91def FPDivS : InstrItinClass;
92def FPFused : InstrItinClass;
93def FPRes : InstrItinClass;
94def FPSqrt : InstrItinClass;
95def VecGeneral : InstrItinClass;
96def VecFP : InstrItinClass;
97def VecFPCompare : InstrItinClass;
98def VecComplex : InstrItinClass;
99def VecPerm : InstrItinClass;
100def VecFPRound : InstrItinClass;
101def VecVSL : InstrItinClass;
102def VecVSR : InstrItinClass;
103
104//===----------------------------------------------------------------------===//
105// Processor instruction itineraries.
106
Jim Laskey53842142005-10-19 19:51:16 +0000107include "PPCScheduleG3.td"
Hal Finkelc6d08f12011-10-17 04:03:49 +0000108include "PPCSchedule440.td"
Jim Laskey53842142005-10-19 19:51:16 +0000109include "PPCScheduleG4.td"
110include "PPCScheduleG4Plus.td"
111include "PPCScheduleG5.td"
Hal Finkel4d989ac2012-04-01 19:22:40 +0000112include "PPCScheduleA2.td"
Jim Laskey076866c2005-10-18 16:23:40 +0000113
114//===----------------------------------------------------------------------===//
115// Instruction to itinerary class map - When add new opcodes to the supported
116// set, refer to the following table to determine which itinerary class the
117// opcode belongs.
118//
119// opcode itinerary class
120// ====== ===============
Hal Finkel16803092012-06-12 19:01:24 +0000121// add IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000122// addc IntGeneral
123// adde IntGeneral
Hal Finkel16803092012-06-12 19:01:24 +0000124// addi IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000125// addic IntGeneral
126// addic. IntGeneral
Hal Finkel16803092012-06-12 19:01:24 +0000127// addis IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000128// addme IntGeneral
129// addze IntGeneral
Hal Finkel16803092012-06-12 19:01:24 +0000130// and IntSimple
131// andc IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000132// andi. IntGeneral
133// andis. IntGeneral
134// b BrB
135// bc BrB
136// bcctr BrB
137// bclr BrB
138// cmp IntCompare
139// cmpi IntCompare
140// cmpl IntCompare
141// cmpli IntCompare
142// cntlzd IntRotateD
143// cntlzw IntGeneral
144// crand BrCR
145// crandc BrCR
146// creqv BrCR
147// crnand BrCR
148// crnor BrCR
149// cror BrCR
150// crorc BrCR
151// crxor BrCR
152// dcba LdStDCBA
153// dcbf LdStDCBF
154// dcbi LdStDCBI
155// dcbst LdStDCBF
Hal Finkel20b529b2012-04-01 04:44:16 +0000156// dcbt LdStLoad
157// dcbtst LdStLoad
Jim Laskey076866c2005-10-18 16:23:40 +0000158// dcbz LdStDCBF
159// divd IntDivD
160// divdu IntDivD
161// divw IntDivW
162// divwu IntDivW
163// dss LdStDSS
164// dst LdStDSS
165// dstst LdStDSS
Hal Finkel20b529b2012-04-01 04:44:16 +0000166// eciwx LdStLoad
167// ecowx LdStLoad
168// eieio LdStLoad
Hal Finkel16803092012-06-12 19:01:24 +0000169// eqv IntSimple
170// extsb IntSimple
171// extsh IntSimple
172// extsw IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000173// fabs FPGeneral
174// fadd FPGeneral
175// fadds FPGeneral
176// fcfid FPGeneral
177// fcmpo FPCompare
178// fcmpu FPCompare
179// fctid FPGeneral
180// fctidz FPGeneral
181// fctiw FPGeneral
182// fctiwz FPGeneral
183// fdiv FPDivD
184// fdivs FPDivS
185// fmadd FPFused
186// fmadds FPGeneral
187// fmr FPGeneral
188// fmsub FPFused
189// fmsubs FPGeneral
190// fmul FPFused
191// fmuls FPGeneral
192// fnabs FPGeneral
193// fneg FPGeneral
194// fnmadd FPFused
195// fnmadds FPGeneral
196// fnmsub FPFused
197// fnmsubs FPGeneral
198// fres FPRes
199// frsp FPGeneral
200// frsqrte FPGeneral
201// fsel FPGeneral
202// fsqrt FPSqrt
203// fsqrts FPSqrt
204// fsub FPGeneral
205// fsubs FPGeneral
206// icbi LdStICBI
207// isync SprISYNC
Hal Finkel20b529b2012-04-01 04:44:16 +0000208// lbz LdStLoad
209// lbzu LdStLoad
Jim Laskey53842142005-10-19 19:51:16 +0000210// lbzux LdStUX
Hal Finkel20b529b2012-04-01 04:44:16 +0000211// lbzx LdStLoad
Jim Laskey076866c2005-10-18 16:23:40 +0000212// ld LdStLD
213// ldarx LdStLDARX
214// ldu LdStLD
215// ldux LdStLD
216// ldx LdStLD
217// lfd LdStLFD
218// lfdu LdStLFDU
219// lfdux LdStLFDU
220// lfdx LdStLFDU
221// lfs LdStLFDU
222// lfsu LdStLFDU
223// lfsux LdStLFDU
224// lfsx LdStLFDU
225// lha LdStLHA
226// lhau LdStLHA
227// lhaux LdStLHA
228// lhax LdStLHA
Hal Finkel20b529b2012-04-01 04:44:16 +0000229// lhbrx LdStLoad
230// lhz LdStLoad
231// lhzu LdStLoad
Jim Laskey53842142005-10-19 19:51:16 +0000232// lhzux LdStUX
Hal Finkel20b529b2012-04-01 04:44:16 +0000233// lhzx LdStLoad
Jim Laskey076866c2005-10-18 16:23:40 +0000234// lmw LdStLMW
235// lswi LdStLMW
236// lswx LdStLMW
Jim Laskey53842142005-10-19 19:51:16 +0000237// lvebx LdStLVecX
238// lvehx LdStLVecX
239// lvewx LdStLVecX
240// lvsl LdStLVecX
241// lvsr LdStLVecX
242// lvx LdStLVecX
243// lvxl LdStLVecX
Jim Laskey076866c2005-10-18 16:23:40 +0000244// lwa LdStLWA
245// lwarx LdStLWARX
246// lwaux LdStLHA
247// lwax LdStLHA
Hal Finkel20b529b2012-04-01 04:44:16 +0000248// lwbrx LdStLoad
249// lwz LdStLoad
250// lwzu LdStLoad
Jim Laskey53842142005-10-19 19:51:16 +0000251// lwzux LdStUX
Hal Finkel20b529b2012-04-01 04:44:16 +0000252// lwzx LdStLoad
Jim Laskey076866c2005-10-18 16:23:40 +0000253// mcrf BrMCR
254// mcrfs FPGeneral
255// mcrxr BrMCRX
256// mfcr SprMFCR
257// mffs IntMFFS
258// mfmsr SprMFMSR
259// mfspr SprMFSPR
260// mfsr SprMFSR
261// mfsrin SprMFSR
262// mftb SprMFTB
263// mfvscr IntMFVSCR
264// mtcrf BrMCRX
265// mtfsb0 IntMTFSB0
266// mtfsb1 IntMTFSB0
267// mtfsf IntMTFSB0
268// mtfsfi IntMTFSB0
269// mtmsr SprMTMSR
270// mtmsrd LdStLD
271// mtspr SprMTSPR
272// mtsr SprMTSR
273// mtsrd IntMTSRD
274// mtsrdin IntMTSRD
275// mtsrin SprMTSRIN
276// mtvscr IntMFVSCR
277// mulhd IntMulHD
278// mulhdu IntMulHD
279// mulhw IntMulHW
280// mulhwu IntMulHWU
281// mulld IntMulHD
282// mulli IntMulLI
283// mullw IntMulHW
Hal Finkel16803092012-06-12 19:01:24 +0000284// nand IntSimple
285// neg IntSimple
286// nor IntSimple
287// or IntSimple
288// orc IntSimple
289// ori IntSimple
290// oris IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000291// rfi SprRFI
292// rfid IntRFID
293// rldcl IntRotateD
294// rldcr IntRotateD
295// rldic IntRotateD
296// rldicl IntRotateD
297// rldicr IntRotateD
298// rldimi IntRotateD
299// rlwimi IntRotate
300// rlwinm IntGeneral
301// rlwnm IntGeneral
302// sc SprSC
303// slbia LdStSLBIA
304// slbie LdStSLBIE
305// sld IntRotateD
306// slw IntGeneral
307// srad IntRotateD
308// sradi IntRotateD
309// sraw IntShift
310// srawi IntShift
311// srd IntRotateD
312// srw IntGeneral
Hal Finkel20b529b2012-04-01 04:44:16 +0000313// stb LdStStore
314// stbu LdStStore
315// stbux LdStStore
316// stbx LdStStore
Jim Laskey076866c2005-10-18 16:23:40 +0000317// std LdStSTD
318// stdcx. LdStSTDCX
319// stdu LdStSTD
320// stdux LdStSTD
321// stdx LdStSTD
Jim Laskey53842142005-10-19 19:51:16 +0000322// stfd LdStUX
323// stfdu LdStUX
324// stfdux LdStUX
325// stfdx LdStUX
326// stfiwx LdStUX
327// stfs LdStUX
328// stfsu LdStUX
329// stfsux LdStUX
330// stfsx LdStUX
Hal Finkel20b529b2012-04-01 04:44:16 +0000331// sth LdStStore
332// sthbrx LdStStore
333// sthu LdStStore
334// sthux LdStStore
335// sthx LdStStore
Jim Laskey076866c2005-10-18 16:23:40 +0000336// stmw LdStLMW
337// stswi LdStLMW
338// stswx LdStLMW
339// stvebx LdStSTVEBX
340// stvehx LdStSTVEBX
341// stvewx LdStSTVEBX
342// stvx LdStSTVEBX
343// stvxl LdStSTVEBX
Hal Finkel20b529b2012-04-01 04:44:16 +0000344// stw LdStStore
345// stwbrx LdStStore
Jim Laskey076866c2005-10-18 16:23:40 +0000346// stwcx. LdStSTWCX
Hal Finkel20b529b2012-04-01 04:44:16 +0000347// stwu LdStStore
348// stwux LdStStore
349// stwx LdStStore
Jim Laskey076866c2005-10-18 16:23:40 +0000350// subf IntGeneral
351// subfc IntGeneral
352// subfe IntGeneral
353// subfic IntGeneral
354// subfme IntGeneral
355// subfze IntGeneral
356// sync LdStSync
357// td IntTrapD
358// tdi IntTrapD
359// tlbia LdStSLBIA
360// tlbie LdStDCBF
361// tlbsync SprTLBSYNC
362// tw IntTrapW
363// twi IntTrapW
364// vaddcuw VecGeneral
365// vaddfp VecFP
366// vaddsbs VecGeneral
367// vaddshs VecGeneral
368// vaddsws VecGeneral
369// vaddubm VecGeneral
370// vaddubs VecGeneral
371// vadduhm VecGeneral
372// vadduhs VecGeneral
373// vadduwm VecGeneral
374// vadduws VecGeneral
375// vand VecGeneral
376// vandc VecGeneral
377// vavgsb VecGeneral
378// vavgsh VecGeneral
379// vavgsw VecGeneral
380// vavgub VecGeneral
381// vavguh VecGeneral
382// vavguw VecGeneral
383// vcfsx VecFP
384// vcfux VecFP
385// vcmpbfp VecFPCompare
386// vcmpeqfp VecFPCompare
387// vcmpequb VecGeneral
388// vcmpequh VecGeneral
389// vcmpequw VecGeneral
390// vcmpgefp VecFPCompare
391// vcmpgtfp VecFPCompare
392// vcmpgtsb VecGeneral
393// vcmpgtsh VecGeneral
394// vcmpgtsw VecGeneral
395// vcmpgtub VecGeneral
396// vcmpgtuh VecGeneral
397// vcmpgtuw VecGeneral
398// vctsxs VecFP
399// vctuxs VecFP
400// vexptefp VecFP
401// vlogefp VecFP
402// vmaddfp VecFP
403// vmaxfp VecFPCompare
404// vmaxsb VecGeneral
405// vmaxsh VecGeneral
406// vmaxsw VecGeneral
407// vmaxub VecGeneral
408// vmaxuh VecGeneral
409// vmaxuw VecGeneral
410// vmhaddshs VecComplex
411// vmhraddshs VecComplex
412// vminfp VecFPCompare
413// vminsb VecGeneral
414// vminsh VecGeneral
415// vminsw VecGeneral
416// vminub VecGeneral
417// vminuh VecGeneral
418// vminuw VecGeneral
419// vmladduhm VecComplex
420// vmrghb VecPerm
421// vmrghh VecPerm
422// vmrghw VecPerm
423// vmrglb VecPerm
424// vmrglh VecPerm
425// vmrglw VecPerm
426// vmsubfp VecFP
427// vmsummbm VecComplex
428// vmsumshm VecComplex
429// vmsumshs VecComplex
430// vmsumubm VecComplex
431// vmsumuhm VecComplex
432// vmsumuhs VecComplex
433// vmulesb VecComplex
434// vmulesh VecComplex
435// vmuleub VecComplex
436// vmuleuh VecComplex
437// vmulosb VecComplex
438// vmulosh VecComplex
439// vmuloub VecComplex
440// vmulouh VecComplex
441// vnor VecGeneral
442// vor VecGeneral
443// vperm VecPerm
444// vpkpx VecPerm
445// vpkshss VecPerm
446// vpkshus VecPerm
447// vpkswss VecPerm
448// vpkswus VecPerm
449// vpkuhum VecPerm
450// vpkuhus VecPerm
451// vpkuwum VecPerm
452// vpkuwus VecPerm
453// vrefp VecFPRound
454// vrfim VecFPRound
455// vrfin VecFPRound
456// vrfip VecFPRound
457// vrfiz VecFPRound
458// vrlb VecGeneral
459// vrlh VecGeneral
460// vrlw VecGeneral
461// vrsqrtefp VecFP
462// vsel VecGeneral
463// vsl VecVSL
464// vslb VecGeneral
465// vsldoi VecPerm
466// vslh VecGeneral
467// vslo VecPerm
468// vslw VecGeneral
469// vspltb VecPerm
470// vsplth VecPerm
471// vspltisb VecPerm
472// vspltish VecPerm
473// vspltisw VecPerm
474// vspltw VecPerm
475// vsr VecVSR
476// vsrab VecGeneral
477// vsrah VecGeneral
478// vsraw VecGeneral
479// vsrb VecGeneral
480// vsrh VecGeneral
481// vsro VecPerm
482// vsrw VecGeneral
483// vsubcuw VecGeneral
484// vsubfp VecFP
485// vsubsbs VecGeneral
486// vsubshs VecGeneral
487// vsubsws VecGeneral
488// vsububm VecGeneral
489// vsububs VecGeneral
490// vsubuhm VecGeneral
491// vsubuhs VecGeneral
492// vsubuwm VecGeneral
493// vsubuws VecGeneral
494// vsum2sws VecComplex
495// vsum4sbs VecComplex
496// vsum4shs VecComplex
497// vsum4ubs VecComplex
498// vsumsws VecComplex
499// vupkhpx VecPerm
500// vupkhsb VecPerm
501// vupkhsh VecPerm
502// vupklpx VecPerm
503// vupklsb VecPerm
504// vupklsh VecPerm
505// vxor VecGeneral
Hal Finkel16803092012-06-12 19:01:24 +0000506// xor IntSimple
507// xori IntSimple
508// xoris IntSimple
Jim Laskey076866c2005-10-18 16:23:40 +0000509//