@@ -320,34 +320,37 @@ bool RISCVExpandPseudo::expandRV32ZdinxStore(MachineBasicBlock &MBB,
320
320
Register Hi =
321
321
TRI->getSubReg (MBBI->getOperand (0 ).getReg (), RISCV::sub_gpr_odd);
322
322
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 ));
334
327
328
+ MachineInstrBuilder MIBHi;
335
329
if (MBBI->getOperand (2 ).isGlobal () || MBBI->getOperand (2 ).isCPI ()) {
336
330
assert (MBBI->getOperand (2 ).getOffset () % 8 == 0 );
337
331
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 ));
343
336
} else {
344
337
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);
350
352
}
353
+
351
354
MBBI->eraseFromParent ();
352
355
return true ;
353
356
}
@@ -364,46 +367,48 @@ bool RISCVExpandPseudo::expandRV32ZdinxLoad(MachineBasicBlock &MBB,
364
367
Register Hi =
365
368
TRI->getSubReg (MBBI->getOperand (0 ).getReg (), RISCV::sub_gpr_odd);
366
369
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;
372
371
373
372
// If the register of operand 1 is equal to the Lo register, then swap the
374
373
// order of loading the Lo and Hi statements.
375
374
bool IsOp1EqualToLo = Lo == MBBI->getOperand (1 ).getReg ();
376
375
// Order: Lo, Hi
377
376
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 ));
382
380
}
383
381
384
382
if (MBBI->getOperand (2 ).isGlobal () || MBBI->getOperand (2 ).isCPI ()) {
385
383
auto Offset = MBBI->getOperand (2 ).getOffset ();
386
384
assert (Offset % 8 == 0 );
387
385
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 ));
392
389
MBBI->getOperand (2 ).setOffset (Offset);
393
390
} else {
394
391
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 );
399
395
}
400
396
401
397
// Order: Hi, Lo
402
398
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);
407
412
}
408
413
409
414
MBBI->eraseFromParent ();
0 commit comments