From 0a5e4629010103c1999d2c36de3ebc35bac8c7f9 Mon Sep 17 00:00:00 2001 From: Evandro Menezes Date: Wed, 22 Nov 2017 22:48:50 +0000 Subject: [PATCH] [AArch64] Adjust the cost model for Exynos M1 and M2 Fix the modeling of some loads and stores. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318884 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64SchedM1.td | 29 ++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/Target/AArch64/AArch64SchedM1.td b/lib/Target/AArch64/AArch64SchedM1.td index 096f1e5c455..91b6ffcd708 100644 --- a/lib/Target/AArch64/AArch64SchedM1.td +++ b/lib/Target/AArch64/AArch64SchedM1.td @@ -101,18 +101,21 @@ def M1WriteL6 : SchedWriteRes<[M1UnitL]> { let Latency = 6; } def M1WriteLA : SchedWriteRes<[M1UnitL]> { let Latency = 6; let ResourceCycles = [2]; } def M1WriteLB : SchedWriteRes<[M1UnitL, - M1UnitA]> { let Latency = 5; + M1UnitA]> { let Latency = 4; let NumMicroOps = 2; } def M1WriteLC : SchedWriteRes<[M1UnitL, + M1UnitA]> { let Latency = 5; + let NumMicroOps = 2; } +def M1WriteLD : SchedWriteRes<[M1UnitL, M1UnitA]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [2]; } def M1WriteLH : SchedWriteRes<[]> { let Latency = 5; let NumMicroOps = 0; } def M1WriteLX : SchedWriteVariant<[SchedVar, - SchedVar]>; -def M1WriteLY : SchedWriteVariant<[SchedVar, SchedVar]>; +def M1WriteLY : SchedWriteVariant<[SchedVar, + SchedVar]>; def M1WriteS1 : SchedWriteRes<[M1UnitS]> { let Latency = 1; } def M1WriteS3 : SchedWriteRes<[M1UnitS]> { let Latency = 3; } @@ -124,7 +127,7 @@ def M1WriteSA : SchedWriteRes<[M1UnitS, let NumMicroOps = 2; } def M1WriteSB : SchedWriteRes<[M1UnitS, M1UnitFST, - M1UnitA]> { let Latency = 2; + M1UnitA]> { let Latency = 3; let NumMicroOps = 2; } def M1WriteSC : SchedWriteRes<[M1UnitS, M1UnitFST, @@ -136,10 +139,13 @@ def M1WriteSD : SchedWriteRes<[M1UnitS, M1UnitFST, M1UnitA]> { let Latency = 1; let NumMicroOps = 2; } +def M1WriteSE : SchedWriteRes<[M1UnitS, + M1UnitA]> { let Latency = 2; + let NumMicroOps = 2; } def M1WriteSX : SchedWriteVariant<[SchedVar, - SchedVar]>; + SchedVar]>; def M1WriteSY : SchedWriteVariant<[SchedVar, - SchedVar]>; + SchedVar]>; def M1ReadAdrBase : SchedReadVariant<[SchedVar, SchedVar]>; @@ -443,10 +449,9 @@ def : InstRW<[M1WriteAX], (instregex ".+r[sx](64)?$")>; // Miscellaneous instructions. // Load instructions. -def : InstRW<[WriteLD, +def : InstRW<[M1WriteLB, WriteLDHi, - WriteAdr, - M1WriteA1], (instregex "^LDP(SW|W|X)(post|pre)")>; + WriteAdr], (instregex "^LDP(SW|W|X)(post|pre)")>; def : InstRW<[M1WriteLX, ReadAdrBase], (instregex "^PRFMro[WX]")>; @@ -486,16 +491,16 @@ def : InstRW<[WriteVLD, def : InstRW<[WriteVLD], (instregex "^LDR[BDHSQ]ui")>; def : InstRW<[M1WriteLY, ReadAdrBase], (instregex "^LDR[BDHS]ro[WX]")>; -def : InstRW<[M1WriteLY, +def : InstRW<[M1WriteLD, ReadAdrBase], (instregex "^LDRQro[WX]")>; def : InstRW<[WriteVLD, M1WriteLH], (instregex "^LDN?P[DS]i")>; def : InstRW<[M1WriteLA, M1WriteLH], (instregex "^LDN?PQi")>; -def : InstRW<[M1WriteLB, +def : InstRW<[M1WriteLC, M1WriteLH, WriteAdr], (instregex "^LDP[DS](post|pre)")>; -def : InstRW<[M1WriteLC, +def : InstRW<[M1WriteLD, M1WriteLH, WriteAdr], (instregex "^LDPQ(post|pre)")>; -- 2.50.1