Lines Matching +full:tri +full:- +full:default
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; member in __anon356230360111::PPCExpandAtomicPseudo
55 const MCInstrDesc &OR = TII->get(PPC::OR8); in PairedCopy()
56 const MCInstrDesc &XOR = TII->get(PPC::XOR8); in PairedCopy()
76 TRI = &TII->getRegisterInfo(); in runOnMachineFunction()
106 Register DstHi = TRI->getSubReg(Dst, PPC::sub_gp8_x0); in expandMI()
107 Register DstLo = TRI->getSubReg(Dst, PPC::sub_gp8_x1); in expandMI()
114 default: in expandMI()
122 const MCInstrDesc &LL = TII->get(PPC::LQARX); in expandAtomicRMW128()
123 const MCInstrDesc &SC = TII->get(PPC::STQCX); in expandAtomicRMW128()
129 MachineBasicBlock *LoopMBB = MF->CreateMachineBasicBlock(BB); in expandAtomicRMW128()
130 MachineBasicBlock *ExitMBB = MF->CreateMachineBasicBlock(BB); in expandAtomicRMW128()
131 MF->insert(MFI, LoopMBB); in expandAtomicRMW128()
132 MF->insert(MFI, ExitMBB); in expandAtomicRMW128()
133 ExitMBB->splice(ExitMBB->begin(), &MBB, std::next(MI.getIterator()), in expandAtomicRMW128()
135 ExitMBB->transferSuccessorsAndUpdatePHIs(&MBB); in expandAtomicRMW128()
138 // For non-min/max operations, control flow is kinda like: in expandAtomicRMW128()
146 // bne- LoopMBB in expandAtomicRMW128()
150 Register OldHi = TRI->getSubReg(Old, PPC::sub_gp8_x0); in expandAtomicRMW128()
151 Register OldLo = TRI->getSubReg(Old, PPC::sub_gp8_x1); in expandAtomicRMW128()
153 Register ScratchHi = TRI->getSubReg(Scratch, PPC::sub_gp8_x0); in expandAtomicRMW128()
154 Register ScratchLo = TRI->getSubReg(Scratch, PPC::sub_gp8_x1); in expandAtomicRMW128()
166 PairedCopy(TII, *CurrentMBB, CurrentMBB->end(), DL, ScratchHi, ScratchLo, in expandAtomicRMW128()
170 BuildMI(CurrentMBB, DL, TII->get(PPC::ADDC8), ScratchLo) in expandAtomicRMW128()
173 BuildMI(CurrentMBB, DL, TII->get(PPC::ADDE8), ScratchHi) in expandAtomicRMW128()
178 BuildMI(CurrentMBB, DL, TII->get(PPC::SUBFC8), ScratchLo) in expandAtomicRMW128()
181 BuildMI(CurrentMBB, DL, TII->get(PPC::SUBFE8), ScratchHi) in expandAtomicRMW128()
188 BuildMI(CurrentMBB, DL, TII->get((Instr)), ScratchLo) \ in expandAtomicRMW128()
191 BuildMI(CurrentMBB, DL, TII->get((Instr)), ScratchHi) \ in expandAtomicRMW128()
201 default: in expandAtomicRMW128()
205 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC)) in expandAtomicRMW128()
209 CurrentMBB->addSuccessor(LoopMBB); in expandAtomicRMW128()
210 CurrentMBB->addSuccessor(ExitMBB); in expandAtomicRMW128()
220 const MCInstrDesc &LL = TII->get(PPC::LQARX); in expandAtomicCmpSwap128()
221 const MCInstrDesc &SC = TII->get(PPC::STQCX); in expandAtomicCmpSwap128()
226 Register OldHi = TRI->getSubReg(Old, PPC::sub_gp8_x0); in expandAtomicCmpSwap128()
227 Register OldLo = TRI->getSubReg(Old, PPC::sub_gp8_x1); in expandAtomicCmpSwap128()
229 Register ScratchHi = TRI->getSubReg(Scratch, PPC::sub_gp8_x0); in expandAtomicCmpSwap128()
230 Register ScratchLo = TRI->getSubReg(Scratch, PPC::sub_gp8_x1); in expandAtomicCmpSwap128()
248 MachineBasicBlock *LoopCmpMBB = MF->CreateMachineBasicBlock(BB); in expandAtomicCmpSwap128()
249 MachineBasicBlock *CmpSuccMBB = MF->CreateMachineBasicBlock(BB); in expandAtomicCmpSwap128()
250 MachineBasicBlock *ExitMBB = MF->CreateMachineBasicBlock(BB); in expandAtomicCmpSwap128()
251 MF->insert(MFI, LoopCmpMBB); in expandAtomicCmpSwap128()
252 MF->insert(MFI, CmpSuccMBB); in expandAtomicCmpSwap128()
253 MF->insert(MFI, ExitMBB); in expandAtomicCmpSwap128()
254 ExitMBB->splice(ExitMBB->begin(), &MBB, std::next(MI.getIterator()), in expandAtomicCmpSwap128()
256 ExitMBB->transferSuccessorsAndUpdatePHIs(&MBB); in expandAtomicCmpSwap128()
261 BuildMI(CurrentMBB, DL, TII->get(PPC::XOR8), ScratchLo) in expandAtomicCmpSwap128()
264 BuildMI(CurrentMBB, DL, TII->get(PPC::XOR8), ScratchHi) in expandAtomicCmpSwap128()
267 BuildMI(CurrentMBB, DL, TII->get(PPC::OR8_rec), ScratchLo) in expandAtomicCmpSwap128()
270 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC)) in expandAtomicCmpSwap128()
274 CurrentMBB->addSuccessor(CmpSuccMBB); in expandAtomicCmpSwap128()
275 CurrentMBB->addSuccessor(ExitMBB); in expandAtomicCmpSwap128()
278 PairedCopy(TII, *CurrentMBB, CurrentMBB->end(), DL, ScratchHi, ScratchLo, in expandAtomicCmpSwap128()
281 BuildMI(CurrentMBB, DL, TII->get(PPC::BCC)) in expandAtomicCmpSwap128()
285 CurrentMBB->addSuccessor(LoopCmpMBB); in expandAtomicCmpSwap128()
286 CurrentMBB->addSuccessor(ExitMBB); in expandAtomicCmpSwap128()