@@ -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