diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2025-09-02 15:58:26 -0700 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2025-09-02 15:58:26 -0700 |
commit | 071b4126c613881f4cb25b4e5c39032964827f88 (patch) | |
tree | 7ed805786566918630d1d617b1ed8f7310f5fd8e /gcc/ira-conflicts.cc | |
parent | 845d23f3ea08ba873197c275a8857eee7edad996 (diff) | |
parent | caa1c2f42691d68af4d894a5c3e700ecd2dba080 (diff) | |
download | gcc-devel/gfortran-test.zip gcc-devel/gfortran-test.tar.gz gcc-devel/gfortran-test.tar.bz2 |
Merge branch 'master' into gfortran-testdevel/gfortran-test
Diffstat (limited to 'gcc/ira-conflicts.cc')
-rw-r--r-- | gcc/ira-conflicts.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ira-conflicts.cc b/gcc/ira-conflicts.cc index d8f7c1e..e9ab16a 100644 --- a/gcc/ira-conflicts.cc +++ b/gcc/ira-conflicts.cc @@ -448,7 +448,7 @@ process_reg_shuffles (rtx_insn *insn, rtx reg, int op_num, int freq, static void add_insn_allocno_copies (rtx_insn *insn) { - rtx set, operand, dup; + rtx set = single_set (insn), operand, dup; bool bound_p[MAX_RECOG_OPERANDS]; int i, n, freq; alternative_mask alts; @@ -456,7 +456,15 @@ add_insn_allocno_copies (rtx_insn *insn) freq = REG_FREQ_FROM_BB (BLOCK_FOR_INSN (insn)); if (freq == 0) freq = 1; - if ((set = single_set (insn)) != NULL_RTX + + /* Tie output register operands of two consecutive single_sets + marked as a fused pair. */ + if (single_output_fused_pair_p (insn)) + process_regs_for_copy (SET_DEST (set), + SET_DEST (single_set (prev_nonnote_nondebug_insn (insn))), + true, NULL, freq); + + if (set != NULL_RTX && REG_SUBREG_P (SET_DEST (set)) && REG_SUBREG_P (SET_SRC (set)) && ! side_effects_p (set) && find_reg_note (insn, REG_DEAD, |