remove the concept of a strictconv
[libfirm] / include / libfirm / vrp.h
1 /*
2  * Copyright (C) 1995-2010 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
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.
10  *
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.
14  *
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
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief   Analyse the graph with value range propagation
23  * @author  Jonas Fietz
24  */
25 #ifndef VRP_H
26 #define VRP_H
27
28 #include "firm_types.h"
29 #include "begin.h"
30
31 /**
32  * @ingroup irana
33  * @defgroup vrp  Value Information
34  * Information about SSA-values (ranges, known bits, ...)
35  * @{
36  */
37
38 /** Type of a value range */
39 enum range_types {
40         VRP_UNDEFINED, /**< No information could be derived so far */
41         VRP_RANGE,     /**< bottom and top form a range, including both values */
42         VRP_ANTIRANGE, /**< range from bottom to top cannot be, but borders might
43                             be */
44         VRP_VARYING    /**< information cannot be derived */
45 };
46
47 /** VRP information for a single node */
48 typedef struct {
49         ir_tarval *bits_set;         /**< The bits which, by analysis, are
50                                           definitely set:
51                                           0: may be not set, 1: definitely set */
52         ir_tarval *bits_not_set;     /**< The bits which by analysis are definitely
53                                           not set:
54                                           1 for may be set, 0: definitely not set */
55         enum range_types range_type; /**< The range represented by range_top, range_bottom */
56         ir_tarval *range_bottom;     /**< lower end of the value range */
57         ir_tarval *range_top;        /**< upper end of the value range */
58 } vrp_attr;
59
60 /**
61  * Sets vrp data on the graph irg
62  * @param irg graph on which to set vrp data
63  */
64 FIRM_API void set_vrp_data(ir_graph *irg);
65
66 /**
67  * free vrp infos in an irg
68  */
69 FIRM_API void free_vrp_data(ir_graph *irg);
70
71 /**
72  * Test, if the two nodes can be compared with their vrp information
73  *
74  * @param left: the left node
75  * @param right: the right node
76  * @return all possible relations
77  */
78 FIRM_API ir_relation vrp_cmp(const ir_node *left, const ir_node *right);
79
80 /**
81  * Returns the vrp data for this node
82  * Note: only allowed for nodes with an integer mode!
83  *
84  * @param n: the node for which to return the vrp information
85  * @return a pointer to the vrp data or NULL if there is none
86  */
87 FIRM_API vrp_attr *vrp_get_info(const ir_node *n);
88
89 /** @} */
90
91 #include "end.h"
92
93 #endif