Index: lib/Target/Mips/MipsSEISelDAGToDAG.h =================================================================== --- lib/Target/Mips/MipsSEISelDAGToDAG.h +++ lib/Target/Mips/MipsSEISelDAGToDAG.h @@ -32,6 +32,8 @@ void addDSPCtrlRegOperands(bool IsDef, MachineInstr &MI, MachineFunction &MF); + + void addCOPYNodeSW16_MM(MachineFunction &MF, MachineInstr &MI); unsigned getMSACtrlReg(const SDValue RegIdx) const; Index: lib/Target/Mips/MipsSEISelDAGToDAG.cpp =================================================================== --- lib/Target/Mips/MipsSEISelDAGToDAG.cpp +++ lib/Target/Mips/MipsSEISelDAGToDAG.cpp @@ -49,6 +49,25 @@ SelectionDAGISel::getAnalysisUsage(AU); } +void +MipsSEDAGToDAGISel::addCOPYNodeSW16_MM(MachineFunction &MF, MachineInstr &MI) { + MachineBasicBlock &MBB = *MI.getParent(); + const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo(); + const TargetInstrInfo *TII = Subtarget->getInstrInfo(); + MachineRegisterInfo &RegInfo = MF.getRegInfo(); + DebugLoc DL = MI.getDebugLoc(); + MachineBasicBlock::iterator II(MI); + + unsigned Reg = MI.getOperand(0).getReg(); + const auto &GPRMM16ZeroRegClass = + TRI->getRegClass(Mips::GPRMM16ZeroRegClassID); + unsigned NewReg = RegInfo.createVirtualRegister(GPRMM16ZeroRegClass); + + BuildMI(MBB, II, DL, TII->get(Mips::COPY), NewReg).addReg(Reg); + + MI.getOperand(0).setReg(NewReg); +} + void MipsSEDAGToDAGISel::addDSPCtrlRegOperands(bool IsDef, MachineInstr &MI, MachineFunction &MF) { MachineInstrBuilder MIB(MF, &MI); @@ -238,6 +257,9 @@ case Mips::WRDSP: addDSPCtrlRegOperands(true, MI, MF); break; + case Mips::SW16_MM: + addCOPYNodeSW16_MM(MF, MI); + break; default: replaceUsesWithZeroReg(MRI, MI); } Index: test/CodeGen/Mips/tailcall/tailcall.ll =================================================================== --- test/CodeGen/Mips/tailcall/tailcall.ll +++ test/CodeGen/Mips/tailcall/tailcall.ll @@ -10,27 +10,27 @@ ; RUN: -verify-machineinstrs -mips-tail-calls=1 < %s | \ ; RUN: FileCheck %s -check-prefixes=ALL,PIC16 -; RUN: llc -march=mipsel -relocation-model=pic -mattr=+micromips -mips-tail-calls=1 < %s | \ -; RUN: FileCheck %s -check-prefixes=ALL,PIC32MM -; RUN: llc -march=mipsel -relocation-model=static -mattr=+micromips \ +; RUN: llc -march=mipsel -relocation-model=pic -mattr=+micromips -verify-machineinstrs \ +; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefixes=ALL,PIC32MM +; RUN: llc -march=mipsel -relocation-model=static -mattr=+micromips -verify-machineinstrs \ ; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefixes=ALL,STATIC32 -; RUN: llc -march=mipsel -relocation-model=pic -mcpu=mips32r6 -mips-tail-calls=1 < %s | \ -; RUN: FileCheck %s -check-prefixes=ALL,PIC32R6 -; RUN: llc -march=mipsel -relocation-model=static -mcpu=mips32r2 \ +; RUN: llc -march=mipsel -relocation-model=pic -mcpu=mips32r6 -mips-tail-calls=1 < %s \ +; RUN: -verify-machineinstrs | FileCheck %s -check-prefixes=ALL,PIC32R6 +; RUN: llc -march=mipsel -relocation-model=static -mcpu=mips32r2 -verify-machineinstrs \ ; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefixes=ALL,STATIC32 -; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r2 \ +; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r2 -verify-machineinstrs \ ; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefix=PIC64 -; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r6 \ +; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r6 -verify-machineinstrs \ ; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefix=STATIC64 -; RUN: llc -march=mipsel -relocation-model=pic -mcpu=mips32r6 -mattr=+micromips \ +; RUN: llc -march=mipsel -relocation-model=pic -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs \ ; RUN: -mips-tail-calls=1 < %s | FileCheck %s -check-prefixes=ALL,PIC32MM -; RUN: llc -march=mipsel -relocation-model=static -mcpu=mips32r6 \ +; RUN: llc -march=mipsel -relocation-model=static -mcpu=mips32r6 -verify-machineinstrs \ ; RUN: -mattr=+micromips -mips-tail-calls=1 < %s | FileCheck %s -check-prefixes=ALL,STATIC32 -; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r6 \ +; RUN: llc -march=mips64el -relocation-model=pic -mcpu=mips64r6 -verify-machineinstrs \ ; RUN: -mattr=+micromips -mips-tail-calls=1 < %s | FileCheck %s -check-prefix=PIC64R6MM -; RUN: llc -march=mips64el -relocation-model=static -mcpu=mips64r6 \ +; RUN: llc -march=mips64el -relocation-model=static -mcpu=mips64r6 -verify-machineinstrs \ ; RUN: -mattr=+micromips -mips-tail-calls=1 < %s | FileCheck %s -check-prefix=STATIC64 @g0 = common global i32 0, align 4