Enable instruction fusion of dependent AESE; AESMC and AESD; AESIMC pairs.
authorwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Feb 2016 12:52:23 +0000 (12:52 +0000)
committerwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Feb 2016 12:52:23 +0000 (12:52 +0000)
commitf367ec4c83dc8e5ad8b0eb7a10b3c78849987eb1
tree4c879ecb760ddc8f8f42a294ede6907a665ed74a
parent79f1ed25e6b1eab77813761f84bec65c58446d2e
Enable instruction fusion of dependent AESE; AESMC and AESD; AESIMC pairs.
This can give up to 2x speedup on many AArch64 implementations. Also model
the crypto instructions on Cortex-A57 according to the Optimization Guide.

    gcc/
        * config/aarch64/aarch64.c (cortexa53_tunings): Enable AES fusion.
        (cortexa57_tunings): Likewise.
        (cortexa72_tunings): Likewise.
        (arch_macro_fusion_pair_p): Add support for AES fusion.
        * config/aarch64/aarch64-fusion-pairs.def: Add AES_AESMC entry.
        * config/arm/aarch-common.c (aarch_crypto_can_dual_issue):
        Allow virtual registers before reload so early scheduling works.
        * config/arm/cortex-a57.md (cortex_a57_crypto_simple): Use
        correct latency and pipeline.
        (cortex_a57_crypto_complex): Likewise.
        (cortex_a57_crypto_xor): Likewise.
        (define_bypass): Add AES bypass.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233268 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64-fusion-pairs.def
gcc/config/aarch64/aarch64.c
gcc/config/arm/aarch-common.c
gcc/config/arm/cortex-a57.md