OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.c-torture/] [compile/] [20010518-1.c] - Diff between revs 149 and 154

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 149 Rev 154
/* This was cut down from reload1.c in May 2001, was observed to cause
/* This was cut down from reload1.c in May 2001, was observed to cause
   a bootstrap failure for powerpc-apple-darwin1.3.
   a bootstrap failure for powerpc-apple-darwin1.3.
 
 
   Copyright (C) 2001  Free Software Foundation.  */
   Copyright (C) 2001  Free Software Foundation.  */
 
 
enum insn_code
enum insn_code
{
{
  CODE_FOR_extendqidi2 = 3,
  CODE_FOR_extendqidi2 = 3,
  CODE_FOR_nothing = 870
  CODE_FOR_nothing = 870
};
};
 
 
struct rtx_def;
struct rtx_def;
 
 
enum machine_mode
enum machine_mode
{
{
  VOIDmode,
  VOIDmode,
  MAX_MACHINE_MODE
  MAX_MACHINE_MODE
};
};
 
 
typedef unsigned long long HARD_REG_ELT_TYPE;
typedef unsigned long long HARD_REG_ELT_TYPE;
typedef HARD_REG_ELT_TYPE HARD_REG_SET[((77 + (8 * 8) - 1) / (8 * 8))];
typedef HARD_REG_ELT_TYPE HARD_REG_SET[((77 + (8 * 8) - 1) / (8 * 8))];
 
 
enum rtx_code
enum rtx_code
{
{
  UNKNOWN,
  UNKNOWN,
  NIL,
  NIL,
  REG,
  REG,
  LAST_AND_UNUSED_RTX_CODE = 256
  LAST_AND_UNUSED_RTX_CODE = 256
};
};
 
 
typedef struct
typedef struct
{
{
  unsigned min_align:8;
  unsigned min_align:8;
  unsigned base_after_vec:1;
  unsigned base_after_vec:1;
  unsigned min_after_vec:1;
  unsigned min_after_vec:1;
  unsigned max_after_vec:1;
  unsigned max_after_vec:1;
  unsigned min_after_base:1;
  unsigned min_after_base:1;
  unsigned max_after_base:1;
  unsigned max_after_base:1;
  unsigned offset_unsigned:1;
  unsigned offset_unsigned:1;
  unsigned:2;
  unsigned:2;
  unsigned scale:8;
  unsigned scale:8;
}
}
addr_diff_vec_flags;
addr_diff_vec_flags;
typedef union rtunion_def
typedef union rtunion_def
{
{
  long long rtwint;
  long long rtwint;
  int rtint;
  int rtint;
  unsigned int rtuint;
  unsigned int rtuint;
  const char *rtstr;
  const char *rtstr;
  struct rtx_def *rtx;
  struct rtx_def *rtx;
  struct rtvec_def *rtvec;
  struct rtvec_def *rtvec;
  enum machine_mode rttype;
  enum machine_mode rttype;
  addr_diff_vec_flags rt_addr_diff_vec_flags;
  addr_diff_vec_flags rt_addr_diff_vec_flags;
  struct cselib_val_struct *rt_cselib;
  struct cselib_val_struct *rt_cselib;
  struct bitmap_head_def *rtbit;
  struct bitmap_head_def *rtbit;
  union tree_node *rttree;
  union tree_node *rttree;
  struct basic_block_def *bb;
  struct basic_block_def *bb;
}
}
rtunion;
rtunion;
typedef struct rtx_def
typedef struct rtx_def
{
{
  enum rtx_code code:16;
  enum rtx_code code:16;
  enum machine_mode mode:8;
  enum machine_mode mode:8;
  unsigned int jump:1;
  unsigned int jump:1;
  unsigned int call:1;
  unsigned int call:1;
  unsigned int unchanging:1;
  unsigned int unchanging:1;
  unsigned int volatil:1;
  unsigned int volatil:1;
  unsigned int in_struct:1;
  unsigned int in_struct:1;
  unsigned int used:1;
  unsigned int used:1;
  unsigned integrated:1;
  unsigned integrated:1;
  unsigned frame_related:1;
  unsigned frame_related:1;
  rtunion fld[1];
  rtunion fld[1];
}
}
 *rtx;
 *rtx;
 
 
