constified is_Phi
[libfirm] / ir / ana / rta.c
index eefa6ce..676bb6f 100644 (file)
  * Licence:     This file is protected by GPL -  GNU GENERAL PUBLIC LICENSE.
  */
 
-/**
- * Intraprozedurale Analyse zur Abschätzung der Aufrufrelation. Es wird
- * die Menge der instantiierten Klassen bestimmt, und daraus eine Abschätzung
- * der aufgerufenen Methoden.
- *
- * Voraussetzung ist, dass das Programm keine Methodenzeiger handhaben kann.
- * In diesem Fall koennten Methoden verloren gehen.  Oder wir muessen nach
- * allen "freien" Methoden suchen (siehe cgana).
- *
- * @@@ Die Analyse sollte wissen, von welchen Klassen Instanzen ausserhalb
- * der Uebersetzungseinheit alloziert werden koennen.  Diese muessen in
- * die initiale Menge allozierter Klassen aufgenommern werden.
- */
 
 #ifdef HAVE_CONFIG_H
-# include <config.h>
+# include "config.h"
 #endif
 
 #include "rta.h"
@@ -36,6 +23,7 @@
 
 #include "irnode_t.h"
 #include "irprog_t.h"
+#include "irgraph_t.h"
 
 #include "eset.h"
 #include "irgwalk.h"
@@ -194,10 +182,10 @@ static void rta_act (ir_node *node, void *env)
           /* it's an external allocated thing. */
         }
       } else if (get_SymConst_kind(ptr) == symconst_addr_name) {
-        /* If this SymConst refers to a method the method is external_visible
-           and therefore must be considered live anyways. */
-        if (get_SymConst_name(ptr) != new_id_from_str("iro_Catch"))
-          assert (ent && "couldn't determine entity of call to symConst");
+       /* Entities of kind addr_name may not be allocated in this compilation unit.
+          If so, the frontend built faulty Firm.  So just ignore. */
+       /* if (get_SymConst_name(ptr) != new_id_from_str("iro_Catch"))
+         assert (ent && "couldn't determine entity of call to SymConst of kind addr_name."); */
       } else {
         /* other symconst. */
         assert(0 && "This SymConst can not be an address for a method call.");
@@ -240,9 +228,9 @@ static int rta_fill_incremental (void)
   int i;
   int n_runs = 0;
   int rerun  = TRUE;
-  int old_ip_view = interprocedural_view;
+  int old_ip_view = get_interprocedural_view();
 
-  interprocedural_view = 0;     /* save this for later */
+  set_interprocedural_view(false);     /* save this for later */
 
   /* init_tables has added main_irg to _live_graphs */
 
@@ -292,7 +280,7 @@ static int rta_fill_incremental (void)
     n_runs ++;
   }
 
-  interprocedural_view = old_ip_view; /* cover up our traces */
+  set_interprocedural_view(old_ip_view); /* cover up our traces */
 
   return (n_runs);
 }
@@ -384,6 +372,9 @@ void rta_init (int do_verbose)
 {
   int n_runs = 0;
 
+  int rem_vpi = get_visit_pseudo_irgs();
+  set_visit_pseudo_irgs(1);
+
 # ifdef DEBUG_libfirm
   int i;
   for (i = 0; i < get_irp_n_irgs(); i++) {
@@ -412,6 +403,8 @@ void rta_init (int do_verbose)
   }
   tr_vrfy ();
 # endif /* defined DEBUG_libfirm */
+
+  set_visit_pseudo_irgs(rem_vpi);
 }
 
 /**
@@ -446,6 +439,9 @@ void rta_delete_dead_graphs (void)
   ir_graph *graph = NULL;
   int n_dead_graphs = 0;
 
+  int rem_vpi = get_visit_pseudo_irgs();
+  set_visit_pseudo_irgs(1);
+
   if (!get_optimize() || !get_opt_dead_method_elimination()) return;
 
   ir_graph *dead_graphs[get_irp_n_irgs()];
@@ -474,6 +470,8 @@ void rta_delete_dead_graphs (void)
   if (verbose) {
     printf ("RTA: n_dead_graphs = %i\n", n_dead_graphs);
   }
+
+  set_visit_pseudo_irgs(rem_vpi);
 }
 
 /* Clean up the RTA data structures.  Call this after calling rta_init */
@@ -533,6 +531,19 @@ void rta_report (void)
 
 /*
  * $Log$
+ * Revision 1.30  2004/12/02 16:16:11  beck
+ * fixed config.h include
+ * used xmalloc instead of malloc
+ *
+ * Revision 1.29  2004/11/11 13:28:08  goetz
+ * made pseudo irg aware
+ *
+ * Revision 1.28  2004/11/03 14:47:18  beck
+ * removed gloval intraprocedural_view variable and replaced by get_*() set_*() functions
+ *
+ * Revision 1.27  2004/10/21 07:23:34  goetz
+ * comments
+ *
  * Revision 1.26  2004/10/20 14:59:27  liekweg
  * Removed ecg
  *