diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2013-12-16 18:24:54 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2013-12-16 18:24:54 +0000 |
commit | 91c5ee5b4ac9c85b6cbf596dc7917910b0d7b1b3 (patch) | |
tree | 0b6dfb23c7b9928b9e9fac67fc5ef9b3e1d8ae3f /gcc/lra.c | |
parent | 7670d795d5fe6685c133a43ce15f5842c1d6aa25 (diff) | |
download | gcc-91c5ee5b4ac9c85b6cbf596dc7917910b0d7b1b3.zip gcc-91c5ee5b4ac9c85b6cbf596dc7917910b0d7b1b3.tar.gz gcc-91c5ee5b4ac9c85b6cbf596dc7917910b0d7b1b3.tar.bz2 |
re PR rtl-optimization/59466 (Slow code generation by LRA for memory addresses on PPC)
2013-12-16 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/59466
* emit-rtl.c (change_address_1): Don't validate address for LRA.
* recog.c (general_operand): Accept any memory for LRA.
* lra.c (lra_set_insn_recog_data): Add an assert.
From-SVN: r206023
Diffstat (limited to 'gcc/lra.c')
-rw-r--r-- | gcc/lra.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -1072,9 +1072,16 @@ lra_set_insn_recog_data (rtx insn) nop = asm_noperands (PATTERN (insn)); data->operand_loc = data->dup_loc = NULL; if (nop < 0) - /* Its is a special insn like USE or CLOBBER. */ - data->insn_static_data = insn_static_data - = get_static_insn_data (-1, 0, 0, 1); + { + /* Its is a special insn like USE or CLOBBER. We should + recognize any regular insn otherwise LRA can do nothing + with this insn. */ + gcc_assert (GET_CODE (PATTERN (insn)) == USE + || GET_CODE (PATTERN (insn)) == CLOBBER + || GET_CODE (PATTERN (insn)) == ASM_INPUT); + data->insn_static_data = insn_static_data + = get_static_insn_data (-1, 0, 0, 1); + } else { /* expand_asm_operands makes sure there aren't too many |