diff options
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 2f02ae3..da354a7 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -6600,6 +6600,17 @@ choose_reload_regs (struct insn_chain *chain) && (rld[r].nregs == max_group_size || ! reg_classes_intersect_p (rld[r].rclass, group_class))) search_equiv = rld[r].in; + /* If this is an output reload from a simple move insn, look + if an equivalence for the input is available. */ + else if (inheritance && rld[r].in == 0 && rld[r].out != 0) + { + rtx set = single_set (insn); + + if (set + && rtx_equal_p (rld[r].out, SET_DEST (set)) + && CONSTANT_P (SET_SRC (set))) + search_equiv = SET_SRC (set); + } if (search_equiv) { |