@@ -40,27 +40,20 @@ namespace llvm {
40
40
// / with BP or SP and Disp being offsetted accordingly. The displacement may
41
41
// / also include the offset of a global value.
42
42
struct X86AddressMode {
43
- enum {
44
- RegBase,
45
- FrameIndexBase
46
- } BaseType;
43
+ enum { RegBase, FrameIndexBase } BaseType = RegBase;
47
44
48
- union {
49
- unsigned Reg;
45
+ union BaseUnion {
46
+ Register Reg;
50
47
int FrameIndex;
51
- } Base;
52
48
53
- unsigned Scale;
54
- unsigned IndexReg;
55
- int Disp;
56
- const GlobalValue *GV;
57
- unsigned GVOpFlags;
49
+ BaseUnion () : Reg () {}
50
+ } Base;
58
51
59
- X86AddressMode ()
60
- : BaseType(RegBase), Scale( 1 ), IndexReg( 0 ), Disp( 0 ), GV( nullptr ),
61
- GVOpFlags ( 0 ) {
62
- Base. Reg = 0 ;
63
- }
52
+ unsigned Scale = 1 ;
53
+ Register IndexReg;
54
+ int Disp = 0 ;
55
+ const GlobalValue *GV = nullptr ;
56
+ unsigned GVOpFlags = 0 ;
64
57
65
58
void getFullAddress (SmallVectorImpl<MachineOperand> &MO) {
66
59
assert (Scale == 1 || Scale == 2 || Scale == 4 || Scale == 8 );
@@ -121,7 +114,7 @@ static inline X86AddressMode getAddressFromInstr(const MachineInstr *MI,
121
114
// / with no scale, index or displacement. An example is: DWORD PTR [EAX].
122
115
// /
123
116
static inline const MachineInstrBuilder &
124
- addDirectMem (const MachineInstrBuilder &MIB, unsigned Reg) {
117
+ addDirectMem (const MachineInstrBuilder &MIB, Register Reg) {
125
118
// Because memory references are always represented with five
126
119
// values, this adds: Reg, 1, NoReg, 0, NoReg to the instruction.
127
120
return MIB.addReg (Reg).addImm (1 ).addReg (0 ).addImm (0 ).addReg (0 );
@@ -130,7 +123,7 @@ addDirectMem(const MachineInstrBuilder &MIB, unsigned Reg) {
130
123
// / Replace the address used in the instruction with the direct memory
131
124
// / reference.
132
125
static inline void setDirectAddressInInstr (MachineInstr *MI, unsigned Operand,
133
- unsigned Reg) {
126
+ Register Reg) {
134
127
// Direct memory address is in a form of: Reg/FI, 1 (Scale), NoReg, 0, NoReg.
135
128
MI->getOperand (Operand).ChangeToRegister (Reg, /* isDef=*/ false );
136
129
MI->getOperand (Operand + 1 ).setImm (1 );
@@ -154,16 +147,16 @@ addOffset(const MachineInstrBuilder &MIB, const MachineOperand& Offset) {
154
147
// / displacement. An example is: DWORD PTR [EAX + 4].
155
148
// /
156
149
static inline const MachineInstrBuilder &
157
- addRegOffset (const MachineInstrBuilder &MIB,
158
- unsigned Reg, bool isKill, int Offset) {
150
+ addRegOffset (const MachineInstrBuilder &MIB, Register Reg, bool isKill,
151
+ int Offset) {
159
152
return addOffset (MIB.addReg (Reg, getKillRegState (isKill)), Offset);
160
153
}
161
154
162
155
// / addRegReg - This function is used to add a memory reference of the form:
163
156
// / [Reg + Reg].
164
157
static inline const MachineInstrBuilder &
165
- addRegReg (const MachineInstrBuilder &MIB, unsigned Reg1, bool isKill1,
166
- unsigned SubReg1, unsigned Reg2, bool isKill2, unsigned SubReg2) {
158
+ addRegReg (const MachineInstrBuilder &MIB, Register Reg1, bool isKill1,
159
+ unsigned SubReg1, Register Reg2, bool isKill2, unsigned SubReg2) {
167
160
return MIB.addReg (Reg1, getKillRegState (isKill1), SubReg1)
168
161
.addImm (1 )
169
162
.addReg (Reg2, getKillRegState (isKill2), SubReg2)
@@ -224,7 +217,7 @@ addFrameReference(const MachineInstrBuilder &MIB, int FI, int Offset = 0) {
224
217
// /
225
218
static inline const MachineInstrBuilder &
226
219
addConstantPoolReference (const MachineInstrBuilder &MIB, unsigned CPI,
227
- unsigned GlobalBaseReg, unsigned char OpFlags) {
220
+ Register GlobalBaseReg, unsigned char OpFlags) {
228
221
// FIXME: factor this
229
222
return MIB.addReg (GlobalBaseReg).addImm (1 ).addReg (0 )
230
223
.addConstantPoolIndex (CPI, 0 , OpFlags).addReg (0 );
0 commit comments