Home | History | Annotate | Download | only in X86

Lines Matching defs:AI

59     bool shouldExpandAtomicRMW(AtomicRMWInst *AI);
61 bool expandAtomicRMW(AtomicRMWInst *AI);
89 if (AtomicRMWInst *AI = dyn_cast<AtomicRMWInst>(Inst))
90 MadeChange |= expandAtomicRMW(AI);
120 bool X86AtomicExpandPass::shouldExpandAtomicRMW(AtomicRMWInst *AI) {
124 if (needsCmpXchgNb(AI->getType()))
127 if (AI->getType()->getPrimitiveSizeInBits() > NativeWidth)
130 AtomicRMWInst::BinOp Op = AI->getOperation();
144 return !AI->use_empty();
164 if (AtomicRMWInst *AI = dyn_cast<AtomicRMWInst>(Inst))
165 return shouldExpandAtomicRMW(AI);
209 bool X86AtomicExpandPass::expandAtomicRMW(AtomicRMWInst *AI) {
211 AI->getOrdering() == Unordered ? Monotonic : AI->getOrdering();
212 Value *Addr = AI->getPointerOperand();
213 BasicBlock *BB = AI->getParent();
232 BasicBlock *ExitBB = BB->splitBasicBlock(AI, "atomicrmw.end");
235 // This grabs the DebugLoc from AI.
236 IRBuilder<> Builder(AI);
244 InitLoaded->setAlignment(AI->getType()->getPrimitiveSizeInBits());
249 PHINode *Loaded = Builder.CreatePHI(AI->getType(), 2, "loaded");
253 performAtomicOp(AI->getOperation(), Builder, Loaded, AI->getValOperand());
264 AI->replaceAllUsesWith(NewLoaded);
275 AtomicRMWInst *AI =
280 if (shouldExpandAtomicRMW(AI)) {
281 expandAtomicRMW(AI);
282 AI->eraseFromParent();
286 return AI;