diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2017-02-01 02:54:42 +0000 |
---|---|---|
committer | Evandro Menezes <e.menezes@samsung.com> | 2017-02-01 02:54:42 +0000 |
commit | 455382ea220b0d432aec8b7153b6d8384f032000 (patch) | |
tree | 05aeafdd69da2b70844b5abc3d571b0b517424ab /llvm/lib/Target/AArch64/AArch64TargetMachine.cpp | |
parent | b21fb29c26f386be8dd44518d121219db97eda28 (diff) | |
download | bcm5719-llvm-455382ea220b0d432aec8b7153b6d8384f032000.tar.gz bcm5719-llvm-455382ea220b0d432aec8b7153b6d8384f032000.zip |
[AArch64] Add new target feature to fuse literal generation
This feature enables the fusion of such operations on Cortex A57, as
recommended in its Software Optimisation Guide, sections 4.14 and 4.15.
Differential revision: https://reviews.llvm.org/D28698
llvm-svn: 293739
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64TargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64TargetMachine.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp index 63a1acab4e4..3368c984187 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp @@ -330,6 +330,20 @@ public: return DAG; } + ScheduleDAGInstrs * + createPostMachineScheduler(MachineSchedContext *C) const override { + const AArch64Subtarget &ST = C->MF->getSubtarget<AArch64Subtarget>(); + if (ST.hasFuseLiterals()) { + // Run the Macro Fusion after RA again since literals are expanded from + // pseudos then (v. addPreSched2()). + ScheduleDAGMI *DAG = createGenericSchedPostRA(C); + DAG->addMutation(createAArch64MacroFusionDAGMutation()); + return DAG; + } + + return nullptr; + } + void addIRPasses() override; bool addPreISel() override; bool addInstSelector() override; |