X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeifg.h;h=275be325830892579ce9d76b9cbe8ca0f4ea3885;hb=34e3b8d50bce639e760da7233524a4db85c80290;hp=7679b5eb5ba92865dc958355e0bee6d723d52144;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/be/beifg.h b/ir/be/beifg.h index 7679b5eb5..275be3258 100644 --- a/ir/be/beifg.h +++ b/ir/be/beifg.h @@ -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. */ /** @@ -26,17 +12,14 @@ #ifndef FIRM_BE_BEIFG_H #define FIRM_BE_BEIFG_H -#include - -#include "irnode.h" +#include "be_types.h" +#include "bechordal.h" #include "irnodeset.h" +#include "pset.h" -#include "becopyopt.h" -#include "beirg.h" - -typedef struct be_ifg_t { +struct be_ifg_t { const be_chordal_env_t *env; -} be_ifg_t; +}; typedef struct nodes_iter_t { const be_chordal_env_t *env; @@ -65,15 +48,12 @@ typedef struct cliques_iter_t { } cliques_iter_t; void be_ifg_free(be_ifg_t *ifg); -int be_ifg_connected(const be_ifg_t *ifg, const ir_node *a, - const ir_node *b); ir_node *be_ifg_neighbours_begin(const be_ifg_t *ifg, neighbours_iter_t *iter, const ir_node *irn); ir_node *be_ifg_neighbours_next(neighbours_iter_t *iter); void be_ifg_neighbours_break(neighbours_iter_t *iter); -ir_node *be_ifg_nodes_begin(const be_ifg_t *ifg, nodes_iter_t *iter); +nodes_iter_t be_ifg_nodes_begin(be_ifg_t const *ifg); ir_node *be_ifg_nodes_next(nodes_iter_t *iter); -void be_ifg_nodes_break(nodes_iter_t *iter); int be_ifg_cliques_begin(const be_ifg_t *ifg, cliques_iter_t *iter, ir_node **buf); int be_ifg_cliques_next(cliques_iter_t *iter); @@ -81,10 +61,12 @@ void be_ifg_cliques_break(cliques_iter_t *iter); int be_ifg_degree(const be_ifg_t *ifg, const ir_node *irn); #define be_ifg_foreach_neighbour(ifg, iter, irn, pos) \ - for(pos = be_ifg_neighbours_begin(ifg, iter, irn); pos != NULL; pos = be_ifg_neighbours_next(iter)) + for (ir_node *pos = be_ifg_neighbours_begin(ifg, iter, irn); pos; pos = be_ifg_neighbours_next(iter)) -#define be_ifg_foreach_node(ifg, iter, pos) \ - for(pos = be_ifg_nodes_begin(ifg, iter); pos != NULL; pos = be_ifg_nodes_next(iter)) +#define be_ifg_foreach_node(ifg, pos) \ + for (bool pos##__once = true; pos##__once;) \ + for (nodes_iter_t pos##__iter = be_ifg_nodes_begin(ifg); pos##__once; pos##__once = false) \ + for (ir_node *pos; (pos = be_ifg_nodes_next(&pos##__iter));) #define be_ifg_foreach_clique(ifg, iter, buf, count) \ for(*(count) = be_ifg_cliques_begin(ifg, iter, buf); \ @@ -101,24 +83,4 @@ void be_ifg_stat(ir_graph *irg, be_ifg_t *ifg, be_ifg_stat_t *stat); be_ifg_t *be_create_ifg(const be_chordal_env_t *env); -/* - ____ _ - | _ \ _ _ _ __ ___ _ __ (_)_ __ __ _ - | | | | | | | '_ ` _ \| '_ \| | '_ \ / _` | - | |_| | |_| | | | | | | |_) | | | | | (_| | - |____/ \__,_|_| |_| |_| .__/|_|_| |_|\__, | - |_| |___/ -*/ - -typedef struct be_ifg_dump_dot_cb_t { - int (*is_dump_node)(void *self, ir_node *irn); - void (*graph_attr)(FILE *f, void *self); - void (*node_attr)(FILE *f, void *self, ir_node *irn); - void (*edge_attr)(FILE *f, void *self, ir_node *from, ir_node *to); - void (*at_begin)(FILE *file, void *self); - void (*at_end)(FILE *file, void *self); -} be_ifg_dump_dot_cb_t; - -void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump_dot_cb_t *cb, void *self); - #endif