+ pass->lower_bitfields = lower_bitfields;
+ return def_graph_pass_constructor(
+ &pass->pass, name ? name : "lower_hl", lower_highlevel_graph_wrapper);
+} /* lower_highlevel_graph_pass */
+
+/*
+ * does the same as lower_highlevel() for all nodes on the const code irg
+ */
+void lower_const_code(void)
+{
+ walk_const_code(NULL, lower_irnode, NULL);
+} /* lower_const_code */
+
+ir_prog_pass_t *lower_const_code_pass(const char *name)
+{
+ return def_prog_pass(name ? name : "lower_const_code", lower_const_code);
+}
+
+/*
+ * Replaces SymConsts by a real constant if possible.
+ * Replace Sel nodes by address computation. Also resolves array access.
+ * Handle Bitfields by added And/Or calculations.
+ */
+void lower_highlevel(int lower_bitfields)
+{
+ size_t i, n;
+
+ n = get_irp_n_irgs();
+ for (i = 0; i < n; ++i) {
+ ir_graph *irg = get_irp_irg(i);
+ lower_highlevel_graph(irg, lower_bitfields);