re PR tree-optimization/57539 (ice in ipa_edge_duplication_hook)
2013-08-06 Martin Jambor <mjambor@suse.cz> testsuite/ PR tree-optimization/57539 * gcc.dg/ipa/pr57539.c: New test. From-SVN: r201540
This commit is contained in:
parent
062a1b36f7
commit
e1d1531242
2 changed files with 223 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-08-06 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/57539
|
||||
* gcc.dg/ipa/pr57539.c: New test.
|
||||
|
||||
2013-08-06 Martin Jambor <mjambor@suse.cz>
|
||||
Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
|
|
218
gcc/testsuite/gcc.dg/ipa/pr57539.c
Normal file
218
gcc/testsuite/gcc.dg/ipa/pr57539.c
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue