bearch: Disallow passing Projs to get_irn_ops().
[libfirm] / ir / be / bearch.c
index 933efca..711c301 100644 (file)
@@ -1,20 +1,6 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
- *
  * This file is part of libFirm.
- *
- * This file may be distributed and/or modified under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation and appearing in the file LICENSE.GPL included in the
- * packaging of this file.
- *
- * Licensees holding valid libFirm Professional Edition licenses may use
- * this file in accordance with the libFirm Commercial License.
- * Agreement provided with the Software.
- *
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * Copyright (C) 2012 University of Karlsruhe.
  */
 
 /**
@@ -48,15 +34,6 @@ arch_register_req_t const arch_no_requirement = {
        0
 };
 
-/* Initialize the architecture environment struct. */
-arch_env_t *arch_env_begin_codegeneration(const arch_isa_if_t *isa_if,
-                                          be_main_env_t *main_env)
-{
-       arch_env_t *arch_env = isa_if->begin_codegeneration(main_env);
-       arch_env->main_env   = main_env;
-       return arch_env;
-}
-
 /**
  * Get the isa responsible for a node.
  * @param irn The node to get the responsible isa for.
@@ -64,14 +41,9 @@ arch_env_t *arch_env_begin_codegeneration(const arch_isa_if_t *isa_if,
  */
 static const arch_irn_ops_t *get_irn_ops(const ir_node *irn)
 {
-       if (is_Proj(irn)) {
-               irn = get_Proj_pred(irn);
-               assert(!is_Proj(irn));
-       }
-
-       ir_op                *ops    = get_irn_op(irn);
-       const arch_irn_ops_t *be_ops = get_op_ops(ops)->be_ops;
-
+       ir_op          const *const op     = get_irn_op(irn);
+       arch_irn_ops_t const *const be_ops = get_op_ops(op)->be_ops;
+       assert(be_ops);
        return be_ops;
 }
 
@@ -107,12 +79,7 @@ int arch_possible_memory_operand(const ir_node *irn, unsigned int i)
 void arch_perform_memory_operand(ir_node *irn, ir_node *spill, unsigned int i)
 {
        const arch_irn_ops_t *ops = get_irn_ops(irn);
-
-       if (ops->perform_memory_operand) {
-               ops->perform_memory_operand(irn, spill, i);
-       } else {
-               return;
-       }
+       ops->perform_memory_operand(irn, spill, i);
 }
 
 int arch_get_op_estimated_cost(const ir_node *irn)
@@ -226,7 +193,7 @@ static void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
                fprintf(F, " same as");
                for (i = 0; 1U << i <= other; ++i) {
                        if (other & (1U << i)) {
-                               ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i));
+                               ir_fprintf(F, " #%d (%+F)", i, get_irn_n(skip_Proj_const(node), i));
                        }
                }
        }
@@ -238,7 +205,7 @@ static void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
                fprintf(F, " different from");
                for (i = 0; 1U << i <= other; ++i) {
                        if (other & (1U << i)) {
-                               ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i));
+                               ir_fprintf(F, " #%d (%+F)", i, get_irn_n(skip_Proj_const(node), i));
                        }
                }
        }
@@ -259,30 +226,26 @@ static void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
 
 void arch_dump_reqs_and_registers(FILE *F, const ir_node *node)
 {
-       backend_info_t *info = be_get_info(node);
+       backend_info_t *const info  = be_get_info(node);
+       int             const n_ins = get_irn_arity(node);
        /* don't fail on invalid graphs */
-       if (info == NULL || info->in_reqs == NULL || info->out_infos == NULL) {
+       if (!info || (!info->in_reqs && n_ins != 0) || !info->out_infos) {
                fprintf(F, "invalid register requirements!!!\n");
                return;
        }
 
-       int n_ins  = get_irn_arity(node);
        for (int i = 0; i < n_ins; ++i) {
                const arch_register_req_t *req = arch_get_irn_register_req_in(node, i);
                fprintf(F, "inreq #%d = ", i);
                arch_dump_register_req(F, req, node);
                fputs("\n", F);
        }
-       unsigned n_outs = arch_get_irn_n_outs(node);
-       for (unsigned o = 0; o < n_outs; ++o) {
+       be_foreach_out(node, o) {
                const arch_register_req_t *req = arch_get_irn_register_req_out(node, o);
                fprintf(F, "outreq #%u = ", o);
                arch_dump_register_req(F, req, node);
-               fputs("\n", F);
-       }
-       for (unsigned o = 0; o < n_outs; ++o) {
                const arch_register_t *reg = arch_get_irn_register_out(node, o);
-               fprintf(F, "reg #%u = %s\n", o, reg != NULL ? reg->name : "n/a");
+               fprintf(F, " [%s]\n", reg != NULL ? reg->name : "n/a");
        }
 
        fprintf(F, "flags =");