Extend special_memory_constraint.
authorliuhongt <hongtao.liu@intel.com>
Sat, 26 Sep 2020 07:08:32 +0000 (15:08 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 22 Oct 2020 02:28:56 +0000 (10:28 +0800)
commit4de7b010038933dd6ca96bf186ca49f243d0def6
treef6564cb47f71a34dfe28aa96dfc8f3e70b5a270d
parent76835dca95ab9f3f106a0db1e6152ad0740b38b3
Extend special_memory_constraint.

For operand with special_memory_constraint, there could be a wrapper
for memory_operand. Extract mem for operand for conditional judgement
like MEM_P, also for record_address_regs.

gcc/ChangeLog:

PR target/87767
* ira-costs.c (record_operand_costs): Extract memory operand
from recog_data.operand[i] for record_address_regs.
(record_reg_classes): Extract memory operand from OP for
conditional judgement MEM_P.
* ira.c (ira_setup_alts): Ditto.
* lra-constraints.c (extract_mem_from_operand): New function.
(satisfies_memory_constraint_p): Extract memory operand from
OP for decompose_mem_address, return false when there's no
memory operand inside OP.
(process_alt_operands): Remove MEM_P (op) since it would be
judged in satisfies_memory_constraint_p.
* recog.c (asm_operand_ok): Extract memory operand from OP for
judgement of memory_operand (OP, VOIDmode).
(constrain_operands): Don't unwrapper unary operator when
there's memory operand inside.
* rtl.h (extract_mem_from_operand): New decl.
gcc/ira-costs.c
gcc/ira.c
gcc/lra-constraints.c
gcc/recog.c
gcc/rtl.h