enum reload_type
enum reload_type
{
{
  RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
  RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
  RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_INPADDR_ADDRESS,
  RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_INPADDR_ADDRESS,
  RELOAD_FOR_OUTPUT_ADDRESS, RELOAD_FOR_OUTADDR_ADDRESS,
  RELOAD_FOR_OUTPUT_ADDRESS, RELOAD_FOR_OUTADDR_ADDRESS,
  RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
  RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
  RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
  RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
};
};
 
 
struct reload
struct reload
{
{
  rtx in;
  rtx in;
  rtx out;
  rtx out;
  //  enum reg_class class;
  //  enum reg_class class;
  enum machine_mode inmode;
  enum machine_mode inmode;
  enum machine_mode outmode;
  enum machine_mode outmode;
  enum machine_mode mode;
  enum machine_mode mode;
  unsigned int nregs;
  unsigned int nregs;
  int inc;
  int inc;
  rtx in_reg;
  rtx in_reg;
  rtx out_reg;
  rtx out_reg;
  int regno;
  int regno;
  rtx reg_rtx;
  rtx reg_rtx;
  int opnum;
  int opnum;
  int secondary_in_reload;
  int secondary_in_reload;
  int secondary_out_reload;
  int secondary_out_reload;
  enum insn_code secondary_in_icode;
  enum insn_code secondary_in_icode;
  enum insn_code secondary_out_icode;
  enum insn_code secondary_out_icode;
  enum reload_type when_needed;
  enum reload_type when_needed;
  unsigned int optional:1;
  unsigned int optional:1;
  unsigned int nocombine:1;
  unsigned int nocombine:1;
  unsigned int secondary_p:1;
  unsigned int secondary_p:1;
  unsigned int nongroup:1;
  unsigned int nongroup:1;
};
};
 
 
struct insn_chain
struct insn_chain
{
{
  rtx insn;
  rtx insn;
};
};
 
 
extern int n_reloads;
extern int n_reloads;
static short reload_order[(2 * 10 * (2 + 1))];
static short reload_order[(2 * 10 * (2 + 1))];
int reload_spill_index[(2 * 10 * (2 + 1))];
int reload_spill_index[(2 * 10 * (2 + 1))];
extern struct reload rld[(2 * 10 * (2 + 1))];
extern struct reload rld[(2 * 10 * (2 + 1))];
static rtx *reg_last_reload_reg;
static rtx *reg_last_reload_reg;
static HARD_REG_SET reg_reloaded_valid;
static HARD_REG_SET reg_reloaded_valid;
static HARD_REG_SET reg_reloaded_dead;
static HARD_REG_SET reg_reloaded_dead;
static HARD_REG_SET reg_reloaded_died;
static HARD_REG_SET reg_reloaded_died;
static HARD_REG_SET reg_is_output_reload;
static HARD_REG_SET reg_is_output_reload;
extern const unsigned int mode_size[];
extern const unsigned int mode_size[];
extern int target_flags;
extern int target_flags;
 
 
static void
static void
emit_reload_insns (chain)
emit_reload_insns (chain)
     struct insn_chain *chain;
     struct insn_chain *chain;
{
{
  rtx insn = chain->insn;
  rtx insn = chain->insn;
  register int j;
  register int j;
  rtx following_insn = (((insn)->fld[2]).rtx);
  rtx following_insn = (((insn)->fld[2]).rtx);
  rtx before_insn = (((insn)->fld[1]).rtx);
  rtx before_insn = (((insn)->fld[1]).rtx);
 
 
  for (j = 0; j < n_reloads; j++)
  for (j = 0; j < n_reloads; j++)
    {
    {
      register int r = reload_order[j];
      register int r = reload_order[j];
      register int i = reload_spill_index[r];
      register int i = reload_spill_index[r];
 
 
        {
        {
          rtx out = (((enum rtx_code) (rld[r].out)->code) == REG ? rld[r].out : rld[r].out_reg);
          rtx out = (((enum rtx_code) (rld[r].out)->code) == REG ? rld[r].out : rld[r].out_reg);
          register int nregno = (((out)->fld[0]).rtuint);
          register int nregno = (((out)->fld[0]).rtuint);
 
 
          if (nregno >= 77)
          if (nregno >= 77)
            {
            {
              rtx src_reg, store_insn = (rtx) 0;
              rtx src_reg, store_insn = (rtx) 0;
 
 
              reg_last_reload_reg[nregno] = 0;
              reg_last_reload_reg[nregno] = 0;
              if (src_reg && ((enum rtx_code) (src_reg)->code) == REG && (((src_reg)->fld[0]).rtuint) < 77)
              if (src_reg && ((enum rtx_code) (src_reg)->code) == REG && (((src_reg)->fld[0]).rtuint) < 77)
                {
                {
                  int src_regno = (((src_reg)->fld[0]).rtuint);
                  int src_regno = (((src_reg)->fld[0]).rtuint);
                  int nr =
                  int nr =
                    (((src_regno) >= 32
                    (((src_regno) >= 32
                      && (src_regno) <=
                      && (src_regno) <=
                      63) ? (((mode_size[(int) (rld[r].mode)]) + 8 -
                      63) ? (((mode_size[(int) (rld[r].mode)]) + 8 -
                              1) / 8) : (((mode_size[(int) (rld[r].mode)]) +
                              1) / 8) : (((mode_size[(int) (rld[r].mode)]) +
                                          (!(target_flags & 0x00000020) ? 4 :
                                          (!(target_flags & 0x00000020) ? 4 :
                                           8) - 1) / (!(target_flags & 0x00000020) ? 4 : 8)));
                                           8) - 1) / (!(target_flags & 0x00000020) ? 4 : 8)));
                  rtx note = 0;
                  rtx note = 0;
 
 
                  while (nr-- > 0)
                  while (nr-- > 0)
                    {
                    {
                      ((reg_reloaded_dead)
                      ((reg_reloaded_dead)
                       [(src_regno + nr) / ((unsigned) (8 * 8))] &=
                       [(src_regno + nr) / ((unsigned) (8 * 8))] &=
                       ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8)))));
                       ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8)))));
                      ((reg_reloaded_valid)
                      ((reg_reloaded_valid)
                       [(src_regno + nr) / ((unsigned) (8 * 8))] |=
                       [(src_regno + nr) / ((unsigned) (8 * 8))] |=
                       ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8))));
                       ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8))));
                      ((reg_is_output_reload)
                      ((reg_is_output_reload)
                       [(src_regno + nr) / ((unsigned) (8 * 8))] |=
                       [(src_regno + nr) / ((unsigned) (8 * 8))] |=
                       ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8))));
                       ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 8))));
                      if (note)
                      if (note)
                        ((reg_reloaded_died)
                        ((reg_reloaded_died)
                         [(src_regno) / ((unsigned) (8 * 8))] |=
                         [(src_regno) / ((unsigned) (8 * 8))] |=
                         ((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 8))));
                         ((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 8))));
                      else
                      else
                        ((reg_reloaded_died)
                        ((reg_reloaded_died)
                         [(src_regno) / ((unsigned) (8 * 8))] &=
                         [(src_regno) / ((unsigned) (8 * 8))] &=
                         ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 8)))));
                         ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 8)))));
                    }
                    }
                  reg_last_reload_reg[nregno] = src_reg;
                  reg_last_reload_reg[nregno] = src_reg;
                }
                }
            }
            }
          else
          else
            {
            {
              int num_regs =
              int num_regs =
                (((nregno) >= 32
                (((nregno) >= 32
                  && (nregno) <=
                  && (nregno) <=
                  63)
                  63)
                 ? (((mode_size
                 ? (((mode_size
                      [(int) (((enum machine_mode) (rld[r].out)->mode))]) +
                      [(int) (((enum machine_mode) (rld[r].out)->mode))]) +
                     8 -
                     8 -
                     1) /
                     1) /
                    8)
                    8)
                 : (((mode_size
                 : (((mode_size
                      [(int) (((enum machine_mode) (rld[r].out)->mode))]) +
                      [(int) (((enum machine_mode) (rld[r].out)->mode))]) +
                     (!(target_flags & 0x00000020) ? 4 : 8) - 1) / (!(target_flags & 0x00000020) ? 4 : 8)));
                     (!(target_flags & 0x00000020) ? 4 : 8) - 1) / (!(target_flags & 0x00000020) ? 4 : 8)));
              while (num_regs-- > 0)
              while (num_regs-- > 0)
                reg_last_reload_reg[nregno + num_regs] = 0;
                reg_last_reload_reg[nregno + num_regs] = 0;
            }
            }
        }
        }
    }
    }
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.