@@ -40,27 +40,20 @@ namespace llvm {
4040// / with BP or SP and Disp being offsetted accordingly. The displacement may
4141// / also include the offset of a global value.
4242struct X86AddressMode {
43- enum {
44- RegBase,
45- FrameIndexBase
46- } BaseType;
43+ enum { RegBase, FrameIndexBase } BaseType = RegBase;
4744
48- union {
49- unsigned Reg;
45+ union BaseUnion {
46+ Register Reg;
5047 int FrameIndex;
51- } Base;
5248
53- unsigned Scale;
54- unsigned IndexReg;
55- int Disp;
56- const GlobalValue *GV;
57- unsigned GVOpFlags;
49+ BaseUnion () : Reg () {}
50+ } Base;
5851
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 ;
6457
6558 void getFullAddress (SmallVectorImpl<MachineOperand> &MO) {
6659 assert (Scale == 1 || Scale == 2 || Scale == 4 || Scale == 8 );
@@ -121,7 +114,7 @@ static inline X86AddressMode getAddressFromInstr(const MachineInstr *MI,
121114// / with no scale, index or displacement. An example is: DWORD PTR [EAX].
122115// /
123116static inline const MachineInstrBuilder &
124- addDirectMem (const MachineInstrBuilder &MIB, unsigned Reg) {
117+ addDirectMem (const MachineInstrBuilder &MIB, Register Reg) {
125118 // Because memory references are always represented with five
126119 // values, this adds: Reg, 1, NoReg, 0, NoReg to the instruction.
127120 return MIB.addReg (Reg).addImm (1 ).addReg (0 ).addImm (0 ).addReg (0 );
@@ -130,7 +123,7 @@ addDirectMem(const MachineInstrBuilder &MIB, unsigned Reg) {
130123// / Replace the address used in the instruction with the direct memory
131124// / reference.
132125static inline void setDirectAddressInInstr (MachineInstr *MI, unsigned Operand,
133- unsigned Reg) {
126+ Register Reg) {
134127 // Direct memory address is in a form of: Reg/FI, 1 (Scale), NoReg, 0, NoReg.
135128 MI->getOperand (Operand).ChangeToRegister (Reg, /* isDef=*/ false );
136129 MI->getOperand (Operand + 1 ).setImm (1 );
@@ -154,16 +147,16 @@ addOffset(const MachineInstrBuilder &MIB, const MachineOperand& Offset) {
154147// / displacement. An example is: DWORD PTR [EAX + 4].
155148// /
156149static 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) {
159152 return addOffset (MIB.addReg (Reg, getKillRegState (isKill)), Offset);
160153}
161154
162155// / addRegReg - This function is used to add a memory reference of the form:
163156// / [Reg + Reg].
164157static 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) {
167160 return MIB.addReg (Reg1, getKillRegState (isKill1), SubReg1)
168161 .addImm (1 )
169162 .addReg (Reg2, getKillRegState (isKill2), SubReg2)
@@ -224,7 +217,7 @@ addFrameReference(const MachineInstrBuilder &MIB, int FI, int Offset = 0) {
224217// /
225218static inline const MachineInstrBuilder &
226219addConstantPoolReference (const MachineInstrBuilder &MIB, unsigned CPI,
227- unsigned GlobalBaseReg, unsigned char OpFlags) {
220+ Register GlobalBaseReg, unsigned char OpFlags) {
228221 // FIXME: factor this
229222 return MIB.addReg (GlobalBaseReg).addImm (1 ).addReg (0 )
230223 .addConstantPoolIndex (CPI, 0 , OpFlags).addReg (0 );
0 commit comments