+{% for node in nodes %}
+{%- if not node.noconstructor %}
+/**
+ * Construct {{node.name|a_an}} node.
+ *
+ * @param dbgi A pointer to debug information.
+{{ node|blockparameterhelp -}}
+{{ node|nodeparametershelp -}}
+ */
+FIRM_API ir_node *new_rd_{{node.name}}(
+ {%- filter parameters %}
+ dbg_info *dbgi
+ {{node|blockparameter}}
+ {{node|nodeparameters}}
+ {% endfilter %});
+
+/**
+ * Construct {{node.name|a_an}} node.
+ *
+{{ node|blockparameterhelp -}}
+{{ node|nodeparametershelp -}}
+ */
+FIRM_API ir_node *new_r_{{node.name}}(
+ {%- filter parameters %}
+ {{node|blockparameter}}
+ {{node|nodeparameters}}
+ {% endfilter %});
+
+/**
+ * Construct {{node.name|a_an}} node.
+ *
+ * @param dbgi A pointer to debug information.
+{{ node|nodeparametershelp -}}
+ */
+FIRM_API ir_node *new_d_{{node.name}}(
+ {%- filter parameters %}
+ dbg_info *dbgi
+ {{node|nodeparameters}}
+ {% endfilter %});
+
+/**
+ * Construct {{node.name|a_an}} node.
+ *
+{{ node|nodeparametershelp -}}
+ */
+FIRM_API ir_node *new_{{node.name}}(
+ {%- filter parameters %}
+ {{node|nodeparameters}}
+ {% endfilter %});
+{%- endif %}
+{% endfor %}
+
+{% for node in nodes %}
+/** Return true of the node is a {{node.name}} node. */
+FIRM_API int is_{{node.name}}(const ir_node *node);
+{%- endfor %}
+
+{% for node in nodes %}
+{% for in in node.ins -%}
+FIRM_API ir_node *get_{{node.name}}_{{in[0]}}(const ir_node *node);
+void set_{{node.name}}_{{in[0]}}(ir_node *node, ir_node *{{in[0]|escape_keywords}});
+{% endfor -%}
+{% for attr in node.attrs|hasnot("noprop") -%}
+FIRM_API {{attr.type}} get_{{node.name}}_{{attr.name}}(const ir_node *node);
+FIRM_API void set_{{node.name}}_{{attr.name}}(ir_node *node, {{attr.type}} {{attr.name}});
+{% endfor -%}
+{% endfor -%}
+
+/** @} */
+
+#endif
+