Lines Matching +full:tri +full:- +full:default +full:- +full:2
1 //===-- PPCExpandAtomicPseudoInsts.cpp - Expand atomic pseudo instrs. -----===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
13 //===----------------------------------------------------------------------===//
26 #define DEBUG_TYPE "ppc-atomic-expand"
33 const PPCRegisterInfo *TRI;
55 const MCInstrDesc &OR = TII->get(PPC::OR8);
56 const MCInstrDesc &XOR = TII->get(PPC::XOR8);
76 TRI = &TII->getRegisterInfo();
106 Register DstHi = TRI->getSubReg(Dst, PPC::sub_gp8_x0);
107 Register DstLo = TRI->getSubReg(Dst, PPC::sub_gp8_x1);
109 Register Hi = MI.getOperand(2).getReg();
114 default:
122 const MCInstrDesc &LL = TII->get(PPC::LQARX);
123 const MCInstrDesc &SC = TII->get(PPC::STQCX);
129 MachineBasicBlock *LoopMBB = MF->CreateMachineBasicBlock(BB);
130 MachineBasicBlock *ExitMBB = MF->CreateMachineBasicBlock(BB);
131 MF->insert(MFI, LoopMBB);
132 MF->insert(MFI, ExitMBB);
133 ExitMBB->splice(ExitMBB->begin(), &MBB, std::next(MI.getIterator()),
135 ExitMBB->transferSuccessorsAndUpdatePHIs(&MBB);
138 // For non-min/max operations, control flow is kinda like:
146 // bne- LoopMBB
150 Register OldHi = TRI->getSubReg(Old, PPC::sub_gp8_x0);
151 Register OldLo = TRI->getSubReg(Old, PPC::sub_gp8_x1);
153 Register ScratchHi = TRI->getSubReg(Scratch, PPC::sub_gp8_x0);
154 Register ScratchLo = TRI->getSubReg(Scratch, PPC::sub_gp8_x1);
155 Register RA = MI.getOperand(2).getReg();
166 PairedCopy(TII, *CurrentMBB, CurrentMBB->end(), DL, ScratchHi, ScratchLo,
170 BuildMI(CurrentMBB, DL, TII->get(PPC::ADDC8), ScratchLo)
173 BuildMI(CurrentMBB, DL, TII->get(PPC::ADDE8), ScratchHi)
178 BuildMI(CurrentMBB, DL, TII->get(PPC::SUBFC8), ScratchLo)
181 BuildMI(CurrentMBB, DL, TII->get(PPC::SUBFE8), ScratchHi)
188 BuildMI(CurrentMBB, DL, TII->get((Instr)), ScratchLo) \
191 BuildMI(CurrentMBB, DL, TII->get((Instr)), ScratchHi) \
201 default:
205 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC))
209 CurrentMBB->addSuccessor(LoopMBB);
210 CurrentMBB->addSuccessor(ExitMBB);
220 const MCInstrDesc &LL = TII->get(PPC::LQARX);
221 const MCInstrDesc &SC = TII->get(PPC::STQCX);
226 Register OldHi = TRI->getSubReg(Old, PPC::sub_gp8_x0);
227 Register OldLo = TRI->getSubReg(Old, PPC::sub_gp8_x1);
229 Register ScratchHi = TRI->getSubReg(Scratch, PPC::sub_gp8_x0);
230 Register ScratchLo = TRI->getSubReg(Scratch, PPC::sub_gp8_x1);
231 Register RA = MI.getOperand(2).getReg();
248 MachineBasicBlock *LoopCmpMBB = MF->CreateMachineBasicBlock(BB);
249 MachineBasicBlock *CmpSuccMBB = MF->CreateMachineBasicBlock(BB);
250 MachineBasicBlock *ExitMBB = MF->CreateMachineBasicBlock(BB);
251 MF->insert(MFI, LoopCmpMBB);
252 MF->insert(MFI, CmpSuccMBB);
253 MF->insert(MFI, ExitMBB);
254 ExitMBB->splice(ExitMBB->begin(), &MBB, std::next(MI.getIterator()),
256 ExitMBB->transferSuccessorsAndUpdatePHIs(&MBB);
261 BuildMI(CurrentMBB, DL, TII->get(PPC::XOR8), ScratchLo)
264 BuildMI(CurrentMBB, DL, TII->get(PPC::XOR8), ScratchHi)
267 BuildMI(CurrentMBB, DL, TII->get(PPC::OR8_rec), ScratchLo)
270 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC))
274 CurrentMBB->addSuccessor(CmpSuccMBB);
275 CurrentMBB->addSuccessor(ExitMBB);
278 PairedCopy(TII, *CurrentMBB, CurrentMBB->end(), DL, ScratchHi, ScratchLo,
281 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC))
285 CurrentMBB->addSuccessor(LoopCmpMBB);
286 CurrentMBB->addSuccessor(ExitMBB);