Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/pr42389.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/pr42389.c Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,87 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fselective-scheduling -fsel-sched-pipelining -fsched-pressure" } */ + +struct s_linked_f_pointer +{ + struct s_linked_f_pointer *next; + float *fptr; +}; +struct s_trace +{ + int index; +}; +struct s_rr_cost +{ + float base_cost; + float acc_cost; +}; +extern int num_nets; +extern struct s_trace **trace_head; +extern struct s_rr_cost *rr_cost; +struct s_rr_route +{ + float cost; +}; +static int heap_tail; +extern struct s_linked_f_pointer *rr_modified_head; +extern struct s_rr_route *rr_route; + +void +empty_heap (void) +{ + heap_tail = 1; +} + +void +reset_path_costs (void) +{ + struct s_linked_f_pointer *mod_ptr; + if (rr_modified_head != ((void *) 0)) + { + mod_ptr = rr_modified_head; + while (mod_ptr->next != ((void *) 0)) + { + *(mod_ptr->fptr) = 1.e30; + mod_ptr = mod_ptr->next; + } + rr_modified_head = ((void *) 0); + } +} + +static void +route_net (int inet) +{ + int i; + for (i = 1; i < inet; i++) + reset_path_costs (); + empty_heap (); + reset_path_costs (); +} + +void +pathfinder_update_one_cost (int inet, float pres_fac, float acc_fac) +{ + struct s_trace *tptr; + int inode = 0; + + tptr = trace_head[inet]; + inode = tptr->index; + rr_route[inode].cost = rr_cost[inode].base_cost + rr_cost[inode].acc_cost; +} + +int +try_route (int n, float x, float y) +{ + int inet, itry; + float pres_fac; + for (itry = 1; itry <= n; itry++) + { + for (inet = 0; inet < num_nets; inet++) + { + route_net (inet); + pathfinder_update_one_cost (inet, pres_fac, x); + } + pres_fac *= y; + } +} +