/* Definitions for computing resource usage of specific insns.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
#include "config.h"
#include "system.h"
return;
if (GET_CODE (dest) == SUBREG)
- first_regno = subreg_regno (dest);
- else
- first_regno = REGNO (dest);
+ {
+ first_regno = subreg_regno (dest);
+ last_regno = first_regno + subreg_nregs (dest);
- last_regno = first_regno + hard_regno_nregs[first_regno][GET_MODE (dest)];
+ }
+ else
+ {
+ first_regno = REGNO (dest);
+ last_regno
+ = first_regno + hard_regno_nregs[first_regno][GET_MODE (dest)];
+ }
if (GET_CODE (x) == CLOBBER)
for (i = first_regno; i < last_regno; i++)
else
{
unsigned int regno = subreg_regno (x);
- unsigned int last_regno
- = regno + hard_regno_nregs[regno][GET_MODE (x)];
+ unsigned int last_regno = regno + subreg_nregs (x);
gcc_assert (last_regno <= FIRST_PSEUDO_REGISTER);
for (r = regno; r < last_regno; r++)
case SET:
/* Usually, the first operand of SET is set, not referenced. But
registers used to access memory are referenced. SET_DEST is
- also referenced if it is a ZERO_EXTRACT or SIGN_EXTRACT. */
+ also referenced if it is a ZERO_EXTRACT. */
mark_referenced_resources (SET_SRC (x), res, 0);
x = SET_DEST (x);
- if (GET_CODE (x) == SIGN_EXTRACT
- || GET_CODE (x) == ZERO_EXTRACT
+ if (GET_CODE (x) == ZERO_EXTRACT
|| GET_CODE (x) == STRICT_LOW_PART)
mark_referenced_resources (x, res, 0);
else if (GET_CODE (x) == SUBREG)
else
{
unsigned int regno = subreg_regno (x);
- unsigned int last_regno
- = regno + hard_regno_nregs[regno][GET_MODE (x)];
+ unsigned int last_regno = regno + subreg_nregs (x);
gcc_assert (last_regno <= FIRST_PSEUDO_REGISTER);
for (r = regno; r < last_regno; r++)
static bool
return_insn_p (rtx insn)
{
- if (GET_CODE (insn) == JUMP_INSN && GET_CODE (PATTERN (insn)) == RETURN)
+ if (JUMP_P (insn) && GET_CODE (PATTERN (insn)) == RETURN)
return true;
- if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE)
+ if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
return return_insn_p (XVECEXP (PATTERN (insn), 0, 0));
return false;
{
/* Allocate a place to put our results and chain it into the
hash table. */
- tinfo = xmalloc (sizeof (struct target_info));
+ tinfo = XNEW (struct target_info);
tinfo->uid = INSN_UID (target);
tinfo->block = b;
tinfo->next
TARGET. Otherwise, we must assume everything is live. */
if (b != -1)
{
- regset regs_live = BASIC_BLOCK (b)->global_live_at_start;
+ regset regs_live = BASIC_BLOCK (b)->il.rtl->global_live_at_start;
unsigned int j;
unsigned int regno;
rtx start_insn, stop_insn;
}
/* Allocate and initialize the tables used by mark_target_live_regs. */
- target_hash_table = xcalloc (TARGET_HASH_PRIME, sizeof (struct target_info *));
- bb_ticks = xcalloc (last_basic_block, sizeof (int));
+ target_hash_table = XCNEWVEC (struct target_info *, TARGET_HASH_PRIME);
+ bb_ticks = XCNEWVEC (int, last_basic_block);
}
\f
/* Free up the resources allocated to mark_target_live_regs (). This