diff options
| author | Matthias Braun <matze@braunis.de> | 2018-09-19 20:50:51 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2018-09-19 20:50:51 +0000 |
| commit | 28d6a4ac9a91a6f17bfa5e900bd73b829bb00585 (patch) | |
| tree | a1baea5fa8b592bd8d21408ea2dc59cb0143dae7 /llvm/lib/Target/AArch64/AArch64MacroFusion.cpp | |
| parent | 3136e4203920322143dd7b8f423fb8776dcb506b (diff) | |
| download | bcm5719-llvm-28d6a4ac9a91a6f17bfa5e900bd73b829bb00585.tar.gz bcm5719-llvm-28d6a4ac9a91a6f17bfa5e900bd73b829bb00585.zip | |
AArch64: Add FuseCryptoEOR fusion rules
There's some additional rules available on newer apple CPUs.
rdar://41235346
llvm-svn: 342590
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MacroFusion.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64MacroFusion.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp index 9ec0ad34e92..43ebcfd9893 100644 --- a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp +++ b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp @@ -123,6 +123,24 @@ static bool isAESPair(unsigned FirstOpcode, unsigned SecondOpcode) { return false; } +/// AESE/AESD/PMULL + EOR. +static bool isCryptoEORPair(unsigned FirstOpcode, unsigned SecondOpcode) { + if (SecondOpcode != AArch64::EORv16i8) + return false; + + switch (FirstOpcode) { + case AArch64::INSTRUCTION_LIST_END: + case AArch64::AESErr: + case AArch64::AESDrr: + case AArch64::PMULLv16i8: + case AArch64::PMULLv8i8: + case AArch64::PMULLv1i64: + case AArch64::PMULLv2i64: + return true; + } + return false; +} + /// Literal generation. static bool isLiteralsPair(unsigned FirstOpcode, unsigned SecondOpcode, const MachineInstr *FirstMI, @@ -258,6 +276,8 @@ static bool shouldScheduleAdjacent(const TargetInstrInfo &TII, return true; if (ST.hasFuseAES() && isAESPair(FirstOpc, SecondOpc)) return true; + if (ST.hasFuseCryptoEOR() && isCryptoEORPair(FirstOpc, SecondOpc)) + return true; if (ST.hasFuseLiterals() && isLiteralsPair(FirstOpc, SecondOpc, FirstMI, SecondMI)) return true; |

