summaryrefslogtreecommitdiff
path: root/includes/compiler/Alias.h
blob: 08dbb0034297a98dec4066d925153296011fee00 (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
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef COMPILER_ALIAS_H
#define COMPILER_ALIAS_H

#include "compiler/common.h"

#ifdef __MWERKS__
#pragma options align=mac68k
#endif
typedef struct AliasMember AliasMember;

typedef enum AliasType {
    AliasType0,
    AliasType1,
    AliasType2
} AliasType;

struct Alias {
    Alias *next;
    Alias *hashNext;
    AliasMember *children;
    AliasMember *parents;
    Object *object;
    SInt32 offset;
    SInt32 size;
    int valuenumber;
    PCode *valuepcode;
    UInt32 *vec24;
    int index;
    AliasType type;
};

struct AliasMember {
    AliasMember *nextParent;
    AliasMember *nextChild;
    Alias *parent;
    Alias *child;
};
#ifdef __MWERKS__
#pragma options align=reset
#endif

extern Alias *worst_case;
extern Object worst_case_obj;

extern void initialize_aliases(void);
extern Alias *make_alias(Object *object, SInt32 offset, SInt32 size);
extern Alias *make_alias_set(void);
extern void add_alias_member(Alias *parent, Alias *child);
extern Alias *make_alias_set_from_IR(void);
extern void gather_alias_info(void);
extern Boolean may_alias(PCode *a, PCode *b);
extern Boolean uniquely_aliases(PCode *a, PCode *b);
extern Boolean may_alias_worst_case(PCode *pcode);
extern Boolean may_alias_object(PCode *pcode, Object *object);
extern void initialize_alias_values(void);
extern void update_alias_value(Alias *alias, PCode *pcode);
extern void update_all_alias_values(void);

#endif