Bad and Unknown are pinned instructions yet, speeding up code placement
[libfirm] / ir / ir / irflag.h
index f0dc979..f0d004e 100644 (file)
 #ifndef _IRFLAG_H_
 #define _IRFLAG_H_
 
+/**
+ * A container type to load/restore all optimizations
+ */
+typedef unsigned optimization_state_t;
+
 /**
  * This function enables/disables optimizations globally.
  *
@@ -28,8 +33,7 @@
  * Default: optimize == 1.
  */
 void set_optimize (int value);
-/** Returns global optimization setting */
-int  get_optimize (void);
+int get_optimize(void);
 
 /** Enables/Disables constant folding optimization.
  *
@@ -42,8 +46,6 @@ int  get_optimize (void);
  * Default: opt_constant_folding == 1.
  */
 void set_opt_constant_folding (int value);
-/** Returns constant folding optimization setting. */
-int  get_opt_constant_folding (void);
 
 /** Enables/Disables constant subexpression elimination.
  *
@@ -51,31 +53,28 @@ int  get_opt_constant_folding (void);
  * Default: opt_cse == 1.
  */
 void set_opt_cse (int value);
-/** Returns constant subexpression elimination setting. */
-int  get_opt_cse (void);
 
 /** Enables/Disables global constant subexpression elimination.
  *
  * If opt_global_cse == 1 and opt_cse == 1 perform intra procedure
  * constant subexpression elimination for floating nodes.  Intra
  * procedure cse gets the graph into state "floating".  It is necessary
- * to run pre/code motion to get the graph back into state "pinned".
+ * to run pre/code motion to get the graph back into state "op_pin_state_pinned".
  * right after a call to local_optimize with global cse turned on.
  * Default: opt_global_cse == 0.
  */
 void set_opt_global_cse (int value);
-/** Returns global constant subexpression elimination setting. */
-int  get_opt_global_cse (void);
 
-/** Enables/Disables unreachble code elimination.
+/** Enables/Disables unreachable code elimination.
+ *
+ * If set, evaluate conditions of conditional branch and replace the
+ * branch with a Jmp/Bad Tuple.
  *
  * If opt_unreachable_code == 1 replace nodes (except Block,
  * Phi and Tuple) with a Bad predecessor by the Bad node.
  * Default: opt_unreachable_code == 1.
  */
 void set_opt_unreachable_code(int value);
-/** Returns unreachble code elimination setting. */
-int  get_opt_unreachable_code(void);
 
 /** Enables/Disables control flow optimizations.
  *
@@ -87,23 +86,15 @@ void set_opt_control_flow(int value);
 
 /** Enables/Disables Straightening. */
 void set_opt_control_flow_straightening(int value);
-/** Returns Straightening setting. */
-int  get_opt_control_flow_straightening(void);
 
 /** Enables/Disables if simplifications in local optimizations. */
 void set_opt_control_flow_weak_simplification(int value);
-/** Returns if simplifications in local optimizations setting. */
-int  get_opt_control_flow_weak_simplification(void);
 
 /** Enables/Disables strong if and loop simplification (in optimize_cf). */
 void set_opt_control_flow_strong_simplification(int value);
-/** Returns strong if and loop simplification setting */
-int  get_opt_control_flow_strong_simplification(void);
 
 /** Enables/Disables removal of critical control flow edges. */
 void set_opt_critical_edges(int value);
-/** Returns whether critical edges are removed */
-int  get_opt_critical_edges(void);
 
 /** Enables/Disables reassociation.
  *
@@ -111,8 +102,6 @@ int  get_opt_critical_edges(void);
  * Default: opt_reassociation == 1.
  */
 void set_opt_reassociation(int value);
-/** Returns reassociation setting. */
-int  get_opt_reassociation(void);
 
 /** Enables/Disables dead node elimination.
  *
@@ -120,16 +109,20 @@ int  get_opt_reassociation(void);
  * by copying the firm graph.
  * Default: opt_dead_node_elimination == 1. */
 void set_opt_dead_node_elimination (int value);
-/** Returns dead node elimination setting. */
-int  get_opt_dead_node_elimination (void);
+
+/** Enables/Disables dead method elimination.
+ *
+ * If opt_dead_method_elimination == 1 methods never called are
+ * removed.
+ * Default: opt_dead_method_elimination == 1. */
+void set_opt_dead_method_elimination (int value);
+void set_opt_dead_method_elimination_verbose (int value);
 
 /** Enable/Disables inlining.
  *
  * If opt_inline == 1 the inlining transformation is performed.
  */
 void set_opt_inline (int value);
-/** Returns inlining setting. */
-int  get_opt_inline (void);
 
 /** Enable/Disable optimization of dynamic method dispatch
  *
@@ -138,7 +131,6 @@ int  get_opt_inline (void);
  * the address of a function.
  */
 void set_opt_dyn_meth_dispatch (int value);
-int  get_opt_dyn_meth_dispatch (void);
 
 /** Enable/Disable normalizations of the firm representation.
  *
@@ -153,7 +145,25 @@ int  get_opt_dyn_meth_dispatch (void);
  *  @@@ ATTENTION: not all such transformations are guarded by a flag.
  */
 void set_opt_normalize (int value);
-int  get_opt_normalize (void);
 
+/** Enable/Disable optimization of tail-recursion calls.
+ *
+ * This flag enables/disables the optimization tail-recursion call.
+ * If the flag is turned on tail-recursion calls are optimized into loops.
+ */
+void set_opt_tail_recursion(int value);
+
+/** Enable/Disable precise exception context. */
+void set_opt_precise_exc_context(int value);
+
+/**
+ * Save the current optimization state.
+ */
+void save_optimization_state(optimization_state_t *state);
+
+/**
+ * Restore the current optimization state.
+ */
+void restore_optimization_state(const optimization_state_t *state);
 
 #endif