This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Patch to constrain maximal number of tries for incomplete dfa descriptions.


> Ok, I'll make it when I get an approval for the patch for the main line.

Many thanks!

> > Could you add "PR bootstrap/10835" to the entry?
>
> Sure.

I've attached the testcase.

-- 
Eric Botcazou


2003-06-10  Eric Botcazou  <ebotcazou@libertysurf.fr>

        * gcc.dg/hypersp1.c: New test.
/* PR bootstrap/10835 */
/* { dg-do compile { target sparc*-*-* } } */
/* { dg-options "-O2 -mcpu=hypersparc" } */

/* This used to virtually hang in the scheduler because
   of a combinatory explosion due to an incomplete DFA
   scheduler description for HyperSPARC. */

struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;

enum machine_mode
{
  VOIDmode
};

struct location_s
{
  const char *file;
  int line;
};

typedef struct location_s location_t;

enum tree_code
{
  ERROR_MARK
};

enum built_in_class
{
  NOT_BUILT_IN = 0
};

enum built_in_function
{
  BUILT_IN_ALLOCA
};

struct tree_common
{
  tree chain;
  tree type;

  enum tree_code code : 8;

  unsigned side_effects_flag : 1;
  unsigned constant_flag : 1;
  unsigned addressable_flag : 1;
  unsigned volatile_flag : 1;
  unsigned readonly_flag : 1;
  unsigned unsigned_flag : 1;
  unsigned asm_written_flag: 1;
  unsigned unused_0 : 1;

  unsigned used_flag : 1;
  unsigned nothrow_flag : 1;
  unsigned static_flag : 1;
  unsigned public_flag : 1;
  unsigned private_flag : 1;
  unsigned protected_flag : 1;
  unsigned bounded_flag : 1;
  unsigned deprecated_flag : 1;

  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned unused_1 : 1;
};

struct tree_int_cst
{
  struct tree_common common;
  rtx rtl;

  struct tree_int_cst_lowhi {
    unsigned int low;
    int high;
  } int_cst;
};

struct tree_real_cst
{
  struct tree_common common;
  rtx rtl;
  struct real_value * real_cst_ptr;
};

struct tree_string
{
  struct tree_common common;
  rtx rtl;
  int length;
  const char *pointer;
};

struct tree_complex
{
  struct tree_common common;
  rtx rtl;
  tree real;
  tree imag;
};

struct tree_vector
{
  struct tree_common common;
  rtx rtl;
  tree elements;
};

typedef struct ht_identifier ht_identifier;

struct ht_identifier
{
  const unsigned char *str;
  unsigned int len;
  unsigned int hash_value;
};

struct cpp_reader;
typedef struct ht hash_table;
typedef struct ht_identifier *hashnode;

struct ht
{
  hashnode *entries;
  hashnode (*alloc_node) (hash_table *);
  unsigned int nslots;
  unsigned int nelements;
  struct cpp_reader *pfile;
  unsigned int searches;
  unsigned int collisions;
};

struct tree_identifier
{
  struct tree_common common;
  struct ht_identifier id;
};

struct tree_list
{
  struct tree_common common;
  tree purpose;
  tree value;
};

struct tree_vec
{
  struct tree_common common;
  int length;
  tree a[1];
};

struct tree_exp
{
  struct tree_common common;
  int complexity;
  tree operands[1];
};

struct tree_block
{
  struct tree_common common;

  unsigned handler_block_flag : 1;
  unsigned abstract_flag : 1;
  unsigned block_num : 30;

  tree vars;
  tree subblocks;
  tree supercontext;
  tree abstract_origin;
  tree fragment_origin;
  tree fragment_chain;
};

struct die_struct;

struct tree_type
{
  struct tree_common common;
  tree values;
  tree size;
  tree size_unit;
  tree attributes;
  unsigned int uid;

  unsigned int precision : 9;
  enum machine_mode mode : 7;

  unsigned string_flag : 1;
  unsigned no_force_blk_flag : 1;
  unsigned needs_constructing_flag : 1;
  unsigned transparent_union_flag : 1;
  unsigned packed_flag : 1;
  unsigned restrict_flag : 1;
  unsigned pointer_depth : 2;

  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned user_align : 1;

  unsigned int align;
  tree pointer_to;
  tree reference_to;
  union tree_type_symtab {
    int address;
    char * pointer;
    struct die_struct * die;
  } symtab;

  tree name;
  tree minval;
  tree maxval;
  tree next_variant;
  tree main_variant;
  tree binfo;
  tree context;
  int alias_set;

  struct lang_type *lang_specific;
};

struct function;

struct tree_decl
{
  struct tree_common common;
  location_t locus;
  unsigned int uid;
  tree size;
  enum machine_mode mode : 8;

  unsigned external_flag : 1;
  unsigned nonlocal_flag : 1;
  unsigned regdecl_flag : 1;
  unsigned inline_flag : 1;
  unsigned bit_field_flag : 1;
  unsigned virtual_flag : 1;
  unsigned ignored_flag : 1;
  unsigned abstract_flag : 1;

  unsigned in_system_header_flag : 1;
  unsigned common_flag : 1;
  unsigned defer_output : 1;
  unsigned transparent_union : 1;
  unsigned static_ctor_flag : 1;
  unsigned static_dtor_flag : 1;
  unsigned artificial_flag : 1;
  unsigned weak_flag : 1;

