X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fgen_ir.py;h=f6438ba5d069d5fa8d0acfc7b5d46e2aacef8652;hb=1fcb2bcd0b3646660aaadc6f49bdf474fc906a5d;hp=3696854ea44de2514b9669f30698c4a072a07970;hpb=6b45fde8adadc605dfe4c3a181c7fd8f78ac227c;p=libfirm diff --git a/scripts/gen_ir.py b/scripts/gen_ir.py index 3696854ea..f6438ba5d 100755 --- a/scripts/gen_ir.py +++ b/scripts/gen_ir.py @@ -329,8 +329,8 @@ ir_node *new_rd_{{node.name}}( res->attr.{{node.attrs_name}}{{attr["fqname"]}} = {{ attr["init"] -}}; {%- endfor %} {{- node.init }} - res = optimize_node(res); irn_verify_irg(res, irg); + res = optimize_node(res); {{- node.init_after_opt }} return res; } @@ -385,15 +385,15 @@ 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) +static inline int is_{{node.name}}_(const ir_node *node) { assert(node != NULL); - return _get_irn_op(node) == op_{{node.name}}; + return get_irn_op_(node) == op_{{node.name}}; } {%- endfor -%} {% for node in nodes %} -#define is_{{node.name}}(node) _is_{{node.name}}(node) +#define is_{{node.name}}(node) is_{{node.name}}_(node) {%- endfor %} ''') @@ -403,7 +403,7 @@ irnode_template = env.from_string( {% for node in nodes %} int (is_{{node.name}})(const ir_node *node) { - return _is_{{node.name}}(node); + return is_{{node.name}}_(node); } {% endfor %} @@ -440,6 +440,27 @@ void (set_{{node.name}}_{{input[0]}})(ir_node *node, ir_node *{{input[0]|escape_ {% endfor %} ''') +irdump_template = env.from_string( +'''/* Warning: automatically generated code */ +{% for node in nodes %} +{%- if node.outs %} +static const pns_lookup_t {{node.name}}_lut[] = { + {%- for out in node.outs %} + { pn_{{node.name}}_{{out[0]}}, "{{out[0]}}" }, + {%- endfor %} +}; +{% endif -%} +{%- endfor %} + +static const proj_lookup_t proj_lut[] = { + {%- for node in nodes -%} + {%- if node.outs %} + { iro_{{node.name}}, ARRAY_SIZE({{node.name}}_lut), {{node.name}}_lut }, + {%- endif %} + {%- endfor %} +}; +''') + irop_template = env.from_string( '''/* Warning: automatically generated code */ {% for node in nodes %} @@ -484,6 +505,8 @@ nodeops_h_template = env.from_string( #include "firm_types.h" +#include "begin.h" + /** * @addtogroup ir_node * @{ @@ -568,7 +591,7 @@ FIRM_API ir_node *new_{{node.name}}( {% endfor %} {% for node in nodes %} -/** Return true of the node is a {{node.name}} node. */ +/** Return true if the node is a {{node.name}} node. */ FIRM_API int is_{{node.name}}(const ir_node *node); {%- endfor %} @@ -585,6 +608,8 @@ FIRM_API void set_{{node.name}}_{{attr.name}}(ir_node *node, {{attr.type}} {{att /** @} */ +#include "end.h" + #endif ''') @@ -676,6 +701,10 @@ def main(argv): file.write(irop_template.render(nodes = real_nodes)) file.close() + file = open(gendir + "/gen_irdump.c.inl", "w") + file.write(irdump_template.render(nodes = real_nodes)) + file.close() + file = open(gendir2 + "/opcodes.h", "w") file.write(opcodes_h_template.render(nodes = real_nodes)) file.close()