Remove the now unused function get_Proj_type().
[libfirm] / scripts / gen_ir.py
index a14f106..4e17588 100755 (executable)
@@ -57,18 +57,19 @@ def format_insdecl(node):
 
        if arity == "variable":
                insarity = len(node.ins)
-               res = "int r_arity = arity + " + `insarity` + ";\n\tir_node **r_in;\n\t" \
-                       + "NEW_ARR_A(ir_node *, r_in, r_arity);\n\t"
+               res  = "int r_arity = arity + " + `insarity` + ";"
+               res += "\n\tir_node **r_in;"
+               res += "\n\tNEW_ARR_A(ir_node *, r_in, r_arity);"
                i = 0
                for input in node.ins:
-                       res += "r_in[" + `i` + "] = irn_" + input + ";\n\t"
+                       res += "\n\tr_in[" + `i` + "] = irn_" + input + ";"
                        i += 1
-               res += "memcpy(&r_in[" + `insarity` + "], in, sizeof(ir_node *) * arity);\n\t"
+               res += "\n\tmemcpy(&r_in[" + `insarity` + "], in, sizeof(ir_node *) * arity);\n\t"
        else:
-               res = "ir_node *in[" + `arity` + "];\n\t"
+               res = "ir_node *in[" + `arity` + "];"
                i = 0
                for input in node.ins:
-                       res += "in[" + `i` + "] = irn_" + input + ";\n\t"
+                       res += "\n\tin[" + `i` + "] = irn_" + input + ";"
                        i += 1
        return res
 
@@ -133,6 +134,12 @@ def format_opindex(node):
                return node.op_index
        return "-1"
 
+keywords = frozenset([ "true", "false" ])
+def format_escape_keywords(word):
+       if word in keywords:
+               return word + "_"
+       return word
+
 def filter_isnot(list, flag):
        return filter(lambda x: not hasattr(x, flag), list)
 
@@ -153,24 +160,25 @@ def format_parameters(string):
        return format_arguments(string, voidwhenempty = True)
 
 env = Environment()
-env.filters['parameterlist']  = format_parameterlist
-env.filters['nodearguments']  = format_nodearguments
-env.filters['nodeparameters'] = format_nodeparameters
-env.filters['blockparameter'] = format_blockparameter
-env.filters['blockargument']  = format_blockargument
-env.filters['irgassign']      = format_irgassign
-env.filters['curblock']       = format_curblock
-env.filters['insdecl']        = format_insdecl
-env.filters['arity_and_ins']  = format_arity_and_ins
-env.filters['arity']          = format_arity
-env.filters['pinned']         = format_pinned
-env.filters['flags']          = format_flags
-env.filters['attr_size']      = format_attr_size
-env.filters['opindex']        = format_opindex
-env.filters['isnot']          = filter_isnot
-env.filters['hasnot']         = filter_hasnot
-env.filters['arguments']      = format_arguments
-env.filters['parameters']     = format_parameters
+env.filters['parameterlist']   = format_parameterlist
+env.filters['nodearguments']   = format_nodearguments
+env.filters['nodeparameters']  = format_nodeparameters
+env.filters['blockparameter']  = format_blockparameter
+env.filters['blockargument']   = format_blockargument
+env.filters['irgassign']       = format_irgassign
+env.filters['curblock']        = format_curblock
+env.filters['insdecl']         = format_insdecl
+env.filters['arity_and_ins']   = format_arity_and_ins
+env.filters['arity']           = format_arity
+env.filters['pinned']          = format_pinned
+env.filters['flags']           = format_flags
+env.filters['attr_size']       = format_attr_size
+env.filters['opindex']         = format_opindex
+env.filters['isnot']           = filter_isnot
+env.filters['hasnot']          = filter_hasnot
+env.filters['arguments']       = format_arguments
+env.filters['parameters']      = format_parameters
+env.filters['escape_keywords'] = format_escape_keywords
 
 def prepare_attr(attr):
        if "init" in attr:
