Lines Matching refs:AI
80 bool tryExpandAtomicRMW(AtomicRMWInst *AI);
91 AtomicRMWInst *widenPartwordAtomicRMW(AtomicRMWInst *AI);
93 void expandAtomicRMWToMaskedIntrinsic(AtomicRMWInst *AI);
119 llvm::expandAtomicRMWToCmpXchg(AtomicRMWInst *AI,
486 AtomicRMWInst *AI = in expandAtomicStore() local
492 return tryExpandAtomicRMW(AI); in expandAtomicStore()
543 bool AtomicExpand::tryExpandAtomicRMW(AtomicRMWInst *AI) { in tryExpandAtomicRMW() argument
544 switch (TLI->shouldExpandAtomicRMWInIR(AI)) { in tryExpandAtomicRMW()
549 unsigned ValueSize = getAtomicOpSize(AI); in tryExpandAtomicRMW()
555 return performAtomicOp(AI->getOperation(), Builder, Loaded, in tryExpandAtomicRMW()
556 AI->getValOperand()); in tryExpandAtomicRMW()
558 expandAtomicOpToLLSC(AI, AI->getType(), AI->getPointerOperand(), in tryExpandAtomicRMW()
559 AI->getOrdering(), PerformOp); in tryExpandAtomicRMW()
565 unsigned ValueSize = getAtomicOpSize(AI); in tryExpandAtomicRMW()
567 expandPartwordAtomicRMW(AI, in tryExpandAtomicRMW()
570 expandAtomicRMWToCmpXchg(AI, createCmpXchgInstFun); in tryExpandAtomicRMW()
575 expandAtomicRMWToMaskedIntrinsic(AI); in tryExpandAtomicRMW()
718 AtomicRMWInst *AI, TargetLoweringBase::AtomicExpansionKind ExpansionKind) { in expandPartwordAtomicRMW() argument
721 AtomicOrdering MemOpOrder = AI->getOrdering(); in expandPartwordAtomicRMW()
723 IRBuilder<> Builder(AI); in expandPartwordAtomicRMW()
726 createMaskInstrs(Builder, AI, AI->getType(), AI->getPointerOperand(), in expandPartwordAtomicRMW()
730 Builder.CreateShl(Builder.CreateZExt(AI->getValOperand(), PMV.WordType), in expandPartwordAtomicRMW()
734 return performMaskedAtomicOp(AI->getOperation(), Builder, Loaded, in expandPartwordAtomicRMW()
735 ValOperand_Shifted, AI->getValOperand(), PMV); in expandPartwordAtomicRMW()
745 AI->replaceAllUsesWith(FinalOldResult); in expandPartwordAtomicRMW()
746 AI->eraseFromParent(); in expandPartwordAtomicRMW()
750 AtomicRMWInst *AtomicExpand::widenPartwordAtomicRMW(AtomicRMWInst *AI) { in widenPartwordAtomicRMW() argument
751 IRBuilder<> Builder(AI); in widenPartwordAtomicRMW()
752 AtomicRMWInst::BinOp Op = AI->getOperation(); in widenPartwordAtomicRMW()
759 createMaskInstrs(Builder, AI, AI->getType(), AI->getPointerOperand(), in widenPartwordAtomicRMW()
763 Builder.CreateShl(Builder.CreateZExt(AI->getValOperand(), PMV.WordType), in widenPartwordAtomicRMW()
775 NewOperand, AI->getOrdering()); in widenPartwordAtomicRMW()
779 AI->replaceAllUsesWith(FinalOldResult); in widenPartwordAtomicRMW()
780 AI->eraseFromParent(); in widenPartwordAtomicRMW()
921 void AtomicExpand::expandAtomicRMWToMaskedIntrinsic(AtomicRMWInst *AI) { in expandAtomicRMWToMaskedIntrinsic() argument
922 IRBuilder<> Builder(AI); in expandAtomicRMWToMaskedIntrinsic()
925 createMaskInstrs(Builder, AI, AI->getType(), AI->getPointerOperand(), in expandAtomicRMWToMaskedIntrinsic()
932 AtomicRMWInst::BinOp RMWOp = AI->getOperation(); in expandAtomicRMWToMaskedIntrinsic()
937 Builder.CreateCast(CastOp, AI->getValOperand(), PMV.WordType), in expandAtomicRMWToMaskedIntrinsic()
940 Builder, AI, PMV.AlignedAddr, ValOperand_Shifted, PMV.Mask, PMV.ShiftAmt, in expandAtomicRMWToMaskedIntrinsic()
941 AI->getOrdering()); in expandAtomicRMWToMaskedIntrinsic()
944 AI->replaceAllUsesWith(FinalOldResult); in expandAtomicRMWToMaskedIntrinsic()
945 AI->eraseFromParent(); in expandAtomicRMWToMaskedIntrinsic()
1405 bool llvm::expandAtomicRMWToCmpXchg(AtomicRMWInst *AI, in expandAtomicRMWToCmpXchg() argument
1407 IRBuilder<> Builder(AI); in expandAtomicRMWToCmpXchg()
1409 Builder, AI->getType(), AI->getPointerOperand(), AI->getOrdering(), in expandAtomicRMWToCmpXchg()
1411 return performAtomicOp(AI->getOperation(), Builder, Loaded, in expandAtomicRMWToCmpXchg()
1412 AI->getValOperand()); in expandAtomicRMWToCmpXchg()
1416 AI->replaceAllUsesWith(Loaded); in expandAtomicRMWToCmpXchg()
1417 AI->eraseFromParent(); in expandAtomicRMWToCmpXchg()