@@ -877,13 +877,32 @@ LoongArchInstrInfo::emitLdStWithAddr(MachineInstr &MemI,
877877 assert (AM.ScaledReg == 0 && AM.Scale == 0 &&
878878 " Addressing mode not supported for folding" );
879879
880- return BuildMI (MBB, MemI, DL, get (MemI.getOpcode ()))
881- .addReg (MemI.getOperand (0 ).getReg (),
882- MemI.mayLoad () ? RegState::Define : 0 )
883- .addReg (AM.BaseReg )
884- .addImm (AM.Displacement )
885- .setMemRefs (MemI.memoperands ())
886- .setMIFlags (MemI.getFlags ());
880+ unsigned MemIOp = MemI.getOpcode ();
881+ switch (MemIOp) {
882+ default :
883+ return BuildMI (MBB, MemI, DL, get (MemIOp))
884+ .addReg (MemI.getOperand (0 ).getReg (),
885+ MemI.mayLoad () ? RegState::Define : 0 )
886+ .addReg (AM.BaseReg )
887+ .addImm (AM.Displacement )
888+ .setMemRefs (MemI.memoperands ())
889+ .setMIFlags (MemI.getFlags ());
890+ case LoongArch::VSTELM_B:
891+ case LoongArch::VSTELM_H:
892+ case LoongArch::VSTELM_W:
893+ case LoongArch::VSTELM_D:
894+ case LoongArch::XVSTELM_B:
895+ case LoongArch::XVSTELM_H:
896+ case LoongArch::XVSTELM_W:
897+ case LoongArch::XVSTELM_D:
898+ return BuildMI (MBB, MemI, DL, get (MemIOp))
899+ .addReg (MemI.getOperand (0 ).getReg (), 0 )
900+ .addReg (AM.BaseReg )
901+ .addImm (AM.Displacement )
902+ .addImm (MemI.getOperand (3 ).getImm ())
903+ .setMemRefs (MemI.memoperands ())
904+ .setMIFlags (MemI.getFlags ());
905+ }
887906}
888907
889908// Returns true if this is the sext.w pattern, addi.w rd, rs, 0.
0 commit comments