mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-18 11:24:01 +00:00
start to clean up buildMI calls in mips fast-isel
Summary: Merge branch 'master' into 1758_6 Test Plan: No functionality change. Run "make check" and run test-suite. Because our servers are not yet running again I have not yet run test-suite. I will further review myself before submission. Reviewers: dsanders Reviewed By: dsanders Differential Revision: http://reviews.llvm.org/D3819 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210413 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -91,6 +91,20 @@ private:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MachineInstrBuilder EmitInst(unsigned Opc) {
|
||||||
|
return BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc));
|
||||||
|
}
|
||||||
|
|
||||||
|
MachineInstrBuilder EmitInst(unsigned Opc, unsigned DstReg) {
|
||||||
|
return BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc),
|
||||||
|
DstReg);
|
||||||
|
}
|
||||||
|
|
||||||
|
MachineInstrBuilder EmitInstStore(unsigned Opc, unsigned SrcReg,
|
||||||
|
unsigned MemReg, int64_t MemOffset) {
|
||||||
|
return EmitInst(Opc).addReg(SrcReg).addReg(MemReg).addImm(MemOffset);
|
||||||
|
}
|
||||||
|
|
||||||
#include "MipsGenFastISel.inc"
|
#include "MipsGenFastISel.inc"
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -155,10 +169,7 @@ bool MipsFastISel::EmitStore(MVT VT, unsigned SrcReg, Address &Addr,
|
|||||||
//
|
//
|
||||||
if (VT != MVT::i32)
|
if (VT != MVT::i32)
|
||||||
return false;
|
return false;
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::SW))
|
EmitInstStore(Mips::SW, SrcReg, Addr.Base.Reg, Addr.Offset);
|
||||||
.addReg(SrcReg)
|
|
||||||
.addReg(Addr.Base.Reg)
|
|
||||||
.addImm(Addr.Offset);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,8 +209,7 @@ bool MipsFastISel::SelectRet(const Instruction *I) {
|
|||||||
if (Ret->getNumOperands() > 0) {
|
if (Ret->getNumOperands() > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
unsigned RetOpc = Mips::RetRA;
|
EmitInst(Mips::RetRA);
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(RetOpc));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,9 +243,8 @@ unsigned MipsFastISel::MaterializeGV(const GlobalValue *GV, MVT VT) {
|
|||||||
// TLS not supported at this time.
|
// TLS not supported at this time.
|
||||||
if (IsThreadLocal)
|
if (IsThreadLocal)
|
||||||
return 0;
|
return 0;
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::LW), DestReg)
|
EmitInst(Mips::LW, DestReg).addReg(MFI->getGlobalBaseReg()).addGlobalAddress(
|
||||||
.addReg(MFI->getGlobalBaseReg())
|
GV, 0, MipsII::MO_GOT);
|
||||||
.addGlobalAddress(GV, 0, MipsII::MO_GOT);
|
|
||||||
return DestReg;
|
return DestReg;
|
||||||
}
|
}
|
||||||
unsigned MipsFastISel::MaterializeInt(const Constant *C, MVT VT) {
|
unsigned MipsFastISel::MaterializeInt(const Constant *C, MVT VT) {
|
||||||
@ -257,15 +266,10 @@ unsigned MipsFastISel::Materialize32BitInt(int64_t Imm,
|
|||||||
|
|
||||||
if (isInt<16>(Imm)) {
|
if (isInt<16>(Imm)) {
|
||||||
unsigned Opc = Mips::ADDiu;
|
unsigned Opc = Mips::ADDiu;
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc), ResultReg)
|
EmitInst(Opc, ResultReg).addReg(Mips::ZERO).addImm(Imm);
|
||||||
.addReg(Mips::ZERO)
|
|
||||||
.addImm(Imm);
|
|
||||||
return ResultReg;
|
return ResultReg;
|
||||||
} else if (isUInt<16>(Imm)) {
|
} else if (isUInt<16>(Imm)) {
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::ORi),
|
EmitInst(Mips::ORi, ResultReg).addReg(Mips::ZERO).addImm(Imm);
|
||||||
ResultReg)
|
|
||||||
.addReg(Mips::ZERO)
|
|
||||||
.addImm(Imm);
|
|
||||||
return ResultReg;
|
return ResultReg;
|
||||||
}
|
}
|
||||||
unsigned Lo = Imm & 0xFFFF;
|
unsigned Lo = Imm & 0xFFFF;
|
||||||
@ -273,16 +277,10 @@ unsigned MipsFastISel::Materialize32BitInt(int64_t Imm,
|
|||||||
if (Lo) {
|
if (Lo) {
|
||||||
// Both Lo and Hi have nonzero bits.
|
// Both Lo and Hi have nonzero bits.
|
||||||
unsigned TmpReg = createResultReg(RC);
|
unsigned TmpReg = createResultReg(RC);
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::LUi),
|
EmitInst(Mips::LUi, TmpReg).addImm(Hi);
|
||||||
TmpReg).addImm(Hi);
|
EmitInst(Mips::ORi, ResultReg).addReg(TmpReg).addImm(Lo);
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::ORi),
|
|
||||||
ResultReg)
|
|
||||||
.addReg(TmpReg)
|
|
||||||
.addImm(Lo);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::LUi),
|
EmitInst(Mips::LUi, ResultReg).addImm(Hi);
|
||||||
ResultReg).addImm(Hi);
|
|
||||||
}
|
}
|
||||||
return ResultReg;
|
return ResultReg;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user