X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=scripts%2Fgen_ir.py;h=b982d69b64d4dcc1af28bc5032ba30a4c7fe6d21;hb=5ab45bb586d934d46c6739452ffdde2f3278156b;hp=89e55417f70c0a2cb47617e5d9bd0f55ba91e8f8;hpb=65daf5bc390b02d68581f4c431dbdbfaae11b88f;p=libfirm diff --git a/scripts/gen_ir.py b/scripts/gen_ir.py index 89e55417f..b982d69b6 100755 --- a/scripts/gen_ir.py +++ b/scripts/gen_ir.py @@ -272,6 +272,11 @@ def preprocess_node(node): fqname = ".exc.pin_state", init = "pin_state" )) + if hasattr(node, "throws_init"): + initattrs.append(dict( + fqname = ".exc.throws_exception", + init = node.throws_init + )) for arg in node.constructor_args: arguments.append(prepare_attr(arg)) @@ -324,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; } @@ -419,17 +424,17 @@ void (set_{{node.name}}_{{attr.name}})(ir_node *node, {{attr.type}} {{attr.name} {% endfor -%} {%- for node in nodes %} -{%- for in in node.ins %} -ir_node *(get_{{node.name}}_{{in[0]}})(const ir_node *node) +{%- for input in node.ins %} +ir_node *(get_{{node.name}}_{{input[0]}})(const ir_node *node) { assert(is_{{node.name}}(node)); - return get_irn_n(node, {{node.ins.index(in)}}); + return get_irn_n(node, n_{{node.name}}_{{input[0]}}); } -void (set_{{node.name}}_{{in[0]}})(ir_node *node, ir_node *{{in[0]|escape_keywords}}) +void (set_{{node.name}}_{{input[0]}})(ir_node *node, ir_node *{{input[0]|escape_keywords}}) { assert(is_{{node.name}}(node)); - set_irn_n(node, {{node.ins.index(in)}}, {{in[0]|escape_keywords}}); + set_irn_n(node, n_{{node.name}}_{{input[0]}}, {{input[0]|escape_keywords}}); } {% endfor %} {% endfor %} @@ -455,6 +460,9 @@ void init_op(void) {{node|attr_size}} NULL {% endfilter %}); + {%- if "fragile" in node.flags: %} + ir_op_set_fragile_indices(op_{{node.name}}, n_{{node.name}}_mem, pn_{{node.name}}_X_regular, pn_{{node.name}}_X_except); + {%- endif -%} {%- endfor %} be_init_op(); @@ -476,12 +484,25 @@ nodeops_h_template = env.from_string( #include "firm_types.h" +#include "begin.h" + /** * @addtogroup ir_node * @{ */ {% for node in nodes -%} +{% if node.ins %} +/** + * Input numbers for {{node.name}} node + */ +typedef enum { + {%- for input in node.ins %} + n_{{node.name}}_{{input[0]}}, + {%- endfor %} + n_{{node.name}}_max = n_{{node.name}}_{{node.ins[-1][0]}} +} n_{{node.name}}; +{% endif %} {% if node.outs %} /** * Projection numbers for result of {{node.name}} node (use for Proj nodes) @@ -491,7 +512,7 @@ typedef enum { pn_{{node.name}}_{{out[0]}} {%- if out.__len__() > 2 %} = {{out[2]}}{% endif %}, /**< {{out[1]}} */ {% endfor -%} - pn_{{node.name}}_max + pn_{{node.name}}_max = pn_{{node.name}}_{{node.outs[-1][0]}} } pn_{{node.name}}; {% endif %} {%- endfor %} @@ -549,14 +570,14 @@ 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 %} {% 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}}); +{% for input in node.ins -%} +FIRM_API ir_node *get_{{node.name}}_{{input[0]}}(const ir_node *node); +FIRM_API void set_{{node.name}}_{{input[0]}}(ir_node *node, ir_node *{{input[0]|escape_keywords}}); {% endfor -%} {% for attr in node.attrs|hasnot("noprop") -%} FIRM_API {{attr.type}} get_{{node.name}}_{{attr.name}}(const ir_node *node); @@ -566,6 +587,8 @@ FIRM_API void set_{{node.name}}_{{attr.name}}(ir_node *node, {{attr.type}} {{att /** @} */ +#include "end.h" + #endif ''')