@@ -320,34 +320,37 @@ bool RISCVExpandPseudo::expandRV32ZdinxStore(MachineBasicBlock &MBB,
320320 Register Hi =
321321 TRI->getSubReg (MBBI->getOperand (0 ).getReg (), RISCV::sub_gpr_odd);
322322
323- assert (MBBI->hasOneMemOperand () && " Expected mem operand" );
324- MachineMemOperand *OldMMO = MBBI->memoperands ().front ();
325- MachineFunction *MF = MBB.getParent ();
326- MachineMemOperand *MMOLo = MF->getMachineMemOperand (OldMMO, 0 , 4 );
327- MachineMemOperand *MMOHi = MF->getMachineMemOperand (OldMMO, 4 , 4 );
328-
329- BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
330- .addReg (Lo, getKillRegState (MBBI->getOperand (0 ).isKill ()))
331- .addReg (MBBI->getOperand (1 ).getReg ())
332- .add (MBBI->getOperand (2 ))
333- .setMemRefs (MMOLo);
323+ auto MIBLo = BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
324+ .addReg (Lo, getKillRegState (MBBI->getOperand (0 ).isKill ()))
325+ .addReg (MBBI->getOperand (1 ).getReg ())
326+ .add (MBBI->getOperand (2 ));
334327
328+ MachineInstrBuilder MIBHi;
335329 if (MBBI->getOperand (2 ).isGlobal () || MBBI->getOperand (2 ).isCPI ()) {
336330 assert (MBBI->getOperand (2 ).getOffset () % 8 == 0 );
337331 MBBI->getOperand (2 ).setOffset (MBBI->getOperand (2 ).getOffset () + 4 );
338- BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
339- .addReg (Hi, getKillRegState (MBBI->getOperand (0 ).isKill ()))
340- .add (MBBI->getOperand (1 ))
341- .add (MBBI->getOperand (2 ))
342- .setMemRefs (MMOHi);
332+ MIBHi = BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
333+ .addReg (Hi, getKillRegState (MBBI->getOperand (0 ).isKill ()))
334+ .add (MBBI->getOperand (1 ))
335+ .add (MBBI->getOperand (2 ));
343336 } else {
344337 assert (isInt<12 >(MBBI->getOperand (2 ).getImm () + 4 ));
345- BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
346- .addReg (Hi, getKillRegState (MBBI->getOperand (0 ).isKill ()))
347- .add (MBBI->getOperand (1 ))
348- .addImm (MBBI->getOperand (2 ).getImm () + 4 )
349- .setMemRefs (MMOHi);
338+ MIBHi = BuildMI (MBB, MBBI, DL, TII->get (RISCV::SW))
339+ .addReg (Hi, getKillRegState (MBBI->getOperand (0 ).isKill ()))
340+ .add (MBBI->getOperand (1 ))
341+ .addImm (MBBI->getOperand (2 ).getImm () + 4 );
342+ }
343+
344+ if (!MBBI->memoperands_empty ()) {
345+ assert (MBBI->hasOneMemOperand () && " Expected mem operand" );
346+ MachineMemOperand *OldMMO = MBBI->memoperands ().front ();
347+ MachineFunction *MF = MBB.getParent ();
348+ MachineMemOperand *MMOLo = MF->getMachineMemOperand (OldMMO, 0 , 4 );
349+ MachineMemOperand *MMOHi = MF->getMachineMemOperand (OldMMO, 4 , 4 );
350+ MIBLo.setMemRefs (MMOLo);
351+ MIBHi.setMemRefs (MMOHi);
350352 }
353+
351354 MBBI->eraseFromParent ();
352355 return true ;
353356}
@@ -364,46 +367,48 @@ bool RISCVExpandPseudo::expandRV32ZdinxLoad(MachineBasicBlock &MBB,
364367 Register Hi =
365368 TRI->getSubReg (MBBI->getOperand (0 ).getReg (), RISCV::sub_gpr_odd);
366369
367- assert (MBBI->hasOneMemOperand () && " Expected mem operand" );
368- MachineMemOperand *OldMMO = MBBI->memoperands ().front ();
369- MachineFunction *MF = MBB.getParent ();
370- MachineMemOperand *MMOLo = MF->getMachineMemOperand (OldMMO, 0 , 4 );
371- MachineMemOperand *MMOHi = MF->getMachineMemOperand (OldMMO, 4 , 4 );
370+ MachineInstrBuilder MIBLo, MIBHi;
372371
373372 // If the register of operand 1 is equal to the Lo register, then swap the
374373 // order of loading the Lo and Hi statements.
375374 bool IsOp1EqualToLo = Lo == MBBI->getOperand (1 ).getReg ();
376375 // Order: Lo, Hi
377376 if (!IsOp1EqualToLo) {
378- BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Lo)
379- .addReg (MBBI->getOperand (1 ).getReg ())
380- .add (MBBI->getOperand (2 ))
381- .setMemRefs (MMOLo);
377+ MIBLo = BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Lo)
378+ .addReg (MBBI->getOperand (1 ).getReg ())
379+ .add (MBBI->getOperand (2 ));
382380 }
383381
384382 if (MBBI->getOperand (2 ).isGlobal () || MBBI->getOperand (2 ).isCPI ()) {
385383 auto Offset = MBBI->getOperand (2 ).getOffset ();
386384 assert (Offset % 8 == 0 );
387385 MBBI->getOperand (2 ).setOffset (Offset + 4 );
388- BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Hi)
389- .addReg (MBBI->getOperand (1 ).getReg ())
390- .add (MBBI->getOperand (2 ))
391- .setMemRefs (MMOHi);
386+ MIBHi = BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Hi)
387+ .addReg (MBBI->getOperand (1 ).getReg ())
388+ .add (MBBI->getOperand (2 ));
392389 MBBI->getOperand (2 ).setOffset (Offset);
393390 } else {
394391 assert (isInt<12 >(MBBI->getOperand (2 ).getImm () + 4 ));
395- BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Hi)
396- .addReg (MBBI->getOperand (1 ).getReg ())
397- .addImm (MBBI->getOperand (2 ).getImm () + 4 )
398- .setMemRefs (MMOHi);
392+ MIBHi = BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Hi)
393+ .addReg (MBBI->getOperand (1 ).getReg ())
394+ .addImm (MBBI->getOperand (2 ).getImm () + 4 );
399395 }
400396
401397 // Order: Hi, Lo
402398 if (IsOp1EqualToLo) {
403- BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Lo)
404- .addReg (MBBI->getOperand (1 ).getReg ())
405- .add (MBBI->getOperand (2 ))
406- .setMemRefs (MMOLo);
399+ MIBLo = BuildMI (MBB, MBBI, DL, TII->get (RISCV::LW), Lo)
400+ .addReg (MBBI->getOperand (1 ).getReg ())
401+ .add (MBBI->getOperand (2 ));
402+ }
403+
404+ if (!MBBI->memoperands_empty ()) {
405+ assert (MBBI->hasOneMemOperand () && " Expected mem operand" );
406+ MachineMemOperand *OldMMO = MBBI->memoperands ().front ();
407+ MachineFunction *MF = MBB.getParent ();
408+ MachineMemOperand *MMOLo = MF->getMachineMemOperand (OldMMO, 0 , 4 );
409+ MachineMemOperand *MMOHi = MF->getMachineMemOperand (OldMMO, 4 , 4 );
410+ MIBLo.setMemRefs (MMOLo);
411+ MIBHi.setMemRefs (MMOHi);
407412 }
408413
409414 MBBI->eraseFromParent ();
0 commit comments