Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:AI

45     bool expandAtomicRMW(AtomicRMWInst *AI);
84 if (AtomicRMWInst *AI = dyn_cast<AtomicRMWInst>(Inst))
85 MadeChange |= expandAtomicRMW(AI);
125 AtomicRMWInst *AI =
131 return expandAtomicRMW(AI);
134 bool AtomicExpandLoadLinked::expandAtomicRMW(AtomicRMWInst *AI) {
135 AtomicOrdering Order = AI->getOrdering();
136 Value *Addr = AI->getPointerOperand();
137 BasicBlock *BB = AI->getParent();
155 BasicBlock *ExitBB = BB->splitBasicBlock(AI, "atomicrmw.end");
158 // This grabs the DebugLoc from AI.
159 IRBuilder<> Builder(AI);
175 switch (AI->getOperation()) {
177 NewVal = AI->getValOperand();
180 NewVal = Builder.CreateAdd(Loaded, AI->getValOperand(), "new");
183 NewVal = Builder.CreateSub(Loaded, AI->getValOperand(), "new");
186 NewVal = Builder.CreateAnd(Loaded, AI->getValOperand(), "new");
189 NewVal = Builder.CreateNot(Builder.CreateAnd(Loaded, AI->getValOperand()),
193 NewVal = Builder.CreateOr(Loaded, AI->getValOperand(), "new");
196 NewVal = Builder.CreateXor(Loaded, AI->getValOperand(), "new");
199 NewVal = Builder.CreateICmpSGT(Loaded, AI->getValOperand());
200 NewVal = Builder.CreateSelect(NewVal, Loaded, AI->getValOperand(), "new");
203 NewVal = Builder.CreateICmpSLE(Loaded, AI->getValOperand());
204 NewVal = Builder.CreateSelect(NewVal, Loaded, AI->getValOperand(), "new");
207 NewVal = Builder.CreateICmpUGT(Loaded, AI->getValOperand());
208 NewVal = Builder.CreateSelect(NewVal, Loaded, AI->getValOperand(), "new");
211 NewVal = Builder.CreateICmpULE(Loaded, AI->getValOperand());
212 NewVal = Builder.CreateSelect(NewVal, Loaded, AI->getValOperand(), "new");
227 AI->replaceAllUsesWith(Loaded);
228 AI->eraseFromParent();