  unsigned non_addr_const_p : 1;
  unsigned no_instrument_function_entry_exit : 1;
  unsigned comdat_flag : 1;
  unsigned malloc_flag : 1;
  unsigned no_limit_stack : 1;
  enum built_in_class built_in_class : 2;
  unsigned pure_flag : 1;

  unsigned pointer_depth : 2;
  unsigned non_addressable : 1;
  unsigned user_align : 1;
  unsigned uninlinable : 1;
  unsigned thread_local_flag : 1;
  unsigned inlined_function_flag : 1;

  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned lang_flag_7 : 1;

  union tree_decl_u1 {
    enum built_in_function f;
    int i;

    struct tree_decl_u1_a {
      unsigned int align : 24;
      unsigned int off_align : 8;
    } a;
  } u1;

  tree size_unit;
  tree name;
  tree context;
  tree arguments;
  tree result;
  tree initial;
  tree abstract_origin;
  tree assembler_name;
  tree section_name;
  tree attributes;
  rtx rtl;
  rtx live_range_rtl;

  union tree_decl_u2 {
    struct function * f;
    rtx r;
    tree t;
    int i;
  } u2;

  tree saved_tree;
  tree inlined_fns;
  tree vindex;
  int pointer_alias_set;

  struct lang_decl *lang_specific;
};

enum tree_node_structure_enum {
  TS_COMMON
};

union tree_node
{
  struct tree_common common;
  struct tree_int_cst int_cst;
  struct tree_real_cst real_cst;
  struct tree_vector vector;
  struct tree_string string;
  struct tree_complex complex;
  struct tree_identifier identifier;
  struct tree_decl decl;
  struct tree_type type;
  struct tree_list list;
  struct tree_vec vec;
  struct tree_exp exp;
  struct tree_block block;
};

enum tree_index
{
  TI_ERROR_MARK
};

enum size_type_kind
{
  SIZETYPE
};

enum c_tree_index
{
  CTI_WCHAR_TYPE
};

struct c_common_identifier
{
  struct tree_common common;
};

struct spelling
{
  int kind;
  union
    {
      int i;
      const char *s;
    } u;
};

static struct spelling *spelling;
static struct spelling *spelling_base;
static tree constructor_type;
static tree constructor_fields;
static tree constructor_index;
static tree constructor_max_index;
static tree constructor_unfilled_fields;
static tree constructor_unfilled_index;
static tree constructor_bit_index;
static tree constructor_elements;
static int constructor_incremental;
static int constructor_constant;
static int constructor_simple;
static int constructor_erroneous;

struct init_node
{
  struct init_node *left, *right;
  struct init_node *parent;
  int balance;
  tree purpose;
  tree value;
};

static struct init_node *constructor_pending_elts;
static int constructor_depth;
static tree constructor_decl;
static int constructor_designated;
static int designator_depth;
static int designator_errorneous;

struct constructor_range_stack;

struct constructor_stack
{
  struct constructor_stack *next;
  tree type;
  tree fields;
  tree index;
  tree max_index;
  tree unfilled_index;
  tree unfilled_fields;
  tree bit_index;
  tree elements;
  struct init_node *pending_elts;
  int offset;
  int depth;
  tree replacement_value;
  struct constructor_range_stack *range_stack;
  char constant;
  char simple;
  char implicit;
  char erroneous;
  char outer;
  char incremental;
  char designated;
};

struct constructor_stack *constructor_stack;

struct constructor_range_stack
{
  struct constructor_range_stack *next, *prev;
  struct constructor_stack *stack;
  tree range_start;
  tree index;
  tree range_end;
  tree fields;
};

struct constructor_range_stack *constructor_range_stack;

struct initializer_stack
{
  struct initializer_stack *next;
  tree decl;
  const char *asmspec;
  struct constructor_stack *constructor_stack;
  struct constructor_range_stack *constructor_range_stack;
  tree elements;
  struct spelling *spelling;
  struct spelling *spelling_base;
  int spelling_size;
  char top_level;
  char require_constant_value;
  char require_constant_elements;
  char deferred;
};

struct initializer_stack *initializer_stack;

void really_start_incremental_init (tree type)
{
  struct constructor_stack *p;

  if (type == 0)
    type = ((constructor_decl)->common.type);

  p->type = constructor_type;
  p->fields = constructor_fields;
  p->index = constructor_index;
  p->max_index = constructor_max_index;
  p->unfilled_index = constructor_unfilled_index;
  p->unfilled_fields = constructor_unfilled_fields;
  p->bit_index = constructor_bit_index;
  p->elements = constructor_elements;
  p->constant = constructor_constant;
  p->simple = constructor_simple;
  p->erroneous = constructor_erroneous;
  p->pending_elts = constructor_pending_elts;
  p->depth = constructor_depth;
  p->replacement_value = 0;
  p->implicit = 0;
  p->range_stack = 0;
  p->outer = 0;
  p->incremental = constructor_incremental;
  p->designated = constructor_designated;
  p->next = 0;
  constructor_stack = p;

  constructor_constant = 1;
  constructor_simple = 1;
  constructor_depth = (spelling - spelling_base);
  constructor_elements = 0;
  constructor_pending_elts = 0;
  constructor_type = type;
  constructor_incremental = 1;
  constructor_designated = 0;
  designator_depth = 0;
  designator_errorneous = 0;
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]