diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-12-20 09:23:42 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-12-20 09:23:42 +0100 |
commit | 3439487f01f3e563c7521b4cc86409fb9797f990 (patch) | |
tree | bc4059261cfd3ca4ebf80ef5ba59e9f60804cd68 /gcc/config | |
parent | 99675d5c4581c5ac01118ab64785fde1f7f25183 (diff) | |
download | gcc-3439487f01f3e563c7521b4cc86409fb9797f990.zip gcc-3439487f01f3e563c7521b4cc86409fb9797f990.tar.gz gcc-3439487f01f3e563c7521b4cc86409fb9797f990.tar.bz2 |
re PR target/92841 (Optimize -fstack-protector-strong code generation a bit)
PR target/92841
* config/i386/i386.md (*stack_protect_set_3): For pic_32bit_operand
always use lea{q}, no matter what value which_alternative has.
* gcc.target/i386/pr92841-2.c: New test.
From-SVN: r279633
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.md | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b0176c8..8844a70 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -19863,12 +19863,13 @@ { output_asm_insn ("mov{q}\t{%3, %1|%1, %3}", operands); output_asm_insn ("mov{q}\t{%1, %0|%0, %1}", operands); - if (which_alternative == 0) + if (pic_32bit_operand (operands[2], DImode)) + return "lea{q}\t{%E2, %1|%1, %E2}"; + else if (which_alternative == 0) return "mov{l}\t{%k2, %k1|%k1, %k2}"; else if (which_alternative == 2) return "movabs{q}\t{%2, %1|%1, %2}"; - else if (pic_32bit_operand (operands[2], DImode) - || ix86_use_lea_for_mov (insn, operands + 1)) + else if (ix86_use_lea_for_mov (insn, operands + 1)) return "lea{q}\t{%E2, %1|%1, %E2}"; else return "mov{q}\t{%2, %1|%1, %2}"; |