summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2017-02-01 02:54:42 +0000
committerEvandro Menezes <e.menezes@samsung.com>2017-02-01 02:54:42 +0000
commit455382ea220b0d432aec8b7153b6d8384f032000 (patch)
tree05aeafdd69da2b70844b5abc3d571b0b517424ab /llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
parentb21fb29c26f386be8dd44518d121219db97eda28 (diff)
downloadbcm5719-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.cpp14
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;
OpenPOWER on IntegriCloud