diff options
author | Teresa Johnson <tejohnson@google.com> | 2012-10-26 17:19:35 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@gcc.gnu.org> | 2012-10-26 17:19:35 +0000 |
commit | ca3f371f1246db1bf2b71abfdf844a08e0f5dc31 (patch) | |
tree | a2eaa87b296b3829f298c857f1de301049610cf6 /gcc/ree.c | |
parent | 8256d5ca7870ab4aa5f74b9cb9183393b1024d0b (diff) | |
download | gcc-ca3f371f1246db1bf2b71abfdf844a08e0f5dc31.zip gcc-ca3f371f1246db1bf2b71abfdf844a08e0f5dc31.tar.gz gcc-ca3f371f1246db1bf2b71abfdf844a08e0f5dc31.tar.bz2 |
Avoid conservative behavior in REE by allowing removal of redundant extends when...
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.
From-SVN: r192850
Diffstat (limited to 'gcc/ree.c')
-rw-r--r-- | gcc/ree.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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) { |