forked from OSchip/llvm-project
[X86] Use Register/MCRegister in more places in X86
This was a quick pass through some obvious places. I haven't tried the clang-tidy check. I also replaced the zeroes in getX86SubSuperRegister with X86::NoRegister which is the real sentinel name. Differential Revision: https://reviews.llvm.org/D66363 llvm-svn: 369151
This commit is contained in:
parent
8191585b36
commit
a17d1d2250
|
@ -500,7 +500,7 @@ struct X86Operand final : public MCParsedAsmOperand {
|
||||||
|
|
||||||
void addGR32orGR64Operands(MCInst &Inst, unsigned N) const {
|
void addGR32orGR64Operands(MCInst &Inst, unsigned N) const {
|
||||||
assert(N == 1 && "Invalid number of operands!");
|
assert(N == 1 && "Invalid number of operands!");
|
||||||
unsigned RegNo = getReg();
|
MCRegister RegNo = getReg();
|
||||||
if (X86MCRegisterClasses[X86::GR64RegClassID].contains(RegNo))
|
if (X86MCRegisterClasses[X86::GR64RegClassID].contains(RegNo))
|
||||||
RegNo = getX86SubSuperRegister(RegNo, 32);
|
RegNo = getX86SubSuperRegister(RegNo, 32);
|
||||||
Inst.addOperand(MCOperand::createReg(RegNo));
|
Inst.addOperand(MCOperand::createReg(RegNo));
|
||||||
|
|
|
@ -594,13 +594,13 @@ extern "C" void LLVMInitializeX86TargetMC() {
|
||||||
createX86_64AsmBackend);
|
createX86_64AsmBackend);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
MCRegister llvm::getX86SubSuperRegisterOrZero(MCRegister Reg, unsigned Size,
|
||||||
bool High) {
|
bool High) {
|
||||||
switch (Size) {
|
switch (Size) {
|
||||||
default: return 0;
|
default: return X86::NoRegister;
|
||||||
case 8:
|
case 8:
|
||||||
if (High) {
|
if (High) {
|
||||||
switch (Reg) {
|
switch (Reg.id()) {
|
||||||
default: return getX86SubSuperRegisterOrZero(Reg, 64);
|
default: return getX86SubSuperRegisterOrZero(Reg, 64);
|
||||||
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
|
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
|
||||||
return X86::SI;
|
return X86::SI;
|
||||||
|
@ -620,8 +620,8 @@ unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
||||||
return X86::BH;
|
return X86::BH;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (Reg) {
|
switch (Reg.id()) {
|
||||||
default: return 0;
|
default: return X86::NoRegister;
|
||||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||||
return X86::AL;
|
return X86::AL;
|
||||||
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
||||||
|
@ -657,8 +657,8 @@ unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case 16:
|
case 16:
|
||||||
switch (Reg) {
|
switch (Reg.id()) {
|
||||||
default: return 0;
|
default: return X86::NoRegister;
|
||||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||||
return X86::AX;
|
return X86::AX;
|
||||||
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
||||||
|
@ -693,8 +693,8 @@ unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
||||||
return X86::R15W;
|
return X86::R15W;
|
||||||
}
|
}
|
||||||
case 32:
|
case 32:
|
||||||
switch (Reg) {
|
switch (Reg.id()) {
|
||||||
default: return 0;
|
default: return X86::NoRegister;
|
||||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||||
return X86::EAX;
|
return X86::EAX;
|
||||||
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
||||||
|
@ -729,7 +729,7 @@ unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
||||||
return X86::R15D;
|
return X86::R15D;
|
||||||
}
|
}
|
||||||
case 64:
|
case 64:
|
||||||
switch (Reg) {
|
switch (Reg.id()) {
|
||||||
default: return 0;
|
default: return 0;
|
||||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||||
return X86::RAX;
|
return X86::RAX;
|
||||||
|
@ -767,9 +767,9 @@ unsigned llvm::getX86SubSuperRegisterOrZero(unsigned Reg, unsigned Size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned llvm::getX86SubSuperRegister(unsigned Reg, unsigned Size, bool High) {
|
MCRegister llvm::getX86SubSuperRegister(MCRegister Reg, unsigned Size, bool High) {
|
||||||
unsigned Res = getX86SubSuperRegisterOrZero(Reg, Size, High);
|
MCRegister Res = getX86SubSuperRegisterOrZero(Reg, Size, High);
|
||||||
assert(Res != 0 && "Unexpected register or VT");
|
assert(Res != X86::NoRegister && "Unexpected register or VT");
|
||||||
return Res;
|
return Res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCTARGETDESC_H
|
#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCTARGETDESC_H
|
||||||
#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCTARGETDESC_H
|
#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCTARGETDESC_H
|
||||||
|
|
||||||
|
#include "llvm/MC/MCRegister.h"
|
||||||
#include "llvm/MC/MCStreamer.h"
|
#include "llvm/MC/MCStreamer.h"
|
||||||
#include "llvm/Support/DataTypes.h"
|
#include "llvm/Support/DataTypes.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -111,12 +112,12 @@ createX86WinCOFFObjectWriter(bool Is64Bit);
|
||||||
/// Returns the sub or super register of a specific X86 register.
|
/// Returns the sub or super register of a specific X86 register.
|
||||||
/// e.g. getX86SubSuperRegister(X86::EAX, 16) returns X86::AX.
|
/// e.g. getX86SubSuperRegister(X86::EAX, 16) returns X86::AX.
|
||||||
/// Aborts on error.
|
/// Aborts on error.
|
||||||
unsigned getX86SubSuperRegister(unsigned, unsigned, bool High=false);
|
MCRegister getX86SubSuperRegister(MCRegister, unsigned, bool High=false);
|
||||||
|
|
||||||
/// Returns the sub or super register of a specific X86 register.
|
/// Returns the sub or super register of a specific X86 register.
|
||||||
/// Like getX86SubSuperRegister() but returns 0 on error.
|
/// Like getX86SubSuperRegister() but returns 0 on error.
|
||||||
unsigned getX86SubSuperRegisterOrZero(unsigned, unsigned,
|
MCRegister getX86SubSuperRegisterOrZero(MCRegister, unsigned,
|
||||||
bool High = false);
|
bool High = false);
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ class FixupBWInstPass : public MachineFunctionPass {
|
||||||
/// destination register of the MachineInstr passed in. It returns true if
|
/// destination register of the MachineInstr passed in. It returns true if
|
||||||
/// that super register is dead just prior to \p OrigMI, and false if not.
|
/// that super register is dead just prior to \p OrigMI, and false if not.
|
||||||
bool getSuperRegDestIfDead(MachineInstr *OrigMI,
|
bool getSuperRegDestIfDead(MachineInstr *OrigMI,
|
||||||
unsigned &SuperDestReg) const;
|
Register &SuperDestReg) const;
|
||||||
|
|
||||||
/// Change the MachineInstr \p MI into the equivalent extending load to 32 bit
|
/// Change the MachineInstr \p MI into the equivalent extending load to 32 bit
|
||||||
/// register if it is safe to do so. Return the replacement instruction if
|
/// register if it is safe to do so. Return the replacement instruction if
|
||||||
|
@ -169,7 +169,7 @@ bool FixupBWInstPass::runOnMachineFunction(MachineFunction &MF) {
|
||||||
///
|
///
|
||||||
/// If so, return that super register in \p SuperDestReg.
|
/// If so, return that super register in \p SuperDestReg.
|
||||||
bool FixupBWInstPass::getSuperRegDestIfDead(MachineInstr *OrigMI,
|
bool FixupBWInstPass::getSuperRegDestIfDead(MachineInstr *OrigMI,
|
||||||
unsigned &SuperDestReg) const {
|
Register &SuperDestReg) const {
|
||||||
auto *TRI = &TII->getRegisterInfo();
|
auto *TRI = &TII->getRegisterInfo();
|
||||||
|
|
||||||
Register OrigDestReg = OrigMI->getOperand(0).getReg();
|
Register OrigDestReg = OrigMI->getOperand(0).getReg();
|
||||||
|
@ -268,7 +268,7 @@ bool FixupBWInstPass::getSuperRegDestIfDead(MachineInstr *OrigMI,
|
||||||
|
|
||||||
MachineInstr *FixupBWInstPass::tryReplaceLoad(unsigned New32BitOpcode,
|
MachineInstr *FixupBWInstPass::tryReplaceLoad(unsigned New32BitOpcode,
|
||||||
MachineInstr *MI) const {
|
MachineInstr *MI) const {
|
||||||
unsigned NewDestReg;
|
Register NewDestReg;
|
||||||
|
|
||||||
// We are going to try to rewrite this load to a larger zero-extending
|
// We are going to try to rewrite this load to a larger zero-extending
|
||||||
// load. This is safe if all portions of the 32 bit super-register
|
// load. This is safe if all portions of the 32 bit super-register
|
||||||
|
@ -295,11 +295,11 @@ MachineInstr *FixupBWInstPass::tryReplaceCopy(MachineInstr *MI) const {
|
||||||
auto &OldDest = MI->getOperand(0);
|
auto &OldDest = MI->getOperand(0);
|
||||||
auto &OldSrc = MI->getOperand(1);
|
auto &OldSrc = MI->getOperand(1);
|
||||||
|
|
||||||
unsigned NewDestReg;
|
Register NewDestReg;
|
||||||
if (!getSuperRegDestIfDead(MI, NewDestReg))
|
if (!getSuperRegDestIfDead(MI, NewDestReg))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
unsigned NewSrcReg = getX86SubSuperRegister(OldSrc.getReg(), 32);
|
Register NewSrcReg = getX86SubSuperRegister(OldSrc.getReg(), 32);
|
||||||
|
|
||||||
// This is only correct if we access the same subregister index: otherwise,
|
// This is only correct if we access the same subregister index: otherwise,
|
||||||
// we could try to replace "movb %ah, %al" with "movl %eax, %eax".
|
// we could try to replace "movb %ah, %al" with "movl %eax, %eax".
|
||||||
|
|
|
@ -552,11 +552,12 @@ FixupLEAPass::processInstrForSlow3OpLEA(MachineInstr &MI,
|
||||||
Segment.getReg() != X86::NoRegister)
|
Segment.getReg() != X86::NoRegister)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
unsigned DstR = Dst.getReg();
|
Register DstR = Dst.getReg();
|
||||||
Register BaseR = Base.getReg();
|
Register BaseR = Base.getReg();
|
||||||
Register IndexR = Index.getReg();
|
Register IndexR = Index.getReg();
|
||||||
unsigned SSDstR =
|
Register SSDstR =
|
||||||
(LEAOpcode == X86::LEA64_32r) ? getX86SubSuperRegister(DstR, 64) : DstR;
|
(LEAOpcode == X86::LEA64_32r) ? Register(getX86SubSuperRegister(DstR, 64))
|
||||||
|
: DstR;
|
||||||
bool IsScale1 = Scale.getImm() == 1;
|
bool IsScale1 = Scale.getImm() == 1;
|
||||||
bool IsInefficientBase = isInefficientLEAReg(BaseR);
|
bool IsInefficientBase = isInefficientLEAReg(BaseR);
|
||||||
bool IsInefficientIndex = isInefficientLEAReg(IndexR);
|
bool IsInefficientIndex = isInefficientLEAReg(IndexR);
|
||||||
|
|
|
@ -1001,10 +1001,10 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
|
||||||
bool NeedsWinCFI = NeedsWin64CFI || NeedsWinFPO;
|
bool NeedsWinCFI = NeedsWin64CFI || NeedsWinFPO;
|
||||||
bool NeedsDwarfCFI =
|
bool NeedsDwarfCFI =
|
||||||
!IsWin64Prologue && (MMI.hasDebugInfo() || Fn.needsUnwindTableEntry());
|
!IsWin64Prologue && (MMI.hasDebugInfo() || Fn.needsUnwindTableEntry());
|
||||||
unsigned FramePtr = TRI->getFrameRegister(MF);
|
Register FramePtr = TRI->getFrameRegister(MF);
|
||||||
const unsigned MachineFramePtr =
|
const Register MachineFramePtr =
|
||||||
STI.isTarget64BitILP32()
|
STI.isTarget64BitILP32()
|
||||||
? getX86SubSuperRegister(FramePtr, 64) : FramePtr;
|
? Register(getX86SubSuperRegister(FramePtr, 64)) : FramePtr;
|
||||||
Register BasePtr = TRI->getBaseRegister();
|
Register BasePtr = TRI->getBaseRegister();
|
||||||
bool HasWinCFI = false;
|
bool HasWinCFI = false;
|
||||||
|
|
||||||
|
@ -1080,7 +1080,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
|
||||||
int stackGrowth = -SlotSize;
|
int stackGrowth = -SlotSize;
|
||||||
|
|
||||||
// Find the funclet establisher parameter
|
// Find the funclet establisher parameter
|
||||||
unsigned Establisher = X86::NoRegister;
|
Register Establisher = X86::NoRegister;
|
||||||
if (IsClrFunclet)
|
if (IsClrFunclet)
|
||||||
Establisher = Uses64BitFramePtr ? X86::RCX : X86::ECX;
|
Establisher = Uses64BitFramePtr ? X86::RCX : X86::ECX;
|
||||||
else if (IsFunclet)
|
else if (IsFunclet)
|
||||||
|
@ -1615,9 +1615,9 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
|
||||||
DL = MBBI->getDebugLoc();
|
DL = MBBI->getDebugLoc();
|
||||||
// standard x86_64 and NaCl use 64-bit frame/stack pointers, x32 - 32-bit.
|
// standard x86_64 and NaCl use 64-bit frame/stack pointers, x32 - 32-bit.
|
||||||
const bool Is64BitILP32 = STI.isTarget64BitILP32();
|
const bool Is64BitILP32 = STI.isTarget64BitILP32();
|
||||||
unsigned FramePtr = TRI->getFrameRegister(MF);
|
Register FramePtr = TRI->getFrameRegister(MF);
|
||||||
unsigned MachineFramePtr =
|
unsigned MachineFramePtr =
|
||||||
Is64BitILP32 ? getX86SubSuperRegister(FramePtr, 64) : FramePtr;
|
Is64BitILP32 ? Register(getX86SubSuperRegister(FramePtr, 64)) : FramePtr;
|
||||||
|
|
||||||
bool IsWin64Prologue = MF.getTarget().getMCAsmInfo()->usesWindowsCFI();
|
bool IsWin64Prologue = MF.getTarget().getMCAsmInfo()->usesWindowsCFI();
|
||||||
bool NeedsWin64CFI =
|
bool NeedsWin64CFI =
|
||||||
|
|
|
@ -664,7 +664,7 @@ inline static bool isTruncatedShiftCountForLEA(unsigned ShAmt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool X86InstrInfo::classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
|
bool X86InstrInfo::classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
|
||||||
unsigned Opc, bool AllowSP, unsigned &NewSrc,
|
unsigned Opc, bool AllowSP, Register &NewSrc,
|
||||||
bool &isKill, MachineOperand &ImplicitOp,
|
bool &isKill, MachineOperand &ImplicitOp,
|
||||||
LiveVariables *LV) const {
|
LiveVariables *LV) const {
|
||||||
MachineFunction &MF = *MI.getParent()->getParent();
|
MachineFunction &MF = *MI.getParent()->getParent();
|
||||||
|
@ -911,7 +911,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
|
|
||||||
// LEA can't handle ESP.
|
// LEA can't handle ESP.
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false,
|
||||||
SrcReg, isKill, ImplicitOp, LV))
|
SrcReg, isKill, ImplicitOp, LV))
|
||||||
|
@ -947,7 +947,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
unsigned Opc = MIOpc == X86::INC64r ? X86::LEA64r :
|
unsigned Opc = MIOpc == X86::INC64r ? X86::LEA64r :
|
||||||
(Is64Bit ? X86::LEA64_32r : X86::LEA32r);
|
(Is64Bit ? X86::LEA64_32r : X86::LEA32r);
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false, SrcReg, isKill,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false, SrcReg, isKill,
|
||||||
ImplicitOp, LV))
|
ImplicitOp, LV))
|
||||||
|
@ -970,7 +970,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
: (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
|
: (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
|
||||||
|
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false, SrcReg, isKill,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ false, SrcReg, isKill,
|
||||||
ImplicitOp, LV))
|
ImplicitOp, LV))
|
||||||
|
@ -1005,7 +1005,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
||||||
|
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
||||||
SrcReg, isKill, ImplicitOp, LV))
|
SrcReg, isKill, ImplicitOp, LV))
|
||||||
|
@ -1013,7 +1013,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
|
|
||||||
const MachineOperand &Src2 = MI.getOperand(2);
|
const MachineOperand &Src2 = MI.getOperand(2);
|
||||||
bool isKill2;
|
bool isKill2;
|
||||||
unsigned SrcReg2;
|
Register SrcReg2;
|
||||||
MachineOperand ImplicitOp2 = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp2 = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src2, Opc, /*AllowSP=*/ false,
|
if (!classifyLEAReg(MI, Src2, Opc, /*AllowSP=*/ false,
|
||||||
SrcReg2, isKill2, ImplicitOp2, LV))
|
SrcReg2, isKill2, ImplicitOp2, LV))
|
||||||
|
@ -1054,7 +1054,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
||||||
|
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
||||||
SrcReg, isKill, ImplicitOp, LV))
|
SrcReg, isKill, ImplicitOp, LV))
|
||||||
|
@ -1093,7 +1093,7 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||||
unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
|
||||||
|
|
||||||
bool isKill;
|
bool isKill;
|
||||||
unsigned SrcReg;
|
Register SrcReg;
|
||||||
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
MachineOperand ImplicitOp = MachineOperand::CreateReg(0, false);
|
||||||
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/ true,
|
||||||
SrcReg, isKill, ImplicitOp, LV))
|
SrcReg, isKill, ImplicitOp, LV))
|
||||||
|
|
|
@ -218,7 +218,7 @@ public:
|
||||||
/// Reference parameters are set to indicate how caller should add this
|
/// Reference parameters are set to indicate how caller should add this
|
||||||
/// operand to the LEA instruction.
|
/// operand to the LEA instruction.
|
||||||
bool classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
|
bool classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
|
||||||
unsigned LEAOpcode, bool AllowSP, unsigned &NewSrc,
|
unsigned LEAOpcode, bool AllowSP, Register &NewSrc,
|
||||||
bool &isKill, MachineOperand &ImplicitOp,
|
bool &isKill, MachineOperand &ImplicitOp,
|
||||||
LiveVariables *LV) const;
|
LiveVariables *LV) const;
|
||||||
|
|
||||||
|
|
|
@ -544,7 +544,7 @@ BitVector X86RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||||
"Stack realignment in presence of dynamic allocas is not supported with"
|
"Stack realignment in presence of dynamic allocas is not supported with"
|
||||||
"this calling convention.");
|
"this calling convention.");
|
||||||
|
|
||||||
unsigned BasePtr = getX86SubSuperRegister(getBaseRegister(), 64);
|
Register BasePtr = getX86SubSuperRegister(getBaseRegister(), 64);
|
||||||
for (MCSubRegIterator I(BasePtr, this, /*IncludeSelf=*/true);
|
for (MCSubRegIterator I(BasePtr, this, /*IncludeSelf=*/true);
|
||||||
I.isValid(); ++I)
|
I.isValid(); ++I)
|
||||||
Reserved.set(*I);
|
Reserved.set(*I);
|
||||||
|
@ -729,7 +729,7 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||||
// register as source operand, semantic is the same and destination is
|
// register as source operand, semantic is the same and destination is
|
||||||
// 32-bits. It saves one byte per lea in code since 0x67 prefix is avoided.
|
// 32-bits. It saves one byte per lea in code since 0x67 prefix is avoided.
|
||||||
// Don't change BasePtr since it is used later for stack adjustment.
|
// Don't change BasePtr since it is used later for stack adjustment.
|
||||||
unsigned MachineBasePtr = BasePtr;
|
Register MachineBasePtr = BasePtr;
|
||||||
if (Opc == X86::LEA64_32r && X86::GR32RegClass.contains(BasePtr))
|
if (Opc == X86::LEA64_32r && X86::GR32RegClass.contains(BasePtr))
|
||||||
MachineBasePtr = getX86SubSuperRegister(BasePtr, 64);
|
MachineBasePtr = getX86SubSuperRegister(BasePtr, 64);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue