case PARALLEL: for (i = 0, j = 0; j < XVECLEN (x, 0); j++) { change_arg_use_in_operand (XVECEXP (x, 0, j), orig, new, size);   if (check_used_flag (XVECEXP (x, 0, j))) { emit_insn (XVECEXP (x, 0, j)); XVECEXP (x, 0, j) = NULL; } else XVECEXP (x, 0, i++) = XVECEXP (x, 0, j); } PUT_NUM_ELEM (XVEC (x, 0), i); return;
change_arg_use_in_operand (x, orig, new, size)     rtx x, orig, *new;     HOST_WIDE_INT size;{  register enum rtx_code code;  int i, j;  HOST_WIDE_INT offset;  const char *fmt;  if (x == 0)    return;  code = GET_CODE (x);  switch (code)    {    case CONST_INT:    case CONST_DOUBLE:    case CONST:    case SYMBOL_REF:    case CODE_LABEL:    case PC:    case CC0:    case ASM_INPUT:    case ADDR_VEC:    case ADDR_DIFF_VEC:    case RETURN:    case REG:    case ADDRESSOF:      return;    case MEM:      /* Handle special case of MEM (incoming_args)  */      if (GET_CODE (orig) == MEM	  && XEXP (x, 0) == virtual_incoming_args_rtx)	{	  offset = 0;	  /* the operand related to the sweep variable */	  if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&	      offset < AUTO_OFFSET(XEXP (orig, 0)) + size) {	    offset = AUTO_OFFSET(XEXP (*new, 0))	      + (offset - AUTO_OFFSET(XEXP (orig, 0)));	    XEXP (x, 0) = plus_constant (virtual_stack_vars_rtx, offset);	    XEXP (x, 0)->used = 1;	    return;	  }	}      break;          case PLUS:      /* Handle special case of frame register plus constant.  */      if (GET_CODE (orig) == MEM	  && XEXP (x, 0) == virtual_incoming_args_rtx	  && CONSTANT_P (XEXP (x, 1))	  && ! x->used)	{	  offset = AUTO_OFFSET(x);	  /* the operand related to the sweep variable */	  if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&	      offset < AUTO_OFFSET(XEXP (orig, 0)) + size) {	    offset = AUTO_OFFSET(XEXP (*new, 0))	      + (offset - AUTO_OFFSET(XEXP (orig, 0)));	    XEXP (x, 0) = virtual_stack_vars_rtx;	    XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset);	    x->used = 1;	    return;	  }	  /*	    process further subtree:	    Example:  (plus:SI (mem/s:SI (plus:SI (reg:SI 17) (const_int 8)))	    (const_int 5))	  */	}      break;    case SET:      /* Handle special case of "set (REG or MEM) (incoming_args)".	 It means that the the address of the 1st argument is stored. */      if (GET_CODE (orig) == MEM	  && XEXP (x, 1) == virtual_incoming_args_rtx)	{	  offset = 0;	  /* the operand related to the sweep variable */	  if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&	      offset < AUTO_OFFSET(XEXP (orig, 0)) + size) {	    offset = AUTO_OFFSET(XEXP (*new, 0))	      + (offset - AUTO_OFFSET(XEXP (orig, 0)));	    XEXP (x, 1) = force_operand (plus_constant (virtual_stack_vars_rtx,							offset), NULL_RTX);	    XEXP (x, 1)->used = 1;	    return;	  }	}      break;    case CALL_PLACEHOLDER:      for (i = 0; i < 3; i++)	{	  rtx seq = XEXP (x, i);	  if (seq)	    {	      push_to_sequence (seq);	      change_arg_use_of_insns_2 (XEXP (x, i), orig, new, size);	      XEXP (x, i) = get_insns ();	      end_sequence ();	    }	}      break;    default:      break;    }  /* Scan all subexpressions.  */  fmt = GET_RTX_FORMAT (code);  for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)    if (*fmt == 'e')      {	if (XEXP (x, i) == orig)	  {	    if (*new == 0) *new = gen_reg_rtx (GET_MODE (orig));	    XEXP (x, i) = *new;	    continue;	  }	change_arg_use_in_operand (XEXP (x, i), orig, new, size);      }    else if (*fmt == 'E')      for (j = 0; j < XVECLEN (x, i); j++)	{	  if (XVECEXP (x, i, j) == orig)	    {	      if (*new == 0) *new = gen_reg_rtx (GET_MODE (orig));	      XVECEXP (x, i, j) = *new;	      continue;	    }	  change_arg_use_in_operand (XVECEXP (x, i, j), orig, new, size);	}}   