diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2016-01-29 18:47:17 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2016-01-29 18:47:17 +0000 |
commit | 9eb1ca69e1ebd98cc8e401b5ae271b988e3ab84a (patch) | |
tree | f72efae70813e3fdbe36d5a4563ab3bf55869ca0 /gcc/lra-constraints.c | |
parent | 6bbacdb54436ea71d77f70f625c4a97f5c245329 (diff) | |
download | gcc-9eb1ca69e1ebd98cc8e401b5ae271b988e3ab84a.zip gcc-9eb1ca69e1ebd98cc8e401b5ae271b988e3ab84a.tar.gz gcc-9eb1ca69e1ebd98cc8e401b5ae271b988e3ab84a.tar.bz2 |
re PR target/69299 (-mavx performance degradation with r232088)
2016-01-29 Vladimir Makarov <vmakarov@redhat.com>
PR target/69299
* config/i386/constraints.md (Bm): Describe as special memory
constraint.
* doc/md.texi (DEFINE_SPECIAL_MEMORY_CONSTRAINT): Describe it.
* genoutput.c (main): Process DEFINE_SPECIAL_MEMORY_CONSTRAINT.
* genpreds.c (struct constraint_data): Add is_special_memory.
(have_special_memory_constraints, special_memory_start): New
static vars.
(special_memory_end): Ditto.
(add_constraint): Add new arg is_special_memory. Add code to
process its true value. Update have_special_memory_constraints.
(process_define_constraint): Pass the new arg.
(process_define_register_constraint): Ditto.
(choose_enum_order): Process special memory.
(write_tm_preds_h): Generate enum const CT_SPECIAL_MEMORY and
function insn_extra_special_memory_constraint.
(main): Process DEFINE_SPECIAL_MEMORY_CONSTRAINT.
* gensupport.c (process_rtx): Process
DEFINE_SPECIAL_MEMORY_CONSTRAINT.
* ira-costs.c (record_reg_classes): Process CT_SPECIAL_MEMORY.
* ira-lives.c (single_reg_class): Use
insn_extra_special_memory_constraint.
* ira.c (ira_setup_alts): Process CT_SPECIAL_MEMORY.
* lra-constraints.c (process_alt_operands): Ditto.
(curr_insn_transform): Use insn_extra_special_memory_constraint.
* recog.c (asm_operand_ok, preprocess_constraints): Process
CT_SPECIAL_MEMORY.
* reload.c (find_reloads): Ditto.
* rtl.def (DEFINE_SPECIFAL_MEMORY_CONSTRAINT): New.
* stmt.c (parse_input_constraint): Use
insn_extra_special_memory_constraint.
From-SVN: r232993
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index fb19416..9a7121f 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -400,7 +400,7 @@ valid_address_p (struct address_info *ad) } /* Return true if the eliminated form of memory reference OP satisfies - extra memory constraint CONSTRAINT. */ + extra (special) memory constraint CONSTRAINT. */ static bool satisfies_memory_constraint_p (rtx op, enum constraint_num constraint) { @@ -2038,6 +2038,14 @@ process_alt_operands (int only_alternative) if (constraint_satisfied_p (op, cn)) win = true; break; + + case CT_SPECIAL_MEMORY: + if (MEM_P (op) + && satisfies_memory_constraint_p (op, cn)) + win = true; + else if (spilled_pseudo_p (op)) + win = true; + break; } break; @@ -3701,7 +3709,8 @@ curr_insn_transform (bool check_only_p) constraint += CONSTRAINT_LEN (c, constraint)) { enum constraint_num cn = lookup_constraint (constraint); - if (insn_extra_memory_constraint (cn) + if ((insn_extra_memory_constraint (cn) + || insn_extra_special_memory_constraint (cn)) && satisfies_memory_constraint_p (tem, cn)) break; } |