#include "irop.h"
#include "pdeq.h"
#include "irnodemap.h"
+#include "irhooks.h"
#include "bitset.h"
#include "debug.h"
}
}
+static void dump_vrp_info(void *ctx, FILE *F, const ir_node *node)
+{
+ vrp_attr *vrp;
+
+ (void) ctx;
+ if (!mode_is_int(get_irn_mode(node)))
+ return;
+
+ vrp = vrp_get_info(node);
+ if (vrp == NULL)
+ return;
+
+ fprintf(F, "vrp range type: %d\n", (int) vrp->range_type);
+ if (vrp->range_type == VRP_RANGE || vrp->range_type == VRP_ANTIRANGE) {
+ ir_fprintf(F, "vrp range bottom: %T\n",vrp->range_bottom);
+ ir_fprintf(F, "vrp range top: %T\n", vrp->range_top);
+ }
+ ir_fprintf(F, "vrp bits set: %T\n", vrp->bits_set);
+ ir_fprintf(F, "vrp bits not set: %T\n", vrp->bits_not_set);
+}
+
+static hook_entry_t dump_hook;
+
void set_vrp_data(ir_graph *irg)
{
ir_node *succ, *node;
obstack_init(&irg->vrp.obst);
info = &irg->vrp;
+ if (dump_hook.hook._hook_node_info == NULL) {
+ dump_hook.hook._hook_node_info = dump_vrp_info;
+ register_hook(hook_node_info, &dump_hook);
+ }
+
env = obstack_alloc(&irg->vrp.obst, sizeof(*env));
env->workqueue = new_waitq();
env->info = info;
}
}
-void dump_vrp_info(FILE *F, ir_node *n)
-{
- vrp_attr *vrp = vrp_get_info(n);
- if (n == NULL) {
- return;
- }
-
- fprintf(F, "range_type: %d\n", (int) vrp->range_type);
- if (vrp->range_type == VRP_RANGE || vrp->range_type ==
- VRP_ANTIRANGE) {
- ir_fprintf(F, "range_bottom: %F\n",vrp->range_bottom);
- ir_fprintf(F, "range_top: %F\n", vrp->range_top);
- }
- ir_fprintf(F, "bits_set: %T\n", vrp->bits_set);
- ir_fprintf(F, "bits_not_set: %T\n", vrp->bits_not_set);
-}
-
/**
* Dumps the attributes of a node n into the file F.
* Currently this is only the color of a node.
void dump_node_label(FILE *out, ir_node *n);
-void dump_vrp_info(FILE *out, ir_node *n);
-
/** Writes vcg representation with title "PRINT_TYPEID(tp)" to file F. */
void dump_type_node(FILE *out, ir_type *tp);
#include "trouts.h"
#include "irgwalk.h"
#include "tv_t.h"
-#include "vrp.h"
#include "irprintf.h"
#include "error.h"
{
char comma;
ir_graph *irg;
- vrp_attr *vrp_info;
dump_node_opcode(F, n);
fprintf(F, " %ld\n", get_irn_node_nr(n));
break;
}
- vrp_info = vrp_get_info(n);
- if (vrp_info) {
- dump_vrp_info(F, n);
- }
-
if (get_irg_typeinfo_state(get_irn_irg(n)) == ir_typeinfo_consistent ||
get_irg_typeinfo_state(get_irn_irg(n)) == ir_typeinfo_inconsistent )
if (get_irn_typeinfo_type(n) != firm_none_type)