blob: 54d531a3dff7eaa753d48b8a4f4b75c5e9b62ed9 [file] [log] [blame]
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;
}
}