diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64SchedM1.td | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64SchedM1.td b/llvm/lib/Target/AArch64/AArch64SchedM1.td index 8a8c6d14233..1f909d493ce 100644 --- a/llvm/lib/Target/AArch64/AArch64SchedM1.td +++ b/llvm/lib/Target/AArch64/AArch64SchedM1.td @@ -37,21 +37,18 @@ def M1UnitB : ProcResource<2>; // Branch def M1UnitL : ProcResource<1>; // Load def M1UnitS : ProcResource<1>; // Store def M1PipeF0 : ProcResource<1>; // FP #0 -def M1PipeF1 : ProcResource<1>; // FP #1 - let Super = M1PipeF0 in { def M1UnitFMAC : ProcResource<1>; // FP multiplication - def M1UnitFCVT : ProcResource<1>; // FP conversion def M1UnitNAL0 : ProcResource<1>; // Simple vector def M1UnitNMISC : ProcResource<1>; // Miscellanea + def M1UnitFCVT : ProcResource<1>; // FP conversion def M1UnitNCRYPT : ProcResource<1>; // Cryptographic } - +def M1PipeF1 : ProcResource<1>; // FP #1 let Super = M1PipeF1 in { def M1UnitFADD : ProcResource<1>; // Simple FP - let BufferSize = 1 in - def M1UnitFVAR : ProcResource<1>; // FP division & square root (serialized) def M1UnitNAL1 : ProcResource<1>; // Simple vector + def M1UnitFVAR : ProcResource<1>; // FP division & square root (serialized) def M1UnitFST : ProcResource<1>; // FP store } @@ -71,7 +68,6 @@ let SchedModel = ExynosM1Model in { // TODO: Non-conditional direct branches take zero cycles and units. def : WriteRes<WriteBr, [M1UnitB]> { let Latency = 1; } def : WriteRes<WriteBrReg, [M1UnitC]> { let Latency = 1; } -// TODO: Branch and link is much different. // Arithmetic and logical integer instructions. def : WriteRes<WriteI, [M1UnitALU]> { let Latency = 1; } @@ -120,16 +116,14 @@ def : WriteRes<WriteSTX, [M1UnitS]> { let Latency = 1; } def : WriteRes<WriteF, [M1UnitFADD]> { let Latency = 3; } // TODO: FCCMP is much different. def : WriteRes<WriteFCmp, [M1UnitNMISC]> { let Latency = 4; } -// TODO: DP takes longer. -def : WriteRes<WriteFDiv, [M1UnitFVAR]> { let Latency = 15; } -// TODO: MACC takes longer. +def : WriteRes<WriteFDiv, [M1UnitFVAR]> { let Latency = 15; + let ResourceCycles = [15]; } def : WriteRes<WriteFMul, [M1UnitFMAC]> { let Latency = 4; } // FP miscellaneous instructions. // TODO: Conversion between register files is much different. def : WriteRes<WriteFCvt, [M1UnitFCVT]> { let Latency = 3; } def : WriteRes<WriteFImm, [M1UnitNALU]> { let Latency = 1; } -// TODO: Copy from FPR to GPR is much different. def : WriteRes<WriteFCopy, [M1UnitS]> { let Latency = 4; } // FP load instructions. @@ -141,7 +135,6 @@ def : WriteRes<WriteVLD, [M1UnitL]> { let Latency = 5; } def : WriteRes<WriteVST, [M1UnitS, M1UnitFST]> { let Latency = 1; } // ASIMD FP instructions. -// TODO: Other operations are much different. def : WriteRes<WriteV, [M1UnitFADD]> { let Latency = 3; } // Other miscellaneous instructions. @@ -211,8 +204,10 @@ def M1WriteFCVT3 : SchedWriteRes<[M1UnitFCVT]> { let Latency = 3; } def M1WriteFCVT4 : SchedWriteRes<[M1UnitFCVT]> { let Latency = 4; } def M1WriteFMAC4 : SchedWriteRes<[M1UnitFMAC]> { let Latency = 4; } def M1WriteFMAC5 : SchedWriteRes<[M1UnitFMAC]> { let Latency = 5; } -def M1WriteFVAR15 : SchedWriteRes<[M1UnitFVAR]> { let Latency = 15; } -def M1WriteFVAR23 : SchedWriteRes<[M1UnitFVAR]> { let Latency = 23; } +def M1WriteFVAR15 : SchedWriteRes<[M1UnitFVAR]> { let Latency = 15; + let ResourceCycles = [15]; } +def M1WriteFVAR23 : SchedWriteRes<[M1UnitFVAR]> { let Latency = 23; + let ResourceCycles = [23]; } def M1WriteNALU1 : SchedWriteRes<[M1UnitNALU]> { let Latency = 1; } def M1WriteNALU2 : SchedWriteRes<[M1UnitNALU]> { let Latency = 2; } def M1WriteNAL11 : SchedWriteRes<[M1UnitNAL1]> { let Latency = 1; } |