@@ -277,10 +285,8 @@ ir_node *new_rd_{{node.constrname}}(
        {% endfilter %})
 {
        ir_node *res;
-       ir_graph *rem = current_ir_graph;
        {{node|irgassign}}
        {{node|insdecl}}
-       current_ir_graph = irg;
        res = new_ir_node(
                {%- filter arguments %}
                        dbgi
@@ -290,21 +296,20 @@ ir_node *new_rd_{{node.constrname}}(
                        {{node.mode}}
                        {{node|arity_and_ins}}
                {% endfilter %});
-       {% for attr in node.attrs -%}
-               res->attr.{{node.attrs_name}}{{attr["initname"]}} =
+       {%- for attr in node.attrs %}
+       res->attr.{{node.attrs_name}}{{attr["initname"]}} =
                {%- if "init" in attr %} {{ attr["init"] -}};
                {%- else              %} {{ attr["name"] -}};
-               {% endif %}
-       {% endfor %}
-       {%- for attr in node.initattrs -%}
-               res->attr.{{node.attrs_name}}{{attr["initname"]}} = {{ attr["init"] -}};
+               {%- endif %}
+       {%- endfor %}
+       {%- for attr in node.initattrs %}
+       res->attr.{{node.attrs_name}}{{attr["initname"]}} = {{ attr["init"] -}};
        {%- endfor %}
        {{- node.init }}
-       {% if node.optimize != False -%}
-               res = optimize_node(res);
-       {% endif -%}
-       IRN_VRFY_IRG(res, irg);
-       current_ir_graph = rem;
+       {%- if node.optimize != False %}
+       res = optimize_node(res);
+       {%- endif %}
+       irn_verify_irg(res, irg);
        return res;
 }
 
@@ -329,14 +334,13 @@ ir_node *new_d_{{node.constrname}}(
                {% endfilter %})
 {
        ir_node *res;
-       {{ node.d_pre }}
+       assert(get_irg_phase_state(current_ir_graph) == phase_building);
        res = new_rd_{{node.constrname}}(
                {%- filter parameters %}
                        dbgi
                        {{node|curblock}}
                        {{node|nodearguments}}
                {% endfilter %});
-       {{ node.d_post }}
        return res;
 }
 
@@ -403,10 +407,10 @@ ir_node *(get_{{node.name}}_{{in}})(const ir_node *node)
        return get_irn_n(node, {{node.ins.index(in)}});
 }
 
-void (set_{{node.name}}_{{in}})(ir_node *node, ir_node *{{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}});
+       set_irn_n(node, {{node.ins.index(in)}}, {{in|escape_keywords}});
 }
 {% endfor %}
 {% endfor %}
@@ -446,8 +450,17 @@ void finish_op(void)
 
 ''')
 
-projnumbers_h_template = env.from_string('''
+nodeops_h_template = env.from_string('''
 /* Warning: automatically generated code */
+#ifndef FIRM_IR_NODEOPS_H
+#define FIRM_IR_NODEOPS_H
+
+#include "firm_types.h"
+
+/**
+ * @addtogroup ir_node
+ * @{
+ */
 
 {% for node in nodes -%}
 {% if node.outs %}
@@ -464,6 +477,25 @@ typedef enum {
 {% 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}}(const ir_node *node);
+void set_{{node.name}}_{{in}}(ir_node *node, ir_node *{{in|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
 ''')
 
 opcodes_h_template = env.from_string('''
@@ -567,12 +599,12 @@ def main(argv):
        file.write(irop_template.render(nodes = real_nodes))
        file.close()
 
-       file = open(gendir2 + "/projnumbers.h", "w")
-       file.write(projnumbers_h_template.render(nodes = real_nodes))
-       file.close()
-
        file = open(gendir2 + "/opcodes.h", "w")
        file.write(opcodes_h_template.render(nodes = real_nodes))
        file.close()
 
+       file = open(gendir2 + "/nodeops.h", "w")
+       file.write(nodeops_h_template.render(nodes = real_nodes))
+       file.close()
+
 main(sys.argv)