Hal Finkel | 9f9f892 | 2012-04-01 19:22:40 +0000 | [diff] [blame] | 1 | //===- PPCScheduleA2.td - PPC A2 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 | // Primary reference: |
| 11 | // A2 Processor User's Manual. |
| 12 | // IBM (as updated in) 2010. |
| 13 | |
| 14 | //===----------------------------------------------------------------------===// |
| 15 | // Functional units on the PowerPC A2 chip sets |
| 16 | // |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 17 | def A2_XU : FuncUnit; // A2_XU pipeline |
| 18 | def A2_FU : FuncUnit; // FI pipeline |
Hal Finkel | 9f9f892 | 2012-04-01 19:22:40 +0000 | [diff] [blame] | 19 | |
| 20 | // |
| 21 | // This file defines the itinerary class data for the PPC A2 processor. |
| 22 | // |
| 23 | //===----------------------------------------------------------------------===// |
| 24 | |
| 25 | |
| 26 | def PPCA2Itineraries : ProcessorItineraries< |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 27 | [A2_XU, A2_FU], [], [ |
| 28 | InstrItinData<IIC_IntSimple, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 29 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 30 | InstrItinData<IIC_IntGeneral, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 31 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 32 | InstrItinData<IIC_IntCompare, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 33 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 34 | InstrItinData<IIC_IntDivW, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 35 | [39, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 36 | InstrItinData<IIC_IntDivD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 37 | [71, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 38 | InstrItinData<IIC_IntMulHW, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 39 | [5, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 40 | InstrItinData<IIC_IntMulHWU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 41 | [5, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 42 | InstrItinData<IIC_IntMulLI, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 43 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 44 | InstrItinData<IIC_IntRotate, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 45 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 46 | InstrItinData<IIC_IntRotateD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 47 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 48 | InstrItinData<IIC_IntRotateDI, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 49 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 50 | InstrItinData<IIC_IntShift, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 51 | [2, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 52 | InstrItinData<IIC_IntTrapW, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 53 | [2, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 54 | InstrItinData<IIC_IntTrapD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 55 | [2, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 56 | InstrItinData<IIC_BrB, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 57 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 58 | InstrItinData<IIC_BrCR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 59 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 60 | InstrItinData<IIC_BrMCR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 61 | [5, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 62 | InstrItinData<IIC_BrMCRX, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 63 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 64 | InstrItinData<IIC_LdStDCBA, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 65 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 66 | InstrItinData<IIC_LdStDCBF, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 67 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 68 | InstrItinData<IIC_LdStDCBI, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 69 | [1, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 70 | InstrItinData<IIC_LdStLoad, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 71 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 72 | InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 73 | [6, 8, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 74 | InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [A2_XU]>], |
| 75 | [6, 8, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 76 | InstrItinData<IIC_LdStLDU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 77 | [6, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 78 | InstrItinData<IIC_LdStLDUX, [InstrStage<1, [A2_XU]>], |
| 79 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 80 | InstrItinData<IIC_LdStStore, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 81 | [0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 82 | InstrItinData<IIC_LdStStoreUpd,[InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 83 | [2, 0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 84 | InstrItinData<IIC_LdStICBI, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 85 | [16, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 86 | InstrItinData<IIC_LdStSTFD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 87 | [0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 88 | InstrItinData<IIC_LdStSTFDU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 89 | [2, 0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 90 | InstrItinData<IIC_LdStLFD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 91 | [7, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 92 | InstrItinData<IIC_LdStLFDU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 93 | [7, 9, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 94 | InstrItinData<IIC_LdStLFDUX, [InstrStage<1, [A2_XU]>], |
| 95 | [7, 9, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 96 | InstrItinData<IIC_LdStLHA, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 97 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 98 | InstrItinData<IIC_LdStLHAU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 99 | [6, 8, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 100 | InstrItinData<IIC_LdStLHAUX, [InstrStage<1, [A2_XU]>], |
| 101 | [6, 8, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 102 | InstrItinData<IIC_LdStLWARX, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 103 | [82, 0, 0]>, // L2 latency |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 104 | InstrItinData<IIC_LdStSTD, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 105 | [0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 106 | InstrItinData<IIC_LdStSTDU, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 107 | [2, 0, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 108 | InstrItinData<IIC_LdStSTDUX, [InstrStage<1, [A2_XU]>], |
| 109 | [2, 0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 110 | InstrItinData<IIC_LdStSTDCX, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 111 | [82, 0, 0]>, // L2 latency |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 112 | InstrItinData<IIC_LdStSTWCX, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 113 | [82, 0, 0]>, // L2 latency |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 114 | InstrItinData<IIC_LdStSync, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 3e5a360 | 2013-11-27 23:26:09 +0000 | [diff] [blame] | 115 | [6]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 116 | InstrItinData<IIC_SprISYNC, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 3e5a360 | 2013-11-27 23:26:09 +0000 | [diff] [blame] | 117 | [16]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 118 | InstrItinData<IIC_SprMTMSR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 119 | [16, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 120 | InstrItinData<IIC_SprMFCR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 121 | [6, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 122 | InstrItinData<IIC_SprMFCRF, [InstrStage<1, [A2_XU]>], |
| 123 | [1, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 124 | InstrItinData<IIC_SprMFMSR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 125 | [4, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 126 | InstrItinData<IIC_SprMFSPR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 127 | [6, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 128 | InstrItinData<IIC_SprMFTB, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 129 | [4, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 130 | InstrItinData<IIC_SprMTSPR, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 131 | [6, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 132 | InstrItinData<IIC_SprRFI, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 3e5a360 | 2013-11-27 23:26:09 +0000 | [diff] [blame] | 133 | [16]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 134 | InstrItinData<IIC_SprSC, [InstrStage<1, [A2_XU]>], |
Hal Finkel | 3e5a360 | 2013-11-27 23:26:09 +0000 | [diff] [blame] | 135 | [16]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 136 | InstrItinData<IIC_FPGeneral, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 137 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 138 | InstrItinData<IIC_FPAddSub, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 139 | [6, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 140 | InstrItinData<IIC_FPCompare, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 141 | [5, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 142 | InstrItinData<IIC_FPDivD, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 143 | [72, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 144 | InstrItinData<IIC_FPDivS, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 145 | [59, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 146 | InstrItinData<IIC_FPSqrtD, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 147 | [69, 0, 0]>, |
Hal Finkel | 46402a4 | 2013-11-30 20:41:13 +0000 | [diff] [blame] | 148 | InstrItinData<IIC_FPSqrtS, [InstrStage<1, [A2_FU]>], |
| 149 | [65, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 150 | InstrItinData<IIC_FPFused, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 151 | [6, 0, 0, 0]>, |
Hal Finkel | 92720ab | 2013-11-28 06:05:59 +0000 | [diff] [blame] | 152 | InstrItinData<IIC_FPRes, [InstrStage<1, [A2_FU]>], |
Hal Finkel | 1df3205 | 2013-11-29 07:04:59 +0000 | [diff] [blame] | 153 | [6, 0]> |
Hal Finkel | 9f9f892 | 2012-04-01 19:22:40 +0000 | [diff] [blame] | 154 | ]>; |
Hal Finkel | 5fde1b0 | 2013-04-05 05:34:08 +0000 | [diff] [blame] | 155 | |
| 156 | // ===---------------------------------------------------------------------===// |
| 157 | // A2 machine model for scheduling and other instruction cost heuristics. |
| 158 | |
| 159 | def PPCA2Model : SchedMachineModel { |
Hal Finkel | 8081ae9 | 2013-11-27 03:12:56 +0000 | [diff] [blame] | 160 | let IssueWidth = 1; // 1 instruction is dispatched per cycle. |
Hal Finkel | 5fde1b0 | 2013-04-05 05:34:08 +0000 | [diff] [blame] | 161 | let MinLatency = -1; // OperandCycles are interpreted as MinLatency. |
| 162 | let LoadLatency = 6; // Optimistic load latency assuming bypass. |
| 163 | // This is overriden by OperandCycles if the |
| 164 | // Itineraries are queried instead. |
Hal Finkel | 85526f2 | 2013-04-05 23:28:58 +0000 | [diff] [blame] | 165 | let MispredictPenalty = 13; |
Hal Finkel | 5fde1b0 | 2013-04-05 05:34:08 +0000 | [diff] [blame] | 166 | |
| 167 | let Itineraries = PPCA2Itineraries; |
| 168 | } |
| 169 | |