summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/pr44784.c
blob: 54d531a3dff7eaa753d48b8a4f4b75c5e9b62ed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
typedef struct rtx_def *rtx;
enum rtx_code { SUBREG };
typedef union rtunion_def {
    long rtint;
    unsigned long rtuint;
    rtx rtx;
} rtunion;
struct rtx_def {
    enum rtx_code code: 8;
    rtunion fld[1];
};
typedef struct simple_bitmap_def {
    unsigned long long elms[1];
} *sbitmap;
struct df_link {
    struct df_link *next;
    rtx reg;
};
typedef enum { UNDEFINED,   CONSTANT,   VARYING } latticevalue;
typedef struct {
    latticevalue lattice_val;
} value;
static value *values;
static sbitmap ssa_edges;
void defs_to_varying (struct df_link *start)
{
  struct df_link *currdef;
  for (currdef = start;
       currdef;
       currdef = currdef->next)
    {
      rtx reg = currdef->reg;
      if (values[(reg->code == SUBREG
		  ? reg->fld[0].rtx
		  : reg)->fld[0].rtuint].lattice_val != VARYING)
	ssa_edges->elms [(reg->code == SUBREG
			  ? reg->fld[0].rtx
			  : reg)->fld[0].rtuint / 64]
	    |= ((unsigned long long) 1
		<< (reg->code == SUBREG
		    ? reg->fld[0].rtx
		    : reg)->fld[0].rtuint % 64);
      values[(reg->code == SUBREG
	      ? reg->fld[0].rtx
	      : reg)->fld[0].rtuint].lattice_val = VARYING;
    }
}