xref: /aosp_15_r20/external/clang/test/CodeGen/2002-02-14-EntryNodePreds.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s  -o /dev/null
2*67e74705SXin Li 
3*67e74705SXin Li /* GCC Used to generate code that contained a branch to the entry node of
4*67e74705SXin Li  * the do_merge function.  This is illegal LLVM code.  To fix this, GCC now
5*67e74705SXin Li  * inserts an entry node regardless of whether or not it has to insert allocas.
6*67e74705SXin Li  */
7*67e74705SXin Li 
8*67e74705SXin Li struct edge_rec
9*67e74705SXin Li {
10*67e74705SXin Li   struct VERTEX *v;
11*67e74705SXin Li   struct edge_rec *next;
12*67e74705SXin Li   int wasseen;
13*67e74705SXin Li   int more_data;
14*67e74705SXin Li };
15*67e74705SXin Li 
16*67e74705SXin Li typedef struct edge_rec *QUAD_EDGE;
17*67e74705SXin Li 
18*67e74705SXin Li typedef struct {
19*67e74705SXin Li   QUAD_EDGE left, right;
20*67e74705SXin Li } EDGE_PAIR;
21*67e74705SXin Li 
22*67e74705SXin Li struct EDGE_STACK {
23*67e74705SXin Li     int ptr;
24*67e74705SXin Li     QUAD_EDGE *elts;
25*67e74705SXin Li     int stack_size;
26*67e74705SXin Li };
27*67e74705SXin Li 
do_merge(QUAD_EDGE ldo,QUAD_EDGE rdo)28*67e74705SXin Li int do_merge(QUAD_EDGE ldo, QUAD_EDGE rdo) {
29*67e74705SXin Li   int lvalid;
30*67e74705SXin Li   QUAD_EDGE basel,rcand;
31*67e74705SXin Li   while (1) {
32*67e74705SXin Li     if (!lvalid) {
33*67e74705SXin Li       return (int)basel->next;
34*67e74705SXin Li     }
35*67e74705SXin Li   }
36*67e74705SXin Li }
37*67e74705SXin Li 
38