constified is_Phi
[libfirm] / ir / ana / irdom.c
index 1bc8e47..8524285 100644 (file)
 #include "config.h"
 #endif
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
 #include "irouts.h"
 
+#include "xmalloc.h"
 #include "irgwalk.h"
 #include "irdom_t.h"
 #include "irgraph_t.h"   /* To access state field. */
 #include "irnode_t.h"
+#include "ircons_t.h"
 
-/**********************************************************************/
+/*--------------------------------------------------------------------*/
 /** Accessing the dominator data structures                          **/
-/**********************************************************************/
+/*--------------------------------------------------------------------*/
 
 ir_node *get_Block_idom(ir_node *bl) {
   assert(get_irn_op(bl) == op_Block);
+  if (get_Block_dom_depth(bl) == -1) {
+    /* This block is not reachable from Start */
+    return new_Bad();
+  }
   return bl->attr.block.dom.idom;
 }
 
@@ -57,23 +67,9 @@ void set_Block_dom_depth(ir_node *bl, int depth) {
 
 
 
-/**********************************************************************/
-/** Building and Removing the dominator datasturcture                **/
-/**                                                                  **/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/** .**/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/**  **/
-/**********************************************************************/
+/*--------------------------------------------------------------------*/
+/*  Building and Removing the dominator datastructure                 */
+/*--------------------------------------------------------------------*/
 
 static void count_and_init_blocks(ir_node *bl, void *env) {
   int *n_blocks = (int *) env;
@@ -190,7 +186,8 @@ void compute_doms(ir_graph *irg) {
   irg_block_walk(get_irg_end(current_ir_graph), count_and_init_blocks, NULL, &n_blocks);
 
   /* Memory for temporary information. */
-  tdi_list = (tmp_dom_info *) calloc(n_blocks, sizeof(tmp_dom_info));
+  tdi_list = xmalloc(n_blocks * sizeof(tmp_dom_info));
+  memset(tdi_list, 0, n_blocks * sizeof(tmp_dom_info));
 
   /* We need the out datastructure. */
   if (current_ir_graph->outs_state != outs_consistent)
@@ -215,10 +212,11 @@ void compute_doms(ir_graph *irg) {
     /* Step 2 */
     irn_arity = get_irn_arity(w->block);
     for (j = 0;  j < irn_arity;  j++) {
-      ir_node *pred = get_nodes_block(get_Block_cfgpred(w->block, j));
+      ir_node *cf_op = get_Block_cfgpred(w->block, j);
+      ir_node *pred  = get_nodes_block(cf_op);
       tmp_dom_info *u;
 
-      if ((is_Bad(get_Block_cfgpred(w->block, j))) ||
+      if ((is_Bad(cf_op)) || (is_Bad(pred)) ||
          (get_Block_pre_num (pred) == -1))
        continue;       /* control-dead */