* @file
* @brief Analyse the graph with value range propagation
* @author Jonas Fietz
- * @version $Id$
- *
*/
#ifndef VRP_H
#define VRP_H
#include "firm_types.h"
#include "begin.h"
+/**
+ * @ingroup irana
+ * @defgroup vrp Value Information
+ * Information about SSA-values (ranges, known bits, ...)
+ * @{
+ */
+
+/** Type of a value range */
enum range_types {
VRP_UNDEFINED, /**< No information could be derived so far */
VRP_RANGE, /**< bottom and top form a range, including both values */
VRP_VARYING /**< information cannot be derived */
};
-/** VRP information */
+/** VRP information for a single node */
typedef struct {
- int valid; /**< This node has valid vrp information */
- ir_tarval *bits_set; /**< The bits which, by analysis, are definitely set.
- 0: may be not set, 1: definitely set*/
+ ir_tarval *bits_set; /**< The bits which, by analysis, are
+ definitely set:
+ 0: may be not set, 1: definitely set */
ir_tarval *bits_not_set; /**< The bits which by analysis are definitely
- not set, 1 for may be set, 0: definitely not set */
+ not set:
+ 1 for may be set, 0: definitely not set */
enum range_types range_type; /**< The range represented by range_top, range_bottom */
- ir_tarval *range_bottom;
- ir_tarval *range_top;
+ ir_tarval *range_bottom; /**< lower end of the value range */
+ ir_tarval *range_top; /**< upper end of the value range */
} vrp_attr;
/**
- * Set vrp data on the graph irg
+ * Sets vrp data on the graph irg
* @param irg graph on which to set vrp data
*/
FIRM_API void set_vrp_data(ir_graph *irg);
+/**
+ * free vrp infos in an irg
+ */
+FIRM_API void free_vrp_data(ir_graph *irg);
+
/**
* Test, if the two nodes can be compared with their vrp information
*
*/
FIRM_API ir_relation vrp_cmp(const ir_node *left, const ir_node *right);
-/*
- * Return the vrp data for this node
+/**
+ * Returns the vrp data for this node
+ * Note: only allowed for nodes with an integer mode!
*
* @param n: the node for which to return the vrp information
- *
* @return a pointer to the vrp data or NULL if there is none
*/
FIRM_API vrp_attr *vrp_get_info(const ir_node *n);
+/** @} */
+
#include "end.h"
#endif