+ return new_d_{{node.constrname}}(
+ {%- filter arguments %}
+ NULL
+ {{node|nodearguments}}
+ {% endfilter %});
+}
+''')
+
+irnode_h_template = env.from_string('''
+/* Warning: automatically generated code */
+
+{%- for node in nodes|isnot('custom_is') %}
+static inline int _is_{{node.name}}(const ir_node *node)
+{
+ assert(node != NULL);
+ return _get_irn_op(node) == op_{{node.name}};
+}
+{%- endfor -%}
+
+{% for node in nodes %}
+#define is_{{node.name}}(node) _is_{{node.name}}(node)
+{%- endfor %}
+
+''')
+
+irnode_template = env.from_string('''
+/* Warning: automatically generated code */
+{% for node in nodes %}
+int (is_{{node.name}})(const ir_node *node)
+{
+ return _is_{{node.name}}(node);
+}
+{% endfor %}
+
+{%- for node in nodes %}
+{%- for attr in node.attrs|hasnot("noprop") %}
+{{attr.type}} (get_{{node.name}}_{{attr.name}})(const ir_node *node)
+{
+ assert(is_{{node.name}}(node));
+ return node->attr.{{node.attrs_name}}.{{attr.name}};
+}
+
+void (set_{{node.name}}_{{attr.name}})(ir_node *node, {{attr.type}} {{attr.name}})
+{
+ assert(is_{{node.name}}(node));
+ node->attr.{{node.attrs_name}}.{{attr.name}} = {{attr.name}};
+}
+{% endfor -%}
+{% endfor -%}
+
+{%- for node in nodes %}
+{%- for in in node.ins %}
+ir_node *(get_{{node.name}}_{{in}})(const ir_node *node)
+{
+ assert(is_{{node.name}}(node));
+ return get_irn_n(node, {{node.ins.index(in)}});
+}
+
+void (set_{{node.name}}_{{in}})(ir_node *node, ir_node *{{in|escape_keywords}})
+{
+ assert(is_{{node.name}}(node));
+ set_irn_n(node, {{node.ins.index(in)}}, {{in|escape_keywords}});
+}
+{% endfor %}
+{% endfor %}
+''')
+
+irop_template = env.from_string('''
+/* Warning: automatically generated code */
+{% for node in nodes %}
+ir_op *op_{{node.name}}; ir_op *get_op_{{node.name}}(void) { return op_{{node.name}}; }
+{%- endfor %}
+
+void init_op(void)
+{
+ {% for node in nodes %}
+ op_{{node.name}} = new_ir_op(
+ {%- filter arguments %}
+ iro_{{node.name}}
+ "{{node.name}}"
+ {{node|pinned}}
+ {{node|flags}}
+ {{node|arity}}
+ {{node|opindex}}
+ {{node|attr_size}}
+ NULL
+ {% endfilter %});
+ {%- endfor %}
+
+ be_init_op();
+}
+
+void finish_op(void)
+{
+ {% for node in nodes %}
+ free_ir_op(op_{{node.name}}); op_{{node.name}} = NULL;
+ {%- endfor %}