diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2014-02-14 16:18:29 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2014-02-14 16:18:29 +0000 |
commit | 2ae577fdbd7e4f49e66feb0c225cee325bb1823e (patch) | |
tree | 4df19877f6be5d699d98f8fcd504677fd9ef0978 /gcc/lra-constraints.c | |
parent | efdf3f4df5f08c2e90098452001bf4f65fb2c78e (diff) | |
download | gcc-2ae577fdbd7e4f49e66feb0c225cee325bb1823e.zip gcc-2ae577fdbd7e4f49e66feb0c225cee325bb1823e.tar.gz gcc-2ae577fdbd7e4f49e66feb0c225cee325bb1823e.tar.bz2 |
re PR rtl-optimization/59535 (-Os code size regressions for Thumb1/Thumb2 with LRA)
2014-02-14 Vladimir Makarov <vmakarov@redhat.com>
Richard Earnshaw <rearnsha@arm.com>
PR rtl-optimization/59535
* lra-constraints.c (process_alt_operands): Encourage alternative
when unassigned pseudo class is superset of the alternative class.
(inherit_reload_reg): Don't inherit when optimizing for code size.
* config/arm/arm.h (MODE_BASE_REG_CLASS): Add version for LRA
returning CORE_REGS for anything but Thumb1 and BASE_REGS for
modes not less than 4 for Thumb1.
Co-Authored-By: Richard Earnshaw <rearnsha@arm.com>
From-SVN: r207787
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 5302321..d383138 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -2112,6 +2112,21 @@ process_alt_operands (int only_alternative) goto fail; } + /* If not assigned pseudo has a class which a subset of + required reg class, it is a less costly alternative + as the pseudo still can get a hard reg of necessary + class. */ + if (! no_regs_p && REG_P (op) && hard_regno[nop] < 0 + && (cl = get_reg_class (REGNO (op))) != NO_REGS + && ira_class_subset_p[this_alternative][cl]) + { + if (lra_dump_file != NULL) + fprintf + (lra_dump_file, + " %d Super set class reg: reject-=3\n", nop); + reject -= 3; + } + this_alternative_offmemok = offmemok; if (this_costly_alternative != NO_REGS) { @@ -4391,6 +4406,9 @@ static bool inherit_reload_reg (bool def_p, int original_regno, enum reg_class cl, rtx insn, rtx next_usage_insns) { + if (optimize_function_for_size_p (cfun)) + return false; + enum reg_class rclass = lra_get_allocno_class (original_regno); rtx original_reg = regno_reg_rtx[original_regno]; rtx new_reg, new_insns, usage_insn; |