STRH only needs the additional operand, not t2STRH. Also invert conditional

to match the one from the load emitter above.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119911 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher
2010-11-20 22:01:38 +00:00
parent f601d6df6f
commit 13df1a0bac

View File

@@ -845,7 +845,6 @@ bool ARMFastISel::SelectLoad(const Instruction *I) {
bool ARMFastISel::ARMEmitStore(EVT VT, unsigned SrcReg, Address &Addr) { bool ARMFastISel::ARMEmitStore(EVT VT, unsigned SrcReg, Address &Addr) {
unsigned StrOpc; unsigned StrOpc;
bool isFloat = false; bool isFloat = false;
bool needReg0Op = false;
switch (VT.getSimpleVT().SimpleTy) { switch (VT.getSimpleVT().SimpleTy) {
default: return false; default: return false;
case MVT::i1: { case MVT::i1: {
@@ -862,7 +861,6 @@ bool ARMFastISel::ARMEmitStore(EVT VT, unsigned SrcReg, Address &Addr) {
break; break;
case MVT::i16: case MVT::i16:
StrOpc = isThumb ? ARM::t2STRHi12 : ARM::STRH; StrOpc = isThumb ? ARM::t2STRHi12 : ARM::STRH;
needReg0Op = true;
break; break;
case MVT::i32: case MVT::i32:
StrOpc = isThumb ? ARM::t2STRi12 : ARM::STRi12; StrOpc = isThumb ? ARM::t2STRi12 : ARM::STRi12;
@@ -886,18 +884,16 @@ bool ARMFastISel::ARMEmitStore(EVT VT, unsigned SrcReg, Address &Addr) {
if (isFloat) if (isFloat)
Addr.Offset /= 4; Addr.Offset /= 4;
// FIXME: The 'needReg0Op' bit goes away once STRH is converted to // ARM::STRH needs an additional operand.
// not use the mega-addrmode stuff. if (!isThumb && VT.getSimpleVT().SimpleTy == MVT::i16)
if (!needReg0Op)
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
TII.get(StrOpc))
.addReg(SrcReg).addReg(Addr.Base.Reg).addImm(Addr.Offset));
else
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
TII.get(StrOpc)) TII.get(StrOpc))
.addReg(SrcReg).addReg(Addr.Base.Reg) .addReg(SrcReg).addReg(Addr.Base.Reg)
.addReg(0).addImm(Addr.Offset)); .addReg(0).addImm(Addr.Offset));
else
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
TII.get(StrOpc))
.addReg(SrcReg).addReg(Addr.Base.Reg).addImm(Addr.Offset));
return true; return true;
} }