diff options
| author | Evandro Menezes <e.menezes@samsung.com> | 2016-08-16 20:35:01 +0000 |
|---|---|---|
| committer | Evandro Menezes <e.menezes@samsung.com> | 2016-08-16 20:35:01 +0000 |
| commit | 5a5b8dcd323059350f0659891b217f8156da7aab (patch) | |
| tree | 83341a27f6c13622bfd76bf315751da69ec1627d /llvm/lib/Target | |
| parent | d03aff2e11c5407a2bfdf712e8a697db013fde3f (diff) | |
| download | bcm5719-llvm-5a5b8dcd323059350f0659891b217f8156da7aab.tar.gz bcm5719-llvm-5a5b8dcd323059350f0659891b217f8156da7aab.zip | |
[AArch64] Adjust the scheduling model for Exynos M1.
Refine the model for the FP division unit.
llvm-svn: 278846
Diffstat (limited to 'llvm/lib/Target')
| -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; } |

