Lines Matching refs:Builder
180 IRBuilder<> Builder(I);
182 auto LeadingFence = TLI->emitLeadingFence(Builder, Order, IsStore, IsLoad);
184 auto TrailingFence = TLI->emitTrailingFence(Builder, Order, IsStore, IsLoad);
186 // because there is no easy way of setting Builder insertion point after
216 IRBuilder<> Builder(LI);
221 Value *NewAddr = Builder.CreateBitCast(Addr, PT);
223 auto *NewLI = Builder.CreateLoad(NewAddr);
229 Value *NewVal = Builder.CreateBitCast(NewLI, LI->getType());
242 [](IRBuilder<> &Builder, Value *Loaded) { return Loaded; });
252 IRBuilder<> Builder(LI);
258 TLI->emitLoadLinked(Builder, LI->getPointerOperand(), LI->getOrdering());
259 TLI->emitAtomicCmpXchgNoStoreLLBalance(Builder);
268 IRBuilder<> Builder(LI);
274 Value *Pair = Builder.CreateAtomicCmpXchg(
277 Value *Loaded = Builder.CreateExtractValue(Pair, 0, "loaded");
294 IRBuilder<> Builder(SI);
298 Value *NewVal = Builder.CreateBitCast(SI->getValueOperand(), NewTy);
303 Value *NewAddr = Builder.CreateBitCast(Addr, PT);
305 StoreInst *NewSI = Builder.CreateStore(NewVal, NewAddr);
321 IRBuilder<> Builder(SI);
323 Builder.CreateAtomicRMW(AtomicRMWInst::Xchg, SI->getPointerOperand(),
331 static void createCmpXchgInstFun(IRBuilder<> &Builder, Value *Addr,
335 Value* Pair = Builder.CreateAtomicCmpXchg(
338 Success = Builder.CreateExtractValue(Pair, 1, "success");
339 NewLoaded = Builder.CreateExtractValue(Pair, 0, "newloaded");
344 static Value *performAtomicOp(AtomicRMWInst::BinOp Op, IRBuilder<> &Builder,
351 return Builder.CreateAdd(Loaded, Inc, "new");
353 return Builder.CreateSub(Loaded, Inc, "new");
355 return Builder.CreateAnd(Loaded, Inc, "new");
357 return Builder.CreateNot(Builder.CreateAnd(Loaded, Inc), "new");
359 return Builder.CreateOr(Loaded, Inc, "new");
361 return Builder.CreateXor(Loaded, Inc, "new");
363 NewVal = Builder.CreateICmpSGT(Loaded, Inc);
364 return Builder.CreateSelect(NewVal, Loaded, Inc, "new");
366 NewVal = Builder.CreateICmpSLE(Loaded, Inc);
367 return Builder.CreateSelect(NewVal, Loaded, Inc, "new");
369 NewVal = Builder.CreateICmpUGT(Loaded, Inc);
370 return Builder.CreateSelect(NewVal, Loaded, Inc, "new");
372 NewVal = Builder.CreateICmpULE(Loaded, Inc);
373 return Builder.CreateSelect(NewVal, Loaded, Inc, "new");
385 [&](IRBuilder<> &Builder, Value *Loaded) {
387 Builder, Loaded,
422 IRBuilder<> Builder(I);
428 Builder.SetInsertPoint(BB);
429 Builder.CreateBr(LoopBB);
432 Builder.SetInsertPoint(LoopBB);
433 Value *Loaded = TLI->emitLoadLinked(Builder, Addr, MemOpOrder);
435 Value *NewVal = PerformOp(Builder, Loaded);
438 TLI->emitStoreConditional(Builder, NewVal, Addr, MemOpOrder);
439 Value *TryAgain = Builder.CreateICmpNE(
441 Builder.CreateCondBr(TryAgain, LoopBB, ExitBB);
443 Builder.SetInsertPoint(ExitBB, ExitBB->begin());
501 IRBuilder<> Builder(CI);
507 Builder.SetInsertPoint(BB);
508 TLI->emitLeadingFence(Builder, SuccessOrder, /*IsStore=*/true,
510 Builder.CreateBr(LoopBB);
513 Builder.SetInsertPoint(LoopBB);
514 Value *Loaded = TLI->emitLoadLinked(Builder, Addr, MemOpOrder);
516 Builder.CreateICmpEQ(Loaded, CI->getCompareOperand(), "should_store");
520 Builder.CreateCondBr(ShouldStore, TryStoreBB, NoStoreBB);
522 Builder.SetInsertPoint(TryStoreBB);
524 Builder, CI->getNewValOperand(), Addr, MemOpOrder);
525 StoreSuccess = Builder.CreateICmpEQ(
527 Builder.CreateCondBr(StoreSuccess, SuccessBB,
531 Builder.SetInsertPoint(SuccessBB);
532 TLI->emitTrailingFence(Builder, SuccessOrder, /*IsStore=*/true,
534 Builder.CreateBr(ExitBB);
536 Builder.SetInsertPoint(NoStoreBB);
540 TLI->emitAtomicCmpXchgNoStoreLLBalance(Builder);
541 Builder.CreateBr(FailureBB);
543 Builder.SetInsertPoint(FailureBB);
544 TLI->emitTrailingFence(Builder, FailureOrder, /*IsStore=*/true,
546 Builder.CreateBr(ExitBB);
552 // Setup the builder so we can create any PHIs we need.
553 Builder.SetInsertPoint(ExitBB, ExitBB->begin());
554 PHINode *Success = Builder.CreatePHI(Type::getInt1Ty(Ctx), 2);
585 Res = Builder.CreateInsertValue(UndefValue::get(CI->getType()), Loaded, 0);
586 Res = Builder.CreateInsertValue(Res, Success, 1);
653 IRBuilder<> Builder(AI);
659 Builder.SetInsertPoint(BB);
660 LoadInst *InitLoaded = Builder.CreateLoad(Addr);
663 Builder.CreateBr(LoopBB);
666 Builder.SetInsertPoint(LoopBB);
667 PHINode *Loaded = Builder.CreatePHI(AI->getType(), 2, "loaded");
671 performAtomicOp(AI->getOperation(), Builder, Loaded, AI->getValOperand());
676 CreateCmpXchg(Builder, Addr, Loaded, NewVal, MemOpOrder,
682 Builder.CreateCondBr(Success, ExitBB, LoopBB);
684 Builder.SetInsertPoint(ExitBB, ExitBB->begin());