diff options
| author | James Molloy <james.molloy@arm.com> | 2014-01-20 17:14:48 +0000 | 
|---|---|---|
| committer | James Molloy <james.molloy@arm.com> | 2014-01-20 17:14:48 +0000 | 
| commit | 43ccae1bb4fb602595c028af2414f7c83b23ffce (patch) | |
| tree | 9dd68231b406e918c78aa328f7a41f6018d0c12a /llvm/lib/Target/ARM | |
| parent | db2a4af37fadedecaf3e7b396af75f91757a0719 (diff) | |
| download | bcm5719-llvm-43ccae1bb4fb602595c028af2414f7c83b23ffce.tar.gz bcm5719-llvm-43ccae1bb4fb602595c028af2414f7c83b23ffce.zip  | |
Remove the useless pseudo instructions VDUPfdf and VDUPfqf, replacing them with patterns to match VDUPLN.
llvm-svn: 199675
Diffstat (limited to 'llvm/lib/Target/ARM')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp | 27 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrNEON.td | 10 | 
2 files changed, 6 insertions, 31 deletions
diff --git a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp index f2aba620d3a..62f9e10252e 100644 --- a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp +++ b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp @@ -1079,33 +1079,6 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,        MI.eraseFromParent();        return true;      } -    case ARM::VDUPfqf: -    case ARM::VDUPfdf:{ -      unsigned NewOpc = Opcode == ARM::VDUPfqf ? ARM::VDUPLN32q : -        ARM::VDUPLN32d; -      MachineInstrBuilder MIB = -        BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(NewOpc)); -      unsigned OpIdx = 0; -      unsigned SrcReg = MI.getOperand(1).getReg(); -      unsigned Lane = TRI->getEncodingValue(SrcReg) & 1; -      unsigned DReg = TRI->getMatchingSuperReg(SrcReg, -                            Lane & 1 ? ARM::ssub_1 : ARM::ssub_0, -                            &ARM::DPR_VFP2RegClass); -      // The lane is [0,1] for the containing DReg superregister. -      // Copy the dst/src register operands. -      MIB.addOperand(MI.getOperand(OpIdx++)); -      MIB.addReg(DReg); -      ++OpIdx; -      // Add the lane select operand. -      MIB.addImm(Lane); -      // Add the predicate operands. -      MIB.addOperand(MI.getOperand(OpIdx++)); -      MIB.addOperand(MI.getOperand(OpIdx++)); - -      TransferImpOps(MI, MIB, MIB); -      MI.eraseFromParent(); -      return true; -    }      case ARM::VLD2q8Pseudo:      case ARM::VLD2q16Pseudo: diff --git a/llvm/lib/Target/ARM/ARMInstrNEON.td b/llvm/lib/Target/ARM/ARMInstrNEON.td index 0b05c08ed94..3d993eb9642 100644 --- a/llvm/lib/Target/ARM/ARMInstrNEON.td +++ b/llvm/lib/Target/ARM/ARMInstrNEON.td @@ -5490,10 +5490,12 @@ def : Pat<(v4f32 (NEONvduplane (v4f32 QPR:$src), imm:$lane)),                                     (DSubReg_i32_reg imm:$lane))),                             (SubReg_i32_lane imm:$lane)))>; -def  VDUPfdf : PseudoNeonI<(outs DPR:$dst), (ins SPR:$src), IIC_VMOVD, "", -                    [(set DPR:$dst, (v2f32 (NEONvdup (f32 SPR:$src))))]>; -def  VDUPfqf : PseudoNeonI<(outs QPR:$dst), (ins SPR:$src), IIC_VMOVD, "", -                    [(set QPR:$dst, (v4f32 (NEONvdup (f32 SPR:$src))))]>; +def : Pat<(v2f32 (NEONvdup (f32 SPR:$src))), +          (v2f32 (VDUPLN32d (INSERT_SUBREG (v2f32 (IMPLICIT_DEF)), +                             SPR:$src, ssub_0), (i32 0)))>; +def : Pat<(v4f32 (NEONvdup (f32 SPR:$src))), +          (v4f32 (VDUPLN32q (INSERT_SUBREG (v2f32 (IMPLICIT_DEF)), +                             SPR:$src, ssub_0), (i32 0)))>;  //   VMOVN    : Vector Narrowing Move  defm VMOVN    : N2VN_HSD<0b11,0b11,0b10,0b00100,0,0, IIC_VMOVN,  | 

