================ @@ -604,6 +610,109 @@ bool LoongArchExpandAtomicPseudo::expandAtomicCmpXchg( return true; } +bool LoongArchExpandAtomicPseudo::expandAtomicCmpXchg128( + MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, + MachineBasicBlock::iterator &NextMBBI) { + MachineInstr &MI = *MBBI; + DebugLoc DL = MI.getDebugLoc(); + MachineFunction *MF = MBB.getParent(); + auto LoopHeadMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock()); + auto LoopTailMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock()); + auto TailMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock()); + auto DoneMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock()); + + // Insert new MBBs + MF->insert(++MBB.getIterator(), LoopHeadMBB); + MF->insert(++LoopHeadMBB->getIterator(), LoopTailMBB); + MF->insert(++LoopTailMBB->getIterator(), TailMBB); + MF->insert(++TailMBB->getIterator(), DoneMBB); + + // Set up successors and transfer remaining instructions to DoneMBB. + LoopHeadMBB->addSuccessor(LoopTailMBB); + LoopHeadMBB->addSuccessor(TailMBB); + LoopTailMBB->addSuccessor(DoneMBB); + LoopTailMBB->addSuccessor(LoopHeadMBB); + TailMBB->addSuccessor(DoneMBB); + DoneMBB->splice(DoneMBB->end(), &MBB, MI, MBB.end()); + DoneMBB->transferSuccessors(&MBB); + MBB.addSuccessor(LoopHeadMBB); + + Register DestLoReg = MI.getOperand(0).getReg(); + Register DestHiReg = MI.getOperand(1).getReg(); + Register ScratchReg = MI.getOperand(2).getReg(); + Register AddrReg = MI.getOperand(3).getReg(); + Register CmpValLoReg = MI.getOperand(4).getReg(); + Register CmpValHiReg = MI.getOperand(5).getReg(); + Register NewValLoReg = MI.getOperand(6).getReg(); + Register NewValHiReg = MI.getOperand(7).getReg(); + + // .loophead: + // ll.d res_lo, (addr) ---------------- tangaac wrote:
We already have a `dbar acquire` after `ll.d`, do we need another `dbar acquire` before `ll.d`? https://github.com/llvm/llvm-project/pull/116771 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits