mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 08:26:29 +00:00
Reverse order of operands of address operand mem so that the base operand comes
before the offset. This change will enable simplification of function MipsRegisterInfo::eliminateFrameIndex. llvm-svn: 134625
This commit is contained in:
parent
31119a50bc
commit
d3c031eb00
@ -412,18 +412,18 @@ printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
|
||||
// when using stack locations for not load/store instructions
|
||||
// print the same way as all normal 3 operand instructions.
|
||||
if (Modifier && !strcmp(Modifier, "stackloc")) {
|
||||
printOperand(MI, opNum+1, O);
|
||||
O << ", ";
|
||||
printOperand(MI, opNum, O);
|
||||
O << ", ";
|
||||
printOperand(MI, opNum+1, O);
|
||||
return;
|
||||
}
|
||||
|
||||
// Load/Store memory operands -- imm($reg)
|
||||
// If PIC target the target is loaded as the
|
||||
// pattern lw $25,%call16($28)
|
||||
printOperand(MI, opNum, O);
|
||||
O << "(";
|
||||
printOperand(MI, opNum+1, O);
|
||||
O << "(";
|
||||
printOperand(MI, opNum, O);
|
||||
O << ")";
|
||||
}
|
||||
|
||||
|
@ -64,8 +64,8 @@ bool Inserter::runOnMachineFunction(MachineFunction &F) {
|
||||
// Insert lw.
|
||||
++I;
|
||||
DebugLoc dl = I != MBB.end() ? I->getDebugLoc() : DebugLoc();
|
||||
BuildMI(MBB, I, dl, TII->get(Mips::LW), Mips::GP).addImm(0)
|
||||
.addFrameIndex(FI);
|
||||
BuildMI(MBB, I, dl, TII->get(Mips::LW), Mips::GP).addFrameIndex(FI)
|
||||
.addImm(0);
|
||||
Changed = true;
|
||||
}
|
||||
|
||||
@ -77,8 +77,8 @@ bool Inserter::runOnMachineFunction(MachineFunction &F) {
|
||||
|
||||
DebugLoc dl = I->getDebugLoc();
|
||||
// emit lw $gp, ($gp save slot on stack) after jalr
|
||||
BuildMI(MBB, ++I, dl, TII->get(Mips::LW), Mips::GP).addImm(0)
|
||||
.addFrameIndex(FI);
|
||||
BuildMI(MBB, ++I, dl, TII->get(Mips::LW), Mips::GP).addFrameIndex(FI)
|
||||
.addImm(0);
|
||||
Changed = true;
|
||||
}
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ SDNode *MipsDAGToDAGISel::getGlobalBaseReg() {
|
||||
/// ComplexPattern used on MipsInstrInfo
|
||||
/// Used on Mips Load/Store instructions
|
||||
bool MipsDAGToDAGISel::
|
||||
SelectAddr(SDValue Addr, SDValue &Offset, SDValue &Base) {
|
||||
SelectAddr(SDValue Addr, SDValue &Base, SDValue &Offset) {
|
||||
// if Address is FI, get the TargetFrameIndex.
|
||||
if (FrameIndexSDNode *FIN = dyn_cast<FrameIndexSDNode>(Addr)) {
|
||||
Base = CurDAG->getTargetFrameIndex(FIN->getIndex(), MVT::i32);
|
||||
@ -200,7 +200,7 @@ SDNode *MipsDAGToDAGISel::SelectLoadFp64(SDNode *N) {
|
||||
SDValue N1 = N->getOperand(1);
|
||||
SDValue Offset0, Offset1, Base;
|
||||
|
||||
if (!SelectAddr(N1, Offset0, Base) ||
|
||||
if (!SelectAddr(N1, Base, Offset0) ||
|
||||
N1.getValueType() != MVT::i32)
|
||||
return NULL;
|
||||
|
||||
@ -230,14 +230,14 @@ SDNode *MipsDAGToDAGISel::SelectLoadFp64(SDNode *N) {
|
||||
// lwc $f0, X($3)
|
||||
// lwc $f1, X+4($3)
|
||||
SDNode *LD0 = CurDAG->getMachineNode(Mips::LWC1, dl, MVT::f32,
|
||||
MVT::Other, Offset0, Base, Chain);
|
||||
MVT::Other, Base, Offset0, Chain);
|
||||
SDValue Undef = SDValue(CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
|
||||
dl, NVT), 0);
|
||||
SDValue I0 = CurDAG->getTargetInsertSubreg(Mips::sub_fpeven, dl,
|
||||
MVT::f64, Undef, SDValue(LD0, 0));
|
||||
|
||||
SDNode *LD1 = CurDAG->getMachineNode(Mips::LWC1, dl, MVT::f32,
|
||||
MVT::Other, Offset1, Base, SDValue(LD0, 1));
|
||||
MVT::Other, Base, Offset1, SDValue(LD0, 1));
|
||||
SDValue I1 = CurDAG->getTargetInsertSubreg(Mips::sub_fpodd, dl,
|
||||
MVT::f64, I0, SDValue(LD1, 0));
|
||||
|
||||
@ -264,7 +264,7 @@ SDNode *MipsDAGToDAGISel::SelectStoreFp64(SDNode *N) {
|
||||
SDValue N2 = N->getOperand(2);
|
||||
SDValue Offset0, Offset1, Base;
|
||||
|
||||
if (!SelectAddr(N2, Offset0, Base) ||
|
||||
if (!SelectAddr(N2, Base, Offset0) ||
|
||||
N1.getValueType() != MVT::f64 ||
|
||||
N2.getValueType() != MVT::i32)
|
||||
return NULL;
|
||||
@ -294,12 +294,12 @@ SDNode *MipsDAGToDAGISel::SelectStoreFp64(SDNode *N) {
|
||||
// Generate:
|
||||
// swc $f0, X($3)
|
||||
// swc $f1, X+4($3)
|
||||
SDValue Ops0[] = { FPEven, Offset0, Base, Chain };
|
||||
SDValue Ops0[] = { FPEven, Base, Offset0, Chain };
|
||||
Chain = SDValue(CurDAG->getMachineNode(Mips::SWC1, dl,
|
||||
MVT::Other, Ops0, 4), 0);
|
||||
cast<MachineSDNode>(Chain.getNode())->setMemRefs(MemRefs0, MemRefs0 + 1);
|
||||
|
||||
SDValue Ops1[] = { FPOdd, Offset1, Base, Chain };
|
||||
SDValue Ops1[] = { FPOdd, Base, Offset1, Chain };
|
||||
Chain = SDValue(CurDAG->getMachineNode(Mips::SWC1, dl,
|
||||
MVT::Other, Ops1, 4), 0);
|
||||
cast<MachineSDNode>(Chain.getNode())->setMemRefs(MemRefs0, MemRefs0 + 1);
|
||||
|
@ -774,7 +774,7 @@ MipsTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB,
|
||||
}
|
||||
|
||||
BuildMI(BB, dl, TII->get(Mips::SW))
|
||||
.addReg(Incr).addImm(0).addFrameIndex(fi);
|
||||
.addReg(Incr).addFrameIndex(fi).addImm(0);
|
||||
}
|
||||
BB->addSuccessor(loopMBB);
|
||||
|
||||
@ -785,7 +785,7 @@ MipsTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB,
|
||||
// sc tmp1, 0(ptr)
|
||||
// beq tmp1, $0, loopMBB
|
||||
BB = loopMBB;
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval).addImm(0).addReg(Ptr);
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval).addReg(Ptr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Dest).addReg(Mips::ZERO).addReg(Oldval);
|
||||
if (Nand) {
|
||||
// and tmp2, oldval, incr
|
||||
@ -798,10 +798,10 @@ MipsTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB,
|
||||
} else {
|
||||
// lw tmp2, fi(sp) // load incr from stack
|
||||
// or tmp1, $zero, tmp2
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp2).addImm(0).addFrameIndex(fi);;
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp2).addFrameIndex(fi).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Tmp1).addReg(Mips::ZERO).addReg(Tmp2);
|
||||
}
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp1).addReg(Tmp1).addImm(0).addReg(Ptr);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp1).addReg(Tmp1).addReg(Ptr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::BEQ))
|
||||
.addReg(Tmp1).addReg(Mips::ZERO).addMBB(loopMBB);
|
||||
BB->addSuccessor(loopMBB);
|
||||
@ -910,7 +910,7 @@ MipsTargetLowering::EmitAtomicBinaryPartword(MachineInstr *MI,
|
||||
}
|
||||
|
||||
BuildMI(BB, dl, TII->get(Mips::SW))
|
||||
.addReg(Incr2).addImm(0).addFrameIndex(fi);
|
||||
.addReg(Incr2).addFrameIndex(fi).addImm(0);
|
||||
}
|
||||
BB->addSuccessor(loopMBB);
|
||||
|
||||
@ -923,7 +923,7 @@ MipsTargetLowering::EmitAtomicBinaryPartword(MachineInstr *MI,
|
||||
// sc tmp9,0(addr)
|
||||
// beq tmp9,$0,loopMBB
|
||||
BB = loopMBB;
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval).addImm(0).addReg(Addr);
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval).addReg(Addr).addImm(0);
|
||||
if (Nand) {
|
||||
// and tmp6, oldval, incr2
|
||||
// nor tmp7, $0, tmp6
|
||||
@ -938,13 +938,13 @@ MipsTargetLowering::EmitAtomicBinaryPartword(MachineInstr *MI,
|
||||
} else {
|
||||
// lw tmp6, fi(sp) // load incr2 from stack
|
||||
// or tmp7, $zero, tmp6
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp6).addImm(0).addFrameIndex(fi);;
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp6).addFrameIndex(fi).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Tmp7).addReg(Mips::ZERO).addReg(Tmp6);
|
||||
}
|
||||
BuildMI(BB, dl, TII->get(Mips::AND), Newval).addReg(Tmp7).addReg(Mask);
|
||||
BuildMI(BB, dl, TII->get(Mips::AND), Tmp8).addReg(Oldval).addReg(Mask2);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Tmp9).addReg(Tmp8).addReg(Newval);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp9).addReg(Tmp9).addImm(0).addReg(Addr);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp9).addReg(Tmp9).addReg(Addr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::BEQ))
|
||||
.addReg(Tmp9).addReg(Mips::ZERO).addMBB(loopMBB);
|
||||
BB->addSuccessor(loopMBB);
|
||||
@ -1027,14 +1027,14 @@ MipsTargetLowering::EmitAtomicCmpSwap(MachineInstr *MI,
|
||||
// hoist "or" instruction out of the block loop2MBB.
|
||||
|
||||
BuildMI(BB, dl, TII->get(Mips::SW))
|
||||
.addReg(Newval).addImm(0).addFrameIndex(fi);
|
||||
.addReg(Newval).addFrameIndex(fi).addImm(0);
|
||||
BB->addSuccessor(loop1MBB);
|
||||
|
||||
// loop1MBB:
|
||||
// ll dest, 0(ptr)
|
||||
// bne dest, oldval, exitMBB
|
||||
BB = loop1MBB;
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Dest).addImm(0).addReg(Ptr);
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Dest).addReg(Ptr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::BNE))
|
||||
.addReg(Dest).addReg(Oldval).addMBB(exitMBB);
|
||||
BB->addSuccessor(exitMBB);
|
||||
@ -1046,9 +1046,9 @@ MipsTargetLowering::EmitAtomicCmpSwap(MachineInstr *MI,
|
||||
// sc tmp1, 0(ptr)
|
||||
// beq tmp1, $0, loop1MBB
|
||||
BB = loop2MBB;
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp2).addImm(0).addFrameIndex(fi);;
|
||||
BuildMI(BB, dl, TII->get(Mips::LW), Tmp2).addFrameIndex(fi).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Tmp1).addReg(Mips::ZERO).addReg(Tmp2);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp1).addReg(Tmp1).addImm(0).addReg(Ptr);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp1).addReg(Tmp1).addReg(Ptr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::BEQ))
|
||||
.addReg(Tmp1).addReg(Mips::ZERO).addMBB(loop1MBB);
|
||||
BB->addSuccessor(loop1MBB);
|
||||
@ -1143,7 +1143,7 @@ MipsTargetLowering::EmitAtomicCmpSwapPartword(MachineInstr *MI,
|
||||
// and oldval4,oldval3,mask
|
||||
// bne oldval4,oldval2,exitMBB
|
||||
BB = loop1MBB;
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval3).addImm(0).addReg(Addr);
|
||||
BuildMI(BB, dl, TII->get(Mips::LL), Oldval3).addReg(Addr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::AND), Oldval4).addReg(Oldval3).addReg(Mask);
|
||||
BuildMI(BB, dl, TII->get(Mips::BNE))
|
||||
.addReg(Oldval4).addReg(Oldval2).addMBB(exitMBB);
|
||||
@ -1159,7 +1159,7 @@ MipsTargetLowering::EmitAtomicCmpSwapPartword(MachineInstr *MI,
|
||||
BuildMI(BB, dl, TII->get(Mips::AND), Tmp6).addReg(Oldval3).addReg(Mask2);
|
||||
BuildMI(BB, dl, TII->get(Mips::OR), Tmp7).addReg(Tmp6).addReg(Newval2);
|
||||
BuildMI(BB, dl, TII->get(Mips::SC), Tmp7)
|
||||
.addReg(Tmp7).addImm(0).addReg(Addr);
|
||||
.addReg(Tmp7).addReg(Addr).addImm(0);
|
||||
BuildMI(BB, dl, TII->get(Mips::BEQ))
|
||||
.addReg(Tmp7).addReg(Mips::ZERO).addMBB(loop1MBB);
|
||||
BB->addSuccessor(loop1MBB);
|
||||
|
@ -43,10 +43,10 @@ isLoadFromStackSlot(const MachineInstr *MI, int &FrameIndex) const
|
||||
{
|
||||
if ((MI->getOpcode() == Mips::LW) || (MI->getOpcode() == Mips::LWC1) ||
|
||||
(MI->getOpcode() == Mips::LDC1)) {
|
||||
if ((MI->getOperand(2).isFI()) && // is a stack slot
|
||||
(MI->getOperand(1).isImm()) && // the imm is zero
|
||||
(isZeroImm(MI->getOperand(1)))) {
|
||||
FrameIndex = MI->getOperand(2).getIndex();
|
||||
if ((MI->getOperand(1).isFI()) && // is a stack slot
|
||||
(MI->getOperand(2).isImm()) && // the imm is zero
|
||||
(isZeroImm(MI->getOperand(2)))) {
|
||||
FrameIndex = MI->getOperand(1).getIndex();
|
||||
return MI->getOperand(0).getReg();
|
||||
}
|
||||
}
|
||||
@ -64,10 +64,10 @@ isStoreToStackSlot(const MachineInstr *MI, int &FrameIndex) const
|
||||
{
|
||||
if ((MI->getOpcode() == Mips::SW) || (MI->getOpcode() == Mips::SWC1) ||
|
||||
(MI->getOpcode() == Mips::SDC1)) {
|
||||
if ((MI->getOperand(2).isFI()) && // is a stack slot
|
||||
(MI->getOperand(1).isImm()) && // the imm is zero
|
||||
(isZeroImm(MI->getOperand(1)))) {
|
||||
FrameIndex = MI->getOperand(2).getIndex();
|
||||
if ((MI->getOperand(1).isFI()) && // is a stack slot
|
||||
(MI->getOperand(2).isImm()) && // the imm is zero
|
||||
(isZeroImm(MI->getOperand(2)))) {
|
||||
FrameIndex = MI->getOperand(1).getIndex();
|
||||
return MI->getOperand(0).getReg();
|
||||
}
|
||||
}
|
||||
@ -164,25 +164,25 @@ storeRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
|
||||
if (RC == Mips::CPURegsRegisterClass)
|
||||
BuildMI(MBB, I, DL, get(Mips::SW)).addReg(SrcReg, getKillRegState(isKill))
|
||||
.addImm(0).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(0);
|
||||
else if (RC == Mips::FGR32RegisterClass)
|
||||
BuildMI(MBB, I, DL, get(Mips::SWC1)).addReg(SrcReg, getKillRegState(isKill))
|
||||
.addImm(0).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(0);
|
||||
else if (RC == Mips::AFGR64RegisterClass) {
|
||||
if (!TM.getSubtarget<MipsSubtarget>().isMips1()) {
|
||||
BuildMI(MBB, I, DL, get(Mips::SDC1))
|
||||
.addReg(SrcReg, getKillRegState(isKill))
|
||||
.addImm(0).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(0);
|
||||
} else {
|
||||
const TargetRegisterInfo *TRI =
|
||||
MBB.getParent()->getTarget().getRegisterInfo();
|
||||
const unsigned *SubSet = TRI->getSubRegisters(SrcReg);
|
||||
BuildMI(MBB, I, DL, get(Mips::SWC1))
|
||||
.addReg(SubSet[0], getKillRegState(isKill))
|
||||
.addImm(0).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(0);
|
||||
BuildMI(MBB, I, DL, get(Mips::SWC1))
|
||||
.addReg(SubSet[1], getKillRegState(isKill))
|
||||
.addImm(4).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(4);
|
||||
}
|
||||
} else
|
||||
llvm_unreachable("Register class not handled!");
|
||||
@ -198,20 +198,20 @@ loadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
if (I != MBB.end()) DL = I->getDebugLoc();
|
||||
|
||||
if (RC == Mips::CPURegsRegisterClass)
|
||||
BuildMI(MBB, I, DL, get(Mips::LW), DestReg).addImm(0).addFrameIndex(FI);
|
||||
BuildMI(MBB, I, DL, get(Mips::LW), DestReg).addFrameIndex(FI).addImm(0);
|
||||
else if (RC == Mips::FGR32RegisterClass)
|
||||
BuildMI(MBB, I, DL, get(Mips::LWC1), DestReg).addImm(0).addFrameIndex(FI);
|
||||
BuildMI(MBB, I, DL, get(Mips::LWC1), DestReg).addFrameIndex(FI).addImm(0);
|
||||
else if (RC == Mips::AFGR64RegisterClass) {
|
||||
if (!TM.getSubtarget<MipsSubtarget>().isMips1()) {
|
||||
BuildMI(MBB, I, DL, get(Mips::LDC1), DestReg).addImm(0).addFrameIndex(FI);
|
||||
BuildMI(MBB, I, DL, get(Mips::LDC1), DestReg).addFrameIndex(FI).addImm(0);
|
||||
} else {
|
||||
const TargetRegisterInfo *TRI =
|
||||
MBB.getParent()->getTarget().getRegisterInfo();
|
||||
const unsigned *SubSet = TRI->getSubRegisters(DestReg);
|
||||
BuildMI(MBB, I, DL, get(Mips::LWC1), SubSet[0])
|
||||
.addImm(0).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(0);
|
||||
BuildMI(MBB, I, DL, get(Mips::LWC1), SubSet[1])
|
||||
.addImm(4).addFrameIndex(FI);
|
||||
.addFrameIndex(FI).addImm(4);
|
||||
}
|
||||
} else
|
||||
llvm_unreachable("Register class not handled!");
|
||||
|
@ -134,7 +134,7 @@ def uimm16 : Operand<i32> {
|
||||
// Address operand
|
||||
def mem : Operand<i32> {
|
||||
let PrintMethod = "printMemOperand";
|
||||
let MIOperandInfo = (ops simm16, CPURegs);
|
||||
let MIOperandInfo = (ops CPURegs, simm16);
|
||||
}
|
||||
|
||||
// Transformation Function - get the lower 16 bits.
|
||||
|
@ -224,7 +224,7 @@ eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
return;
|
||||
}
|
||||
|
||||
Offset += MI.getOperand(i-1).getImm();
|
||||
Offset += MI.getOperand(i+1).getImm();
|
||||
|
||||
DEBUG(errs() << "Offset : " << Offset << "\n" << "<--------->\n");
|
||||
|
||||
@ -262,7 +262,7 @@ eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
BuildMI(MBB, ++II, MI.getDebugLoc(), TII.get(Mips::ATMACRO));
|
||||
|
||||
MI.getOperand(i).ChangeToRegister(NewReg, false);
|
||||
MI.getOperand(i-1).ChangeToImmediate(NewImm);
|
||||
MI.getOperand(i+1).ChangeToImmediate(NewImm);
|
||||
}
|
||||
|
||||
unsigned MipsRegisterInfo::
|
||||
|
Loading…
Reference in New Issue
Block a user