generate n_Node_XXX enums for node inputs
authorMatthias Braun <matze@braunis.de>
Wed, 25 May 2011 12:37:22 +0000 (14:37 +0200)
committerMatthias Braun <matze@braunis.de>
Wed, 25 May 2011 12:37:22 +0000 (14:37 +0200)
ir/ir/irnode.c
scripts/gen_ir.py

index b082af4..10df911 100644 (file)
@@ -1237,24 +1237,28 @@ int is_memop(const ir_node *node)
 ir_node *get_memop_mem(const ir_node *node)
 {
        assert(is_memop(node));
+       assert(n_Load_mem == 0 && n_Store_mem == 0);
        return get_irn_n(node, 0);
 }
 
 void set_memop_mem(ir_node *node, ir_node *mem)
 {
        assert(is_memop(node));
+       assert(n_Load_mem == 0 && n_Store_mem == 0);
        set_irn_n(node, 0, mem);
 }
 
 ir_node *get_memop_ptr(const ir_node *node)
 {
        assert(is_memop(node));
+       assert(n_Load_mem == 1 && n_Store_mem == 1);
        return get_irn_n(node, 1);
 }
 
 void set_memop_ptr(ir_node *node, ir_node *ptr)
 {
        assert(is_memop(node));
+       assert(n_Load_mem == 1 && n_Store_mem == 1);
        set_irn_n(node, 1, ptr);
 }
 
index 47bf618..c9e8808 100755 (executable)
@@ -419,17 +419,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 %}
@@ -482,6 +482,16 @@ nodeops_h_template = env.from_string(
  */
 
 {% 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}};
+{% endif %}
 {% if node.outs %}
 /**
  * Projection numbers for result of {{node.name}} node (use for Proj nodes)
@@ -554,9 +564,9 @@ 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);
-FIRM_API 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);