Revert "Prevent SSA construction from running into endless loops."
[libfirm] / ir / tr / entity_t.h
index fe33ade..c17d9f7 100644 (file)
@@ -31,7 +31,6 @@
 #include "typerep.h"
 #include "type_t.h"
 #include "ident.h"
-#include "compound_path.h"
 
 typedef struct ir_initializer_base_t {
        ir_initializer_kind_t kind;
@@ -70,13 +69,6 @@ union ir_initializer_t {
        ir_initializer_tarval_t    tarval;
 };
 
-/** The attributes for compound entities. */
-typedef struct compound_ent_attr {
-       ir_node **values;     /**< constant values of compound entities. */
-       compound_graph_path **val_paths;
-                            /**< paths corresponding to constant values. */
-} compound_ent_attr;
-
 /** The attributes for methods. */
 typedef struct method_ent_attr {
        ir_graph *irg;                 /**< The corresponding irg if known.
@@ -98,9 +90,6 @@ typedef struct code_ent_attr {
 } code_ent_attr;
 
 typedef struct parameter_ent_attr {
-       /**< parameters might be compounds too */
-       compound_ent_attr  cmpd_attr;
-
        size_t   number; /**< corresponding parameter number */
        ir_mode *doubleword_low_mode;/**< entity is a lowered doubleword parameter,
                                                                so additional stores because of calling
@@ -117,6 +106,7 @@ typedef enum ir_entity_kind {
        IR_ENTITY_COMPOUND_MEMBER,
        IR_ENTITY_PARAMETER,
        IR_ENTITY_LABEL,
+       IR_ENTITY_UNKNOWN,
 } ir_entity_kind;
 
 /**
@@ -168,8 +158,6 @@ struct ir_entity {
 #endif
 
        union {
-               /* ------------- fields for compound entities -------------- */
-               compound_ent_attr  cmpd_attr;
                /* ------------- fields for method entities ---------------- */
                method_ent_attr    mtd_attr;
                /* fields for code entities */
@@ -180,9 +168,9 @@ struct ir_entity {
 };
 
 /** Initialize the entity module. */
-void ir_init_entity(void);
+void ir_init_entity(ir_prog *irp);
 /** Cleanup entity module */
-void ir_finish_entity(void);
+void ir_finish_entity(ir_prog *irp);
 
 /**
  * Creates an entity corresponding to the start address of a basic block
@@ -195,6 +183,8 @@ ir_entity *new_label_entity(ir_label_t label);
  */
 ir_entity *new_d_label_entity(ir_label_t label, dbg_info *dbgi);
 
+void set_entity_irg(ir_entity *ent, ir_graph *irg);
+
 /* ----------------------- inline functions ------------------------ */
 static inline int _is_entity(const void *thing)
 {
@@ -356,7 +346,7 @@ static inline void _set_entity_link(ir_entity *ent, void *l)
 static inline ir_graph *_get_entity_irg(const ir_entity *ent)
 {
        assert(ent && ent->kind == k_entity);
-       if (!is_Method_type(ent->type) || ent == unknown_entity) {
+       if (!is_Method_type(ent->type) || is_unknown_entity(ent)) {
                return NULL;
        }