2 * Copyright (C) 1995-2010 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
6 * This file may be distributed and/or modified under the terms of the
7 * GNU General Public License version 2 as published by the Free Software
8 * Foundation and appearing in the file LICENSE.GPL included in the
9 * packaging of this file.
11 * Licensees holding valid libFirm Professional Edition licenses may use
12 * this file in accordance with the libFirm Commercial License.
13 * Agreement provided with the Software.
15 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * @brief Analyse the graph with value range propagation
28 #include "firm_types.h"
33 * @defgroup vrp Value Information
34 * Information about SSA-values (ranges, known bits, ...)
39 VRP_UNDEFINED, /**< No information could be derived so far */
40 VRP_RANGE, /**< bottom and top form a range, including both values */
41 VRP_ANTIRANGE, /**< range from bottom to top cannot be, but borders might
43 VRP_VARYING /**< information cannot be derived */
46 /** VRP information */
48 ir_tarval *bits_set; /**< The bits which, by analysis, are
50 0: may be not set, 1: definitely set */
51 ir_tarval *bits_not_set; /**< The bits which by analysis are definitely
53 1 for may be set, 0: definitely not set */
54 enum range_types range_type; /**< The range represented by range_top, range_bottom */
55 ir_tarval *range_bottom;
60 * Set vrp data on the graph irg
61 * @param irg graph on which to set vrp data
63 FIRM_API void set_vrp_data(ir_graph *irg);
66 * free vrp infos in an irg
68 FIRM_API void free_vrp_data(ir_graph *irg);
71 * Test, if the two nodes can be compared with their vrp information
73 * @param left: the left node
74 * @param right: the right node
75 * @return all possible relations
77 FIRM_API ir_relation vrp_cmp(const ir_node *left, const ir_node *right);
80 * Return the vrp data for this node
81 * Note: only allowed for nodes with an integer mode!
83 * @param n: the node for which to return the vrp information
84 * @return a pointer to the vrp data or NULL if there is none
86 FIRM_API vrp_attr *vrp_get_info(const ir_node *n);