diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 84cf238eee3..0b1c1e8082f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-08-06 Martin Jambor + + PR tree-optimization/57539 + * gcc.dg/ipa/pr57539.c: New test. + 2013-08-06 Martin Jambor Bernd Edlinger diff --git a/gcc/testsuite/gcc.dg/ipa/pr57539.c b/gcc/testsuite/gcc.dg/ipa/pr57539.c new file mode 100644 index 00000000000..e02018eb872 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr57539.c @@ -0,0 +1,218 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +typedef long unsigned int size_t; +typedef struct +{ +} +box; +typedef struct +{ +} +textpara_t; +typedef struct _dtlink_s Dtlink_t; +typedef struct _dtdisc_s Dtdisc_t; +typedef struct _dtmethod_s Dtmethod_t; +typedef struct _dt_s Dt_t; +typedef void *(*Dtmemory_f) (Dt_t *, void *, size_t, Dtdisc_t *); +typedef void *(*Dtsearch_f) (Dt_t *, void *, int); +typedef void *(*Dtmake_f) (Dt_t *, void *, Dtdisc_t *); +typedef void (*Dtfree_f) (Dt_t *, void *, Dtdisc_t *); +typedef int (*Dtcompar_f) (Dt_t *, void *, void *, Dtdisc_t *); +typedef unsigned int (*Dthash_f) (Dt_t *, void *, Dtdisc_t *); +typedef int (*Dtevent_f) (Dt_t *, int, void *, Dtdisc_t *); +struct _dtlink_s +{ + Dtlink_t *right; +}; +struct _dtdisc_s +{ + int key; + int size; + int link; + Dtmake_f makef; + Dtfree_f freef; + Dtcompar_f comparf; + Dthash_f hashf; + Dtmemory_f memoryf; + Dtevent_f eventf; +}; +struct _dt_s +{ + Dtsearch_f searchf; +}; +extern Dtmethod_t *Dtobag; +extern Dt_t *dtopen (Dtdisc_t *, Dtmethod_t *); +extern Dtlink_t *dtflatten (Dt_t *); +typedef struct Agobj_s Agobj_t; +typedef struct Agraph_s Agraph_t; +typedef struct Agnode_s Agnode_t; +typedef struct Agedge_s Agedge_t; +typedef struct Agdesc_s Agdesc_t; +typedef struct Agdisc_s Agdisc_t; +typedef struct Agrec_s Agrec_t; +struct Agobj_s +{ + Agrec_t *data; +}; +struct Agdesc_s +{ +}; +extern Agraph_t *agopen (char *name, Agdesc_t desc, Agdisc_t * disc); +extern Agnode_t *agfstnode (Agraph_t * g); +extern Agnode_t *agnxtnode (Agraph_t * g, Agnode_t * n); +extern Agedge_t *agedge (Agraph_t * g, Agnode_t * t, Agnode_t * h, char *name, + int createflag); +extern Agedge_t *agfstout (Agraph_t * g, Agnode_t * n); +extern Agedge_t *agnxtout (Agraph_t * g, Agedge_t * e); +extern Agdesc_t Agdirected, Agstrictdirected, Agundirected, + Agstrictundirected; +typedef struct Agraph_s graph_t; +typedef struct Agnode_s node_t; +typedef struct Agedge_s edge_t; +typedef union inside_t +{ + unsigned short minlen; +} +Agedgeinfo_t; +extern void *gmalloc (size_t); +typedef enum +{ AM_NONE, AM_VOR, AM_SCALE, AM_NSCALE, AM_SCALEXY, AM_PUSH, AM_PUSHPULL, + AM_ORTHO, AM_ORTHO_YX, AM_ORTHOXY, AM_ORTHOYX, AM_PORTHO, AM_PORTHO_YX, + AM_PORTHOXY, AM_PORTHOYX, AM_COMPRESS, AM_VPSC, AM_IPSEP, AM_PRISM } +adjust_mode; +typedef struct nitem +{ + Dtlink_t link; + int val; + node_t *cnode; + box bb; +} +nitem; +typedef int (*distfn) (box *, box *); +typedef int (*intersectfn) (nitem *, nitem *); +static int +cmpitem (Dt_t * d, int *p1, int *p2, Dtdisc_t * disc) +{ +} +static Dtdisc_t constr = + { __builtin_offsetof (nitem, val), sizeof (int), __builtin_offsetof (nitem, + link), +((Dtmake_f) 0), ((Dtfree_f) 0), (Dtcompar_f) cmpitem, ((Dthash_f) 0), ((Dtmemory_f) 0), +((Dtevent_f) 0) }; +static int +distX (box * b1, box * b2) +{ +} + +static int +intersectY0 (nitem * p, nitem * q) +{ +} + +static int +intersectY (nitem * p, nitem * q) +{ +} + +static void +mapGraphs (graph_t * g, graph_t * cg, distfn dist) +{ + node_t *n; + edge_t *e; + edge_t *ce; + node_t *t; + node_t *h; + nitem *tp; + nitem *hp; + int delta; + for (n = agfstnode (g); n; n = agnxtnode (g, n)) + { + for (e = agfstout (g, n); e; e = agnxtout (g, e)) + { + delta = dist (&tp->bb, &hp->bb); + ce = agedge (cg, t, h, ((void *) 0), 1); + if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) < delta) + { + if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) == + 0.0) + { + } + } + } + } +} + +static graph_t * +mkNConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) +{ + nitem *p; + nitem *nxp; + edge_t *e; + graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); + for (p = (nitem *) dtflatten (list); p; + p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) + { + for (nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right); nxp; + nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) nxp))->right)) + { + if (intersect (p, nxp)) + { + e = agedge (cg, p->cnode, nxp->cnode, ((void *) 0), 1); + } + }} for (p = (nitem *) dtflatten (list); p; + p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) + { + } +} + +static graph_t * +mkConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) +{ + graph_t *vg; + graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); + mapGraphs (vg, cg, dist); +} + +static void +constrainX (graph_t * g, nitem * nlist, int nnodes, intersectfn ifn, + int ortho) +{ + Dt_t *list = dtopen (&constr, Dtobag); + nitem *p = nlist; + graph_t *cg; + int i; + for (i = 0; i < nnodes; i++) + { + (*(((Dt_t *) (list))->searchf)) ((list), (void *) (p), 0000001); + p++; + } if (ortho) + cg = mkConstraintG (g, list, ifn, distX); + else + cg = mkNConstraintG (g, list, ifn, distX); +} + +int +cAdjust (graph_t * g, int mode) +{ + int ret, i, nnodes = agnnodes (g); + nitem *nlist = (nitem *) gmalloc ((nnodes) * sizeof (nitem)); + node_t *n; + for (n = agfstnode (g); n; n = agnxtnode (g, n)) + { + } + if (overlaps (nlist, nnodes)) + { + switch ((adjust_mode) mode) + { + case AM_ORTHOXY: + constrainX (g, nlist, nnodes, intersectY, 1); + case AM_ORTHO: + constrainX (g, nlist, nnodes, intersectY0, 1); + constrainX (g, nlist, nnodes, intersectY, 1); + case AM_PORTHO: + default: + constrainX (g, nlist, nnodes, intersectY0, 0); + } + } +}