diff options
author | tejohnson <tejohnson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-26 17:19:35 +0000 |
---|---|---|
committer | tejohnson <tejohnson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-26 17:19:35 +0000 |
commit | 97b533dde527c439a14d09b921a1d22b97bed403 (patch) | |
tree | a2eaa87b296b3829f298c857f1de301049610cf6 /gcc/ree.c | |
parent | d94ff7ce0dbed747e8e50a0502f2d28fec177df9 (diff) | |
download | gcc-97b533dde527c439a14d09b921a1d22b97bed403.tar.gz |
Avoid conservative behavior in REE by allowing removal of redundant extends
when the def feeds another extend with a different mode. This works because
in merge_def_and_ext only calls combine_set_extension if the candidate for
removal has a wider mode than the def extend's mode, otherwise the def extend
mode is preserved. In combine_set_extension the def is modified to use the
wider candidate's mode.
2012-10-26 Teresa Johnson <tejohnson@google.com>
* ree.c (add_removable_extension): Remove unnecessary
mode check with other extension.
* testsuite/gcc.c-torture/execute/20111227-2.c: New test.
* testsuite/gcc.c-torture/execute/20111227-3.c: Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192850 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ree.c')
-rw-r--r-- | gcc/ree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/ree.c b/gcc/ree.c index 167efa3fe1d..a2ede97b72e 100644 --- a/gcc/ree.c +++ b/gcc/ree.c @@ -803,7 +803,7 @@ add_removable_extension (const_rtx expr, rtx insn, for (def = defs; def; def = def->next) if ((idx = def_map[INSN_UID(DF_REF_INSN (def->ref))]) && (cand = &VEC_index (ext_cand, *insn_list, idx - 1)) - && (cand->code != code || cand->mode != mode)) + && cand->code != code) { if (dump_file) { |