aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira-conflicts.cc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2025-09-02 15:58:26 -0700
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2025-09-02 15:58:26 -0700
commit071b4126c613881f4cb25b4e5c39032964827f88 (patch)
tree7ed805786566918630d1d617b1ed8f7310f5fd8e /gcc/ira-conflicts.cc
parent845d23f3ea08ba873197c275a8857eee7edad996 (diff)
parentcaa1c2f42691d68af4d894a5c3e700ecd2dba080 (diff)
downloadgcc-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.cc12
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,