Add pass constructor C99 feature removed.
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 12 Apr 2010 19:00:58 +0000 (19:00 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 12 Apr 2010 19:00:58 +0000 (19:00 +0000)
[r27381]

include/libfirm/iroptimize.h
ir/opt/fp-vrp.c

index 9d841ad..e4d064f 100644 (file)
@@ -1083,4 +1083,17 @@ ir_graph_pass_t *place_code_pass(const char *name);
  */
 void fixpoint_vrp(ir_graph*);
 
+/**
+ * Creates an ir_graph pass for fixpoint_vrp().
+ * This pass dDetermines information about the values of nodes
+ * and perform simplications using this information.
+ * This optimization performs a data-flow analysis to
+ * find the minimal fixpoint.
+ *
+ * @param name     the name of this pass or NULL
+ *
+ * @return  the newly created ir_graph pass
+ */
+ir_graph_pass_t *fixpoint_vrp_irg_pass(const char *name);
+
 #endif
index bd8d5f3..232deba 100644 (file)
@@ -40,6 +40,7 @@
 #include "iroptimize.h"
 #include "irtools.h"
 #include "tv.h"
+#include "irpass.h"
 
 /* TODO:
  * - Implement cleared/set bit calculation for Add, Sub, Minus, Mul, Div, Mod, Shl, Shr, Shrs, Rotl
@@ -314,8 +315,8 @@ result_unknown_X:
                                         * range the addition is disjoint and therefore Add behaves like Or.
                                         */
                                        tarval* const low_zero_mask = tarval_or(no_c_in_no_c_out, tarval_neg(no_c_in_no_c_out));
-                                       z = tarval_or( tarval_or(lz, rz), low_zero_mask);
                                        tarval* const low_one_mask  = tarval_not(low_zero_mask);
+                                       z = tarval_or( tarval_or(lz, rz), low_zero_mask);
                                        o = tarval_and(tarval_or(lo, ro), low_one_mask);
                                }
                                break;
@@ -684,3 +685,8 @@ void fixpoint_vrp(ir_graph* const irg)
 
        obstack_free(&obst, NULL);
 }
+
+ir_graph_pass_t *fixpoint_vrp_irg_pass(const char *name)
+{
+       return def_graph_pass(name ? name : "fixpoint_vrp", fixpoint_vrp);
+}