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;
}
}
|