diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2018-03-15 20:31:25 +0000 |
---|---|---|
committer | Evandro Menezes <e.menezes@samsung.com> | 2018-03-15 20:31:25 +0000 |
commit | 5303f897d4a72643d0c957f2646753897d3b7793 (patch) | |
tree | ec1e7d88f19f662ad94545377d78e7fdf91ae76a /llvm/lib | |
parent | 1515e859c64062a81b02bc0ea9c4d5bf2a279e41 (diff) | |
download | bcm5719-llvm-5303f897d4a72643d0c957f2646753897d3b7793.tar.gz bcm5719-llvm-5303f897d4a72643d0c957f2646753897d3b7793.zip |
[AArch64] Adjust the cost model for Exynos M3
Add special case for rotate right.
llvm-svn: 327662
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64SchedExynosM3.td | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64SchedExynosM3.td b/llvm/lib/Target/AArch64/AArch64SchedExynosM3.td index 2ee8be3b684..1b89ea62d1c 100644 --- a/llvm/lib/Target/AArch64/AArch64SchedExynosM3.td +++ b/llvm/lib/Target/AArch64/AArch64SchedExynosM3.td @@ -110,6 +110,10 @@ def M3BranchLinkFastPred : SchedPredicate<[{MI->getOpcode() == AArch64::BLR && MI->getOperand(0).isReg() && MI->getOperand(0).getReg() != AArch64::LR}]>; def M3ResetFastPred : SchedPredicate<[{TII->isExynosResetFast(*MI)}]>; +def M3RotateFastPred : SchedPredicate<[{(MI->getOpcode() == AArch64::EXTRWrri || + MI->getOpcode() == AArch64::EXTRXrri) && + MI->getOperand(0).isReg() && MI->getOperand(1).isReg() && + MI->getOperand(0).getReg() == MI->getOperand(1).getReg()}]>; def M3ShiftLeftFastPred : SchedPredicate<[{TII->isExynosShiftLeftFast(*MI)}]>; //===----------------------------------------------------------------------===// @@ -136,6 +140,8 @@ def M3WriteC2 : SchedWriteRes<[M3UnitC]> { let Latency = 2; } def M3WriteAX : SchedWriteVariant<[SchedVar<M3ResetFastPred, [M3WriteZ0]>, SchedVar<M3ShiftLeftFastPred, [M3WriteA1]>, SchedVar<NoSchedPred, [M3WriteAA]>]>; +def M3WriteAY : SchedWriteVariant<[SchedVar<M3RotateFastPred, [M3WriteA1]>, + SchedVar<NoSchedPred, [M3WriteAA]>]>; def M3WriteB1 : SchedWriteRes<[M3UnitB]> { let Latency = 1; } def M3WriteBX : SchedWriteVariant<[SchedVar<M3BranchLinkFastPred, [M3WriteAB]>, @@ -500,6 +506,7 @@ def : InstRW<[M3WriteZ0], (instregex "^MOV[NZ][WX]i")>; // Divide and multiply instructions. // Miscellaneous instructions. +def : InstRW<[M3WriteAY], (instregex "^EXTR[WX]rri")>; // Load instructions. def : InstRW<[M3WriteLD, |