View | Details | Return to bug 97417 | Differences between
and this patch

Collapse All | Expand All

(-)a/home/levy/Desktop/Compare/riscv-gnu-toolchain/riscv-gcc/gcc/combine.c (-2 / +15 lines)
Lines 2635-2640 is_just_move (rtx x) Link Here
2635
  return (GET_CODE (x) == SET && general_operand (SET_SRC (x), VOIDmode));
2635
  return (GET_CODE (x) == SET && general_operand (SET_SRC (x), VOIDmode));
2636
}
2636
}
2637
2637
2638
/* Return whether X is just a single set, 
2639
   with the source a sign/zero extend general_operand.  */
2640
static bool
2641
is_just_extend_move (rtx x)
2642
{
2643
  if (INSN_P (x))
2644
        x = PATTERN (x);
2645
  if(GET_CODE (x) == SET)
2646
  	    if (GET_CODE (SET_SRC (x)) == ZERO_EXTEND || GET_CODE (SET_SRC (x)) == SIGN_EXTEND)
2647
		    return (general_operand ((XEXP (SET_SRC (x), 0)), VOIDmode));
2648
  return (GET_CODE (x) == SET && general_operand (SET_SRC (x), VOIDmode));
2649
}
2650
2638
/* Callback function to count autoincs.  */
2651
/* Callback function to count autoincs.  */
2639
2652
2640
static int
2653
static int
Lines 3103-3110 try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, Link Here
3103
    }
3116
    }
3104
3117
3105
  /* Record whether i2 and i3 are trivial moves.  */
3118
  /* Record whether i2 and i3 are trivial moves.  */
3106
  i2_was_move = is_just_move (i2);
3119
  i2_was_move = is_just_move (i2) || is_just_extend_move(i2);
3107
  i3_was_move = is_just_move (i3);
3120
  i3_was_move = is_just_move (i3) || is_just_extend_move(i3);
3108
3121
3109
  /* Record whether I2DEST is used in I2SRC and similarly for the other
3122
  /* Record whether I2DEST is used in I2SRC and similarly for the other
3110
     cases.  Knowing this will help in register status updating below.  */
3123
     cases.  Knowing this will help in register status updating below.  */

Return to bug 97417