- IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE = 1U << 14,
- /** extended basic blocks have been formed and are up to date */
- IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS = 1U << 15,
-} ir_graph_state_t;
-ENUM_BITSET(ir_graph_state_t)
-
-/** set some state flags on the graph (this does not clear the other flags) */
-FIRM_API void set_irg_state(ir_graph *irg, ir_graph_state_t state);
-/** clear some state flags of the graph */
-FIRM_API void clear_irg_state(ir_graph *irg, ir_graph_state_t state);
-/** query whether a set of graph state flags are activated */
-FIRM_API int is_irg_state(const ir_graph *irg, ir_graph_state_t state);
-
-/** Set a description for local value n. */
+ IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE = 1U << 11,
+ /** graph contains as many returns as possible */
+ IR_GRAPH_PROPERTY_MANY_RETURNS = 1U << 12,
+
+ /**
+ * List of all graph properties that are only affected by control flow
+ * changes.
+ */
+ IR_GRAPH_PROPERTIES_CONTROL_FLOW =
+ IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES
+ | IR_GRAPH_PROPERTY_ONE_RETURN
+ | IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE
+ | IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO
+ | IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE
+ | IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE
+ | IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE_FRONTIERS,
+
+ /**
+ * List of all graph properties.
+ */
+ IR_GRAPH_PROPERTIES_ALL =
+ IR_GRAPH_PROPERTIES_CONTROL_FLOW
+ | IR_GRAPH_PROPERTY_NO_BADS
+ | IR_GRAPH_PROPERTY_NO_TUPLES
+ | IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES
+ | IR_GRAPH_PROPERTY_CONSISTENT_OUTS
+ | IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE
+ | IR_GRAPH_PROPERTY_MANY_RETURNS,
+
+} ir_graph_properties_t;
+ENUM_BITSET(ir_graph_properties_t)
+
+/** sets some state properties on the graph */
+FIRM_API void add_irg_properties(ir_graph *irg, ir_graph_properties_t props);
+/** clears some graph properties */
+FIRM_API void clear_irg_properties(ir_graph *irg, ir_graph_properties_t props);
+/** queries whether @p irg has the @p props properties set */
+FIRM_API int irg_has_properties(const ir_graph *irg,
+ ir_graph_properties_t props);
+
+/** Sets a description for local value n. */