mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-05 10:08:03 +00:00
Split ARM::LDRB into LDRBi12 and LDRBrs. Adjust accordingly. Continuing on
rdar://8477752. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117419 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
28e3fe961f
commit
c1d30212e9
@ -874,7 +874,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
case ARM::PICSTRB: Opcode = ARM::STRB; break;
|
||||
case ARM::PICSTRH: Opcode = ARM::STRH; break;
|
||||
case ARM::PICLDR: Opcode = ARM::LDRrs; break;
|
||||
case ARM::PICLDRB: Opcode = ARM::LDRB; break;
|
||||
case ARM::PICLDRB: Opcode = ARM::LDRBrs; break;
|
||||
case ARM::PICLDRH: Opcode = ARM::LDRH; break;
|
||||
case ARM::PICLDRSB: Opcode = ARM::LDRSB; break;
|
||||
case ARM::PICLDRSH: Opcode = ARM::LDRSH; break;
|
||||
|
@ -1080,7 +1080,7 @@ bool ARMBaseInstrInfo::areLoadsFromSameBasePtr(SDNode *Load1, SDNode *Load2,
|
||||
default:
|
||||
return false;
|
||||
case ARM::LDRi12:
|
||||
case ARM::LDRB:
|
||||
case ARM::LDRBi12:
|
||||
case ARM::LDRD:
|
||||
case ARM::LDRH:
|
||||
case ARM::LDRSB:
|
||||
@ -1099,7 +1099,7 @@ bool ARMBaseInstrInfo::areLoadsFromSameBasePtr(SDNode *Load1, SDNode *Load2,
|
||||
default:
|
||||
return false;
|
||||
case ARM::LDRi12:
|
||||
case ARM::LDRB:
|
||||
case ARM::LDRBi12:
|
||||
case ARM::LDRD:
|
||||
case ARM::LDRH:
|
||||
case ARM::LDRSB:
|
||||
|
@ -1376,7 +1376,7 @@ needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
|
||||
// return false for everything else.
|
||||
unsigned Opc = MI->getOpcode();
|
||||
switch (Opc) {
|
||||
case ARM::LDRi12: case ARM::LDRH: case ARM::LDRB:
|
||||
case ARM::LDRi12: case ARM::LDRH: case ARM::LDRBi12:
|
||||
case ARM::STR: case ARM::STRH: case ARM::STRB:
|
||||
case ARM::t2LDRi12: case ARM::t2LDRi8:
|
||||
case ARM::t2STRi12: case ARM::t2STRi8:
|
||||
|
@ -746,7 +746,7 @@ bool ARMFastISel::ARMEmitLoad(EVT VT, unsigned &ResultReg,
|
||||
RC = ARM::GPRRegisterClass;
|
||||
break;
|
||||
case MVT::i8:
|
||||
Opc = isThumb ? ARM::t2LDRBi12 : ARM::LDRB;
|
||||
Opc = isThumb ? ARM::t2LDRBi12 : ARM::LDRBi12;
|
||||
RC = ARM::GPRRegisterClass;
|
||||
break;
|
||||
case MVT::i32:
|
||||
@ -774,8 +774,6 @@ bool ARMFastISel::ARMEmitLoad(EVT VT, unsigned &ResultReg,
|
||||
if (isFloat)
|
||||
Offset /= 4;
|
||||
|
||||
// The thumb and floating point instructions both take 2 operands, ARM takes
|
||||
// another register.
|
||||
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
||||
TII.get(Opc), ResultReg)
|
||||
.addReg(Base).addImm(Offset));
|
||||
|
@ -39,7 +39,7 @@ unsigned ARMInstrInfo::getUnindexedOpcode(unsigned Opc) const {
|
||||
return ARM::LDRH;
|
||||
case ARM::LDRB_PRE:
|
||||
case ARM::LDRB_POST:
|
||||
return ARM::LDRB;
|
||||
return ARM::LDRBi12;
|
||||
case ARM::LDRSH_PRE:
|
||||
case ARM::LDRSH_POST:
|
||||
return ARM::LDRSH;
|
||||
|
@ -1400,8 +1400,10 @@ def RFE : ABXI<{1,0,0,?}, (outs), (ins addrmode4:$addr, GPR:$base),
|
||||
// Load
|
||||
|
||||
|
||||
defm LDR : AI_ldr1<0, "ldr", IIC_iLoad_i, IIC_iLoad_r,
|
||||
UnOpFrag<(load node:$Src)>>;
|
||||
defm LDR : AI_ldr1<0, "ldr", IIC_iLoad_i, IIC_iLoad_r,
|
||||
UnOpFrag<(load node:$Src)>>;
|
||||
defm LDRB : AI_ldr1<1, "ldrb", IIC_iLoad_bh_i, IIC_iLoad_bh_r,
|
||||
UnOpFrag<(zextloadi8 node:$Src)>>;
|
||||
|
||||
// Special LDR for loads from non-pc-relative constpools.
|
||||
let canFoldAsLoad = 1, mayLoad = 1, neverHasSideEffects = 1,
|
||||
@ -1421,10 +1423,6 @@ def LDRH : AI3ldh<(outs GPR:$dst), (ins addrmode3:$addr), LdMiscFrm,
|
||||
IIC_iLoad_bh_r, "ldrh", "\t$dst, $addr",
|
||||
[(set GPR:$dst, (zextloadi16 addrmode3:$addr))]>;
|
||||
|
||||
def LDRB : AI2ldb<(outs GPR:$dst), (ins addrmode2:$addr), LdFrm,
|
||||
IIC_iLoad_bh_r, "ldrb", "\t$dst, $addr",
|
||||
[(set GPR:$dst, (zextloadi8 addrmode2:$addr))]>;
|
||||
|
||||
// Loads with sign extension
|
||||
def LDRSH : AI3ldsh<(outs GPR:$dst), (ins addrmode3:$addr), LdMiscFrm,
|
||||
IIC_iLoad_bh_r, "ldrsh", "\t$dst, $addr",
|
||||
@ -3165,11 +3163,16 @@ def : ARMPat<(ARMcall texternalsym:$func), (BLr9 texternalsym:$func)>,
|
||||
Requires<[IsARM, IsDarwin]>;
|
||||
|
||||
// zextload i1 -> zextload i8
|
||||
def : ARMPat<(zextloadi1 addrmode2:$addr), (LDRB addrmode2:$addr)>;
|
||||
//def : ARMPat<(zextloadi1 addrmode2:$addr), (LDRB addrmode2:$addr)>;
|
||||
def : ARMPat<(zextloadi1 addrmode_imm12:$addr), (LDRBi12 addrmode_imm12:$addr)>;
|
||||
def : ARMPat<(zextloadi1 ldst_so_reg:$addr), (LDRBrs ldst_so_reg:$addr)>;
|
||||
|
||||
// extload -> zextload
|
||||
def : ARMPat<(extloadi1 addrmode2:$addr), (LDRB addrmode2:$addr)>;
|
||||
def : ARMPat<(extloadi8 addrmode2:$addr), (LDRB addrmode2:$addr)>;
|
||||
def : ARMPat<(extloadi1 addrmode_imm12:$addr), (LDRBi12 addrmode_imm12:$addr)>;
|
||||
def : ARMPat<(extloadi1 ldst_so_reg:$addr), (LDRBrs ldst_so_reg:$addr)>;
|
||||
def : ARMPat<(extloadi8 addrmode_imm12:$addr), (LDRBi12 addrmode_imm12:$addr)>;
|
||||
def : ARMPat<(extloadi8 ldst_so_reg:$addr), (LDRBrs ldst_so_reg:$addr)>;
|
||||
|
||||
def : ARMPat<(extloadi16 addrmode3:$addr), (LDRH addrmode3:$addr)>;
|
||||
|
||||
def : ARMPat<(extloadi8 addrmodepc:$addr), (PICLDRB addrmodepc:$addr)>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user