13883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// RUN: %clang_cc1 -emit-llvm %s  -o /dev/null
23883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
33883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher/* GCC Used to generate code that contained a branch to the entry node of
43883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher * the do_merge function.  This is illegal LLVM code.  To fix this, GCC now
53883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher * inserts an entry node regardless of whether or not it has to insert allocas.
63883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher */
73883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
83883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct edge_rec
93883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
103883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct VERTEX *v;
113883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct edge_rec *next;
123883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  int wasseen;
133883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  int more_data;
143883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
153883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
163883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef struct edge_rec *QUAD_EDGE;
173883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
183883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef struct {
193883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  QUAD_EDGE left, right;
203883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} EDGE_PAIR;
213883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
223883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct EDGE_STACK {
233883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    int ptr;
243883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    QUAD_EDGE *elts;
253883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    int stack_size;
263883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
273883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
283883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherint do_merge(QUAD_EDGE ldo, QUAD_EDGE rdo) {
293883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  int lvalid;
303883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  QUAD_EDGE basel,rcand;
313883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  while (1) {
323883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    if (!lvalid) {
333883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher      return (int)basel->next;
343883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    }
353883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  }
363883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
373883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
38