X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeirgmod.c;h=b668c31930371979b31fb0202f8240ea4f9bd651;hb=f804d333c7b5459c3c1a6bfc188ecdc54346be73;hp=e307a4f5c69563978e980f53d08ae0440a28f966;hpb=72b961b5b05ac239435b379ef340154c64134e25;p=libfirm diff --git a/ir/be/beirgmod.c b/ir/be/beirgmod.c index e307a4f5c..b668c3193 100644 --- a/ir/be/beirgmod.c +++ b/ir/be/beirgmod.c @@ -4,6 +4,12 @@ #include +#ifdef WIN32 +#include +#else +#include +#endif + #include "hashptr.h" #include "pdeq.h" #include "pset.h" @@ -225,7 +231,7 @@ static ir_node *search_def(ir_node *usage, int pos, pset *copies, } } - else if(pset_find_ptr(phi_blocks, curr_bl)) { + if(pset_find_ptr(phi_blocks, curr_bl)) { ir_node *phi = get_irn_link(curr_bl); if(!phi) { @@ -409,8 +415,7 @@ void be_introduce_copies_ignore(dom_front_info_t *info, ir_node *orig, } -void be_introduce_copies(dom_front_info_t *info, ir_node *orig, - int n, ir_node *copy_nodes[]) +void be_introduce_copies(dom_front_info_t *info, ir_node *orig, int n, ir_node *copy_nodes[]) { static pset *empty_set = NULL; @@ -419,3 +424,24 @@ void be_introduce_copies(dom_front_info_t *info, ir_node *orig, be_introduce_copies_ignore(info, orig, n, copy_nodes, empty_set); } + +void be_introduce_copies_pset(dom_front_info_t *info, pset *nodes) { + int i, n = pset_count(nodes); + ir_node *orig, *irn, **copy_nodes; + static pset *empty_set = NULL; + + if (n<2) + return; + + copy_nodes = alloca((n-1)*sizeof(*copy_nodes)); + irn = pset_first(nodes); + orig = irn; + for (i=0, irn = pset_next(nodes); irn; irn=pset_next(nodes)) + copy_nodes[i++] = irn; + + + if(!empty_set) + empty_set = pset_new_ptr_default(); + + be_introduce_copies_ignore(info, orig, n-1, copy_nodes, empty_set); +}