@@ -347,20 +347,23 @@ bool LoongArchExpandAtomicPseudo::expandAtomicMinMaxOp(
347
347
auto LoopHeadMBB = MF->CreateMachineBasicBlock (MBB.getBasicBlock ());
348
348
auto LoopIfBodyMBB = MF->CreateMachineBasicBlock (MBB.getBasicBlock ());
349
349
auto LoopTailMBB = MF->CreateMachineBasicBlock (MBB.getBasicBlock ());
350
+ auto TailMBB = MF->CreateMachineBasicBlock (MBB.getBasicBlock ());
350
351
auto DoneMBB = MF->CreateMachineBasicBlock (MBB.getBasicBlock ());
351
352
352
353
// Insert new MBBs.
353
354
MF->insert (++MBB.getIterator (), LoopHeadMBB);
354
355
MF->insert (++LoopHeadMBB->getIterator (), LoopIfBodyMBB);
355
356
MF->insert (++LoopIfBodyMBB->getIterator (), LoopTailMBB);
356
- MF->insert (++LoopTailMBB->getIterator (), DoneMBB);
357
+ MF->insert (++LoopTailMBB->getIterator (), TailMBB);
358
+ MF->insert (++TailMBB->getIterator (), DoneMBB);
357
359
358
360
// Set up successors and transfer remaining instructions to DoneMBB.
359
361
LoopHeadMBB->addSuccessor (LoopIfBodyMBB);
360
362
LoopHeadMBB->addSuccessor (LoopTailMBB);
361
363
LoopIfBodyMBB->addSuccessor (LoopTailMBB);
362
364
LoopTailMBB->addSuccessor (LoopHeadMBB);
363
- LoopTailMBB->addSuccessor (DoneMBB);
365
+ LoopTailMBB->addSuccessor (TailMBB);
366
+ TailMBB->addSuccessor (DoneMBB);
364
367
DoneMBB->splice (DoneMBB->end (), &MBB, MI, MBB.end ());
365
368
DoneMBB->transferSuccessors (&MBB);
366
369
MBB.addSuccessor (LoopHeadMBB);
@@ -427,7 +430,10 @@ bool LoongArchExpandAtomicPseudo::expandAtomicMinMaxOp(
427
430
BuildMI (LoopTailMBB, DL, TII->get (LoongArch::BEQZ))
428
431
.addReg (Scratch1Reg)
429
432
.addMBB (LoopHeadMBB);
430
- BuildMI (LoopTailMBB, DL, TII->get (LoongArch::DBAR)).addImm (0x700 );
433
+
434
+ // .tail:
435
+ // dbar 0x700
436
+ BuildMI (TailMBB, DL, TII->get (LoongArch::DBAR)).addImm (0x700 );
431
437
432
438
NextMBBI = MBB.end ();
433
439
MI.eraseFromParent ();
@@ -436,6 +442,7 @@ bool LoongArchExpandAtomicPseudo::expandAtomicMinMaxOp(
436
442
computeAndAddLiveIns (LiveRegs, *LoopHeadMBB);
437
443
computeAndAddLiveIns (LiveRegs, *LoopIfBodyMBB);
438
444
computeAndAddLiveIns (LiveRegs, *LoopTailMBB);
445
+ computeAndAddLiveIns (LiveRegs, *TailMBB);
439
446
computeAndAddLiveIns (LiveRegs, *DoneMBB);
440
447
441
448
return true ;
0 commit comments