X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firpass.h;h=d3ef42851615b3ec80d69dfb6cf5029127db8cc3;hb=6f068af98daa4725d60e5d23a8f98ec2841cfa44;hp=8ab844de0406a797be473717aea403770a6be2ae;hpb=4b363c6a4e0584ce755b5f82fc3d7a9dc38658b2;p=libfirm diff --git a/include/libfirm/irpass.h b/include/libfirm/irpass.h index 8ab844de0..d3ef42851 100644 --- a/include/libfirm/irpass.h +++ b/include/libfirm/irpass.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2009 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -21,12 +21,13 @@ * @file * @brief Manager for transformation passes. * @author Michael Beck - * @version $Id: $ + * @version $Id$ */ #ifndef FIRM_IR_PASS_H #define FIRM_IR_PASS_H #include "firm_types.h" +#include "begin.h" /** * Creates a new ir_graph pass manager. @@ -37,8 +38,9 @@ * * @return the newly created manager */ -ir_graph_pass_manager_t *new_graph_pass_mgr( - const char *name, int verify_all, int dump_all); +FIRM_API ir_graph_pass_manager_t *new_graph_pass_mgr(const char *name, + int verify_all, + int dump_all); /** * Add an ir_graph pass to a graph pass manager. @@ -46,7 +48,8 @@ ir_graph_pass_manager_t *new_graph_pass_mgr( * @param mgr the ir_graph pass manager * @param pass the pass to add */ -void ir_graph_pass_mgr_add(ir_graph_pass_manager_t *mgr, ir_graph_pass_t *pass); +FIRM_API void ir_graph_pass_mgr_add(ir_graph_pass_manager_t *mgr, + ir_graph_pass_t *pass); /** * Run all passes of an ir_graph pass manager. @@ -55,14 +58,14 @@ void ir_graph_pass_mgr_add(ir_graph_pass_manager_t *mgr, ir_graph_pass_t *pass); * * @return 0 if all passes return 0, else 1 */ -int ir_graph_pass_mgr_run(ir_graph_pass_manager_t *mgr); +FIRM_API int ir_graph_pass_mgr_run(ir_graph_pass_manager_t *mgr); /** * Terminate an ir_graph pass manager and all owned passes. * * @param mgr the manager */ -void term_graph_pass_mgr(ir_graph_pass_manager_t *mgr); +FIRM_API void term_graph_pass_mgr(ir_graph_pass_manager_t *mgr); /** * Creates a new ir_prog pass manager. @@ -73,8 +76,9 @@ void term_graph_pass_mgr(ir_graph_pass_manager_t *mgr); * * @return the newly created manager */ -ir_prog_pass_manager_t *new_prog_pass_mgr( - const char *name, int verify_all, int dump_all); +FIRM_API ir_prog_pass_manager_t *new_prog_pass_mgr(const char *name, + int verify_all, + int dump_all); /** * Add an ir_prog pass to an ir_prog pass manager. @@ -82,7 +86,8 @@ ir_prog_pass_manager_t *new_prog_pass_mgr( * @param mgr the ir_prog pass manager * @param pass the pass to add */ -void ir_prog_pass_mgr_add(ir_prog_pass_manager_t *mgr, ir_prog_pass_t *pass); +FIRM_API void ir_prog_pass_mgr_add(ir_prog_pass_manager_t *mgr, + ir_prog_pass_t *pass); /** * Add an ir_graph_pass_manager as a pass to an ir_prog pass manager. @@ -90,8 +95,8 @@ void ir_prog_pass_mgr_add(ir_prog_pass_manager_t *mgr, ir_prog_pass_t *pass); * @param mgr the ir_prog pass manager * @param graph_mgr the ir_graph pass manager to be added */ -void ir_prog_pass_mgr_add_graph_mgr( - ir_prog_pass_manager_t *mgr, ir_graph_pass_manager_t *graph_mgr); +FIRM_API void ir_prog_pass_mgr_add_graph_mgr(ir_prog_pass_manager_t *mgr, + ir_graph_pass_manager_t *graph_mgr); /** * Add an ir_graph_pass as a pass to an ir_prog pass manager. @@ -99,8 +104,8 @@ void ir_prog_pass_mgr_add_graph_mgr( * @param mgr the ir_prog pass manager * @param pass the ir_graph pass to be added */ -void ir_prog_pass_mgr_add_graph_pass( - ir_prog_pass_manager_t *mgr, ir_graph_pass_t *pass); +FIRM_API void ir_prog_pass_mgr_add_graph_pass(ir_prog_pass_manager_t *mgr, + ir_graph_pass_t *pass); /** * Run all passes of an ir_prog pass manager. @@ -109,14 +114,23 @@ void ir_prog_pass_mgr_add_graph_pass( * * @return 0 if all passes return 0, else 1 */ -int ir_prog_pass_mgr_run(ir_prog_pass_manager_t *mgr); +FIRM_API int ir_prog_pass_mgr_run(ir_prog_pass_manager_t *mgr); /** * Terminate an ir_prog pass manager and all owned passes. * * @param mgr the manager */ -void term_prog_pass_mgr(ir_prog_pass_manager_t *mgr); +FIRM_API void term_prog_pass_mgr(ir_prog_pass_manager_t *mgr); + +/** + * Set the run index for an irgraph pass manager. + * + * @param mgr the manager + * @param run_idx the index for the first pass of this manager + */ +FIRM_API void ir_graph_pass_mgr_set_run_idx( + ir_graph_pass_manager_t *mgr, unsigned run_idx); /** * Creates an ir_graph pass for running void function(ir_graph *irg). @@ -128,7 +142,7 @@ void term_prog_pass_mgr(ir_prog_pass_manager_t *mgr); * * @return the newly created ir_graph pass */ -ir_graph_pass_t *def_graph_pass( +FIRM_API ir_graph_pass_t *def_graph_pass( const char *name, void (*function)(ir_graph *irg)); /** @@ -141,7 +155,7 @@ ir_graph_pass_t *def_graph_pass( * * @return the newly created ir_graph pass */ -ir_graph_pass_t *def_graph_pass_ret( +FIRM_API ir_graph_pass_t *def_graph_pass_ret( const char *name, int (*function)(ir_graph *irg)); /** @@ -155,10 +169,20 @@ ir_graph_pass_t *def_graph_pass_ret( * * @return the newly created ir_graph pass */ -ir_graph_pass_t *def_graph_pass_constructor( +FIRM_API ir_graph_pass_t *def_graph_pass_constructor( ir_graph_pass_t *memory, const char *name, int (*function)(ir_graph *irg, void *context)); +/** + * Set the run_parallel property of a graph pass. + * If the flag is set to non-zero, the pass can be executed + * parallel on all graphs of a ir_prog. + * + * @param pass the pass + * @param flag new flag setting + */ +FIRM_API void ir_graph_pass_set_parallel(ir_graph_pass_t *pass, int flag); + /** * Creates an ir_prog pass for running void function(). * Uses the default verifier and dumper. @@ -169,7 +193,46 @@ ir_graph_pass_t *def_graph_pass_constructor( * * @return the newly created ir_graph pass */ -ir_prog_pass_t *def_prog_pass( +FIRM_API ir_prog_pass_t *def_prog_pass( const char *name, void (*function)(void)); +/** + * Creates an ir_prog pass for running void function(). + * Uses the default verifier and dumper. + * The pass returns always 0. + * + * @param memory if non-NULL, an already allocated ir_prog_pass_t + * @param name the name of this pass + * @param function the function to run + * + * @return the newly created ir_prog pass + */ +FIRM_API ir_prog_pass_t *def_prog_pass_constructor( + ir_prog_pass_t *memory, + const char *name, int (*function)(ir_prog *irp, void *context)); + +/** + * Create a pass that calls some function. + * This pass calls the given function, but has no dump nor verify. + * + * @param name the name of this pass + * @param function the function to run + * @param context context parameter + * + * @return the newly created ir_prog pass + */ +FIRM_API ir_prog_pass_t *call_function_pass( + const char *name, void (*function)(void *context), void *context); + +/** + * Set the run index for an irprog pass manager. + * + * @param mgr the manager + * @param run_idx the index for the first pass of this manager + */ +FIRM_API void ir_prog_pass_mgr_set_run_idx( + ir_prog_pass_manager_t *mgr, unsigned run_idx); + +#include "end.h" + #endif