summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2017-02-01 02:54:39 +0000
committerEvandro Menezes <e.menezes@samsung.com>2017-02-01 02:54:39 +0000
commitb21fb29c26f386be8dd44518d121219db97eda28 (patch)
tree288adb40e4c4627e9294bcb7712c510f416700a9 /llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
parent94edf029238d6e30d6946c7748b0edc785518607 (diff)
downloadbcm5719-llvm-b21fb29c26f386be8dd44518d121219db97eda28.tar.gz
bcm5719-llvm-b21fb29c26f386be8dd44518d121219db97eda28.zip
[AArch64] Add new subtarget feature to fuse AES crypto operations
This feature enables the fusion of such operations on Cortex A57, as recommended in its Software Optimisation Guide, section 4.13, and on Exynos M1. Differential revision: https://reviews.llvm.org/D28491 llvm-svn: 293738
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MacroFusion.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64MacroFusion.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
index c1adc862fed..f6d693262c3 100644
--- a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
@@ -116,6 +116,19 @@ static bool shouldScheduleAdjacent(const AArch64InstrInfo &TII,
return true;
}
+ if (ST.hasFuseAES())
+ // Fuse AES crypto operations.
+ switch(FirstOpcode) {
+ // AES encode.
+ case AArch64::AESErr:
+ return SecondOpcode == AArch64::AESMCrr ||
+ SecondOpcode == AArch64::INSTRUCTION_LIST_END;
+ // AES decode.
+ case AArch64::AESDrr:
+ return SecondOpcode == AArch64::AESIMCrr ||
+ SecondOpcode == AArch64::INSTRUCTION_LIST_END;
+ }
+
return false;
}
OpenPOWER on IntegriCloud