Lines Matching refs:CGF
31 CodeGenFunction &CGF; member in __anon41f132f00111::AtomicInfo
43 AtomicInfo(CodeGenFunction &CGF, LValue &lvalue) in AtomicInfo() argument
44 : CGF(CGF), AtomicSizeInBits(0), ValueSizeInBits(0), in AtomicInfo()
47 ASTContext &C = CGF.getContext(); in AtomicInfo()
54 EvaluationKind = CGF.getEvaluationKind(ValueTy); in AtomicInfo()
83 auto VoidPtrAddr = CGF.EmitCastToVoidPtr(lvalue.getBitFieldPointer()); in AtomicInfo()
87 VoidPtrAddr = CGF.Builder.CreateConstGEP1_64( in AtomicInfo()
89 auto Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( in AtomicInfo()
91 CGF.Builder.getIntNTy(AtomicSizeInBits)->getPointerTo(), in AtomicInfo()
121 AtomicTy = ValueTy = CGF.getContext().getExtVectorType( in AtomicInfo()
143 return LVal.getPointer(CGF); in getAtomicPointer()
172 CharUnits size = CGF.getContext().toCharUnitsFromBits(AtomicSizeInBits); in getAtomicSizeValue()
173 return CGF.CGM.getSize(size); in getAtomicSizeValue()
204 addr = CGF.Builder.CreateStructGEP(addr, 0); in projectValue()
206 return LValue::MakeAddr(addr, getValueType(), CGF.getContext(), in projectValue()
291 Address TempAlloca = CGF.CreateMemTemp( in CreateTempAlloca()
298 return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( in CreateTempAlloca()
303 static RValue emitAtomicLibcall(CodeGenFunction &CGF, in emitAtomicLibcall() argument
308 CGF.CGM.getTypes().arrangeBuiltinFunctionCall(resultType, args); in emitAtomicLibcall()
309 llvm::FunctionType *fnTy = CGF.CGM.getTypes().GetFunctionType(fnInfo); in emitAtomicLibcall()
314 CGF.getLLVMContext(), llvm::AttributeList::FunctionIndex, fnAttrB); in emitAtomicLibcall()
317 CGF.CGM.CreateRuntimeFunction(fnTy, fnName, fnAttrs); in emitAtomicLibcall()
319 return CGF.EmitCall(fnInfo, callee, ReturnValueSlot(), args); in emitAtomicLibcall()
340 return !isFullSizeType(CGF.CGM, type, AtomicSizeInBits); in requiresMemSetZero()
342 return !isFullSizeType(CGF.CGM, type->getStructElementType(0), in requiresMemSetZero()
354 llvm::Value *addr = LVal.getPointer(CGF); in emitMemSetZeroIfNecessary()
358 CGF.Builder.CreateMemSet( in emitMemSetZeroIfNecessary()
359 addr, llvm::ConstantInt::get(CGF.Int8Ty, 0), in emitMemSetZeroIfNecessary()
360 CGF.getContext().toCharUnitsFromBits(AtomicSizeInBits).getQuantity(), in emitMemSetZeroIfNecessary()
365 static void emitAtomicCmpXchg(CodeGenFunction &CGF, AtomicExpr *E, bool IsWeak, in emitAtomicCmpXchg() argument
373 llvm::Value *Expected = CGF.Builder.CreateLoad(Val1); in emitAtomicCmpXchg()
374 llvm::Value *Desired = CGF.Builder.CreateLoad(Val2); in emitAtomicCmpXchg()
376 llvm::AtomicCmpXchgInst *Pair = CGF.Builder.CreateAtomicCmpXchg( in emitAtomicCmpXchg()
384 llvm::Value *Old = CGF.Builder.CreateExtractValue(Pair, 0); in emitAtomicCmpXchg()
385 llvm::Value *Cmp = CGF.Builder.CreateExtractValue(Pair, 1); in emitAtomicCmpXchg()
390 CGF.createBasicBlock("cmpxchg.store_expected", CGF.CurFn); in emitAtomicCmpXchg()
395 CGF.createBasicBlock("cmpxchg.continue", CGF.CurFn); in emitAtomicCmpXchg()
399 CGF.Builder.CreateCondBr(Cmp, ContinueBB, StoreExpectedBB); in emitAtomicCmpXchg()
401 CGF.Builder.SetInsertPoint(StoreExpectedBB); in emitAtomicCmpXchg()
403 CGF.Builder.CreateStore(Old, Val1); in emitAtomicCmpXchg()
405 CGF.Builder.CreateBr(ContinueBB); in emitAtomicCmpXchg()
407 CGF.Builder.SetInsertPoint(ContinueBB); in emitAtomicCmpXchg()
409 CGF.EmitStoreOfScalar(Cmp, CGF.MakeAddrLValue(Dest, E->getType())); in emitAtomicCmpXchg()
415 static void emitAtomicCmpXchgFailureSet(CodeGenFunction &CGF, AtomicExpr *E, in emitAtomicCmpXchgFailureSet() argument
448 emitAtomicCmpXchg(CGF, E, IsWeak, Dest, Ptr, Val1, Val2, Size, SuccessOrder, in emitAtomicCmpXchgFailureSet()
454 auto *MonotonicBB = CGF.createBasicBlock("monotonic_fail", CGF.CurFn); in emitAtomicCmpXchgFailureSet()
455 auto *AcquireBB = CGF.createBasicBlock("acquire_fail", CGF.CurFn); in emitAtomicCmpXchgFailureSet()
456 auto *SeqCstBB = CGF.createBasicBlock("seqcst_fail", CGF.CurFn); in emitAtomicCmpXchgFailureSet()
457 auto *ContBB = CGF.createBasicBlock("atomic.continue", CGF.CurFn); in emitAtomicCmpXchgFailureSet()
462 llvm::SwitchInst *SI = CGF.Builder.CreateSwitch(FailureOrderVal, MonotonicBB); in emitAtomicCmpXchgFailureSet()
464 SI->addCase(CGF.Builder.getInt32((int)llvm::AtomicOrderingCABI::consume), in emitAtomicCmpXchgFailureSet()
466 SI->addCase(CGF.Builder.getInt32((int)llvm::AtomicOrderingCABI::acquire), in emitAtomicCmpXchgFailureSet()
468 SI->addCase(CGF.Builder.getInt32((int)llvm::AtomicOrderingCABI::seq_cst), in emitAtomicCmpXchgFailureSet()
472 CGF.Builder.SetInsertPoint(MonotonicBB); in emitAtomicCmpXchgFailureSet()
473 emitAtomicCmpXchg(CGF, E, IsWeak, Dest, Ptr, Val1, Val2, in emitAtomicCmpXchgFailureSet()
475 CGF.Builder.CreateBr(ContBB); in emitAtomicCmpXchgFailureSet()
477 CGF.Builder.SetInsertPoint(AcquireBB); in emitAtomicCmpXchgFailureSet()
478 emitAtomicCmpXchg(CGF, E, IsWeak, Dest, Ptr, Val1, Val2, Size, SuccessOrder, in emitAtomicCmpXchgFailureSet()
480 CGF.Builder.CreateBr(ContBB); in emitAtomicCmpXchgFailureSet()
482 CGF.Builder.SetInsertPoint(SeqCstBB); in emitAtomicCmpXchgFailureSet()
483 emitAtomicCmpXchg(CGF, E, IsWeak, Dest, Ptr, Val1, Val2, Size, SuccessOrder, in emitAtomicCmpXchgFailureSet()
485 CGF.Builder.CreateBr(ContBB); in emitAtomicCmpXchgFailureSet()
487 CGF.Builder.SetInsertPoint(ContBB); in emitAtomicCmpXchgFailureSet()
512 static void EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, Address Dest, in EmitAtomicOp() argument
528 emitAtomicCmpXchgFailureSet(CGF, E, false, Dest, Ptr, Val1, Val2, in EmitAtomicOp()
533 emitAtomicCmpXchgFailureSet(CGF, E, true, Dest, Ptr, Val1, Val2, in EmitAtomicOp()
539 emitAtomicCmpXchgFailureSet(CGF, E, IsWeakC->getZExtValue(), Dest, Ptr, in EmitAtomicOp()
544 CGF.createBasicBlock("cmpxchg.strong", CGF.CurFn); in EmitAtomicOp()
545 llvm::BasicBlock *WeakBB = CGF.createBasicBlock("cmxchg.weak", CGF.CurFn); in EmitAtomicOp()
547 CGF.createBasicBlock("cmpxchg.continue", CGF.CurFn); in EmitAtomicOp()
549 llvm::SwitchInst *SI = CGF.Builder.CreateSwitch(IsWeak, WeakBB); in EmitAtomicOp()
550 SI->addCase(CGF.Builder.getInt1(false), StrongBB); in EmitAtomicOp()
552 CGF.Builder.SetInsertPoint(StrongBB); in EmitAtomicOp()
553 emitAtomicCmpXchgFailureSet(CGF, E, false, Dest, Ptr, Val1, Val2, in EmitAtomicOp()
555 CGF.Builder.CreateBr(ContBB); in EmitAtomicOp()
557 CGF.Builder.SetInsertPoint(WeakBB); in EmitAtomicOp()
558 emitAtomicCmpXchgFailureSet(CGF, E, true, Dest, Ptr, Val1, Val2, in EmitAtomicOp()
560 CGF.Builder.CreateBr(ContBB); in EmitAtomicOp()
562 CGF.Builder.SetInsertPoint(ContBB); in EmitAtomicOp()
570 llvm::LoadInst *Load = CGF.Builder.CreateLoad(Ptr); in EmitAtomicOp()
573 CGF.Builder.CreateStore(Load, Dest); in EmitAtomicOp()
581 llvm::Value *LoadVal1 = CGF.Builder.CreateLoad(Val1); in EmitAtomicOp()
582 llvm::StoreInst *Store = CGF.Builder.CreateStore(LoadVal1, Ptr); in EmitAtomicOp()
672 llvm::Value *LoadVal1 = CGF.Builder.CreateLoad(Val1); in EmitAtomicOp()
674 CGF.Builder.CreateAtomicRMW(Op, Ptr.getPointer(), LoadVal1, Order, Scope); in EmitAtomicOp()
681 Result = EmitPostAtomicMinMax(CGF.Builder, E->getOp(), in EmitAtomicOp()
685 Result = CGF.Builder.CreateBinOp((llvm::Instruction::BinaryOps)PostOp, RMWI, in EmitAtomicOp()
688 Result = CGF.Builder.CreateNot(Result); in EmitAtomicOp()
689 CGF.Builder.CreateStore(Result, Dest); in EmitAtomicOp()
695 EmitValToTemp(CodeGenFunction &CGF, Expr *E) { in EmitValToTemp() argument
696 Address DeclPtr = CGF.CreateMemTemp(E->getType(), ".atomictmp"); in EmitValToTemp()
697 CGF.EmitAnyExprToMem(E, DeclPtr, E->getType().getQualifiers(), in EmitValToTemp()
702 static void EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *Expr, Address Dest, in EmitAtomicOp() argument
712 EmitAtomicOp(CGF, Expr, Dest, Ptr, Val1, Val2, IsWeak, FailureOrder, Size, in EmitAtomicOp()
713 Order, CGF.CGM.getLLVMContext().getOrInsertSyncScopeID("")); in EmitAtomicOp()
719 auto SCID = CGF.getTargetHooks().getLLVMSyncScopeID( in EmitAtomicOp()
720 CGF.CGM.getLangOpts(), ScopeModel->map(SC->getZExtValue()), in EmitAtomicOp()
721 Order, CGF.CGM.getLLVMContext()); in EmitAtomicOp()
722 EmitAtomicOp(CGF, Expr, Dest, Ptr, Val1, Val2, IsWeak, FailureOrder, Size, in EmitAtomicOp()
728 auto &Builder = CGF.Builder; in EmitAtomicOp()
732 BB[S] = CGF.createBasicBlock(getAsString(ScopeModel->map(S)), CGF.CurFn); in EmitAtomicOp()
735 CGF.createBasicBlock("atomic.scope.continue", CGF.CurFn); in EmitAtomicOp()
748 EmitAtomicOp(CGF, Expr, Dest, Ptr, Val1, Val2, IsWeak, FailureOrder, Size, in EmitAtomicOp()
750 CGF.getTargetHooks().getLLVMSyncScopeID(CGF.CGM.getLangOpts(), in EmitAtomicOp()
753 CGF.getLLVMContext())); in EmitAtomicOp()
761 AddDirectArgument(CodeGenFunction &CGF, CallArgList &Args, in AddDirectArgument() argument
766 CharUnits Align = CGF.getContext().getTypeAlignInChars(ValTy); in AddDirectArgument()
767 int64_t SizeInBits = CGF.getContext().toBits(SizeInChars); in AddDirectArgument()
769 CGF.getContext().getIntTypeForBitwidth(SizeInBits, /*Signed=*/false); in AddDirectArgument()
770 llvm::Type *IPtrTy = llvm::IntegerType::get(CGF.getLLVMContext(), in AddDirectArgument()
772 Address Ptr = Address(CGF.Builder.CreateBitCast(Val, IPtrTy), Align); in AddDirectArgument()
773 Val = CGF.EmitLoadOfScalar(Ptr, false, in AddDirectArgument()
774 CGF.getContext().getPointerType(ValTy), in AddDirectArgument()
780 Args.add(RValue::get(CGF.EmitCastToVoidPtr(Val)), in AddDirectArgument()
781 CGF.getContext().VoidPtrTy); in AddDirectArgument()
1417 llvm::IntegerType::get(CGF.getLLVMContext(), AtomicSizeInBits); in emitCastToAtomicIntPointer()
1418 return CGF.Builder.CreateBitCast(addr, ty->getPointerTo(addrspace)); in emitCastToAtomicIntPointer()
1423 uint64_t SourceSizeInBits = CGF.CGM.getDataLayout().getTypeSizeInBits(Ty); in convertToAtomicIntPointer()
1426 CGF.Builder.CreateMemCpy(Tmp, Addr, in convertToAtomicIntPointer()
1444 addr = CGF.Builder.CreateStructGEP(addr, 0); in convertAtomicTempToRValue()
1448 return CGF.convertTempToRValue(addr, getValueType(), loc); in convertAtomicTempToRValue()
1452 return RValue::get(CGF.Builder.CreateLoad(addr)); in convertAtomicTempToRValue()
1454 return CGF.EmitLoadOfBitfieldLValue( in convertAtomicTempToRValue()
1458 return CGF.EmitLoadOfLValue( in convertAtomicTempToRValue()
1462 return CGF.EmitLoadOfExtVectorElementLValue(LValue::MakeExtVectorElt( in convertAtomicTempToRValue()
1479 ? CGF.ConvertTypeForMem(ValueTy) in ConvertIntToValueOrAtomic()
1483 return RValue::get(CGF.EmitFromMemory(IntVal, ValueTy)); in ConvertIntToValueOrAtomic()
1485 return RValue::get(CGF.Builder.CreateIntToPtr(IntVal, ValTy)); in ConvertIntToValueOrAtomic()
1487 return RValue::get(CGF.Builder.CreateBitCast(IntVal, ValTy)); in ConvertIntToValueOrAtomic()
1504 CGF.Builder.CreateStore(IntVal, CastTemp) in ConvertIntToValueOrAtomic()
1514 Args.add(RValue::get(getAtomicSizeValue()), CGF.getContext().getSizeType()); in EmitAtomicLoadLibcall()
1515 Args.add(RValue::get(CGF.EmitCastToVoidPtr(getAtomicPointer())), in EmitAtomicLoadLibcall()
1516 CGF.getContext().VoidPtrTy); in EmitAtomicLoadLibcall()
1517 Args.add(RValue::get(CGF.EmitCastToVoidPtr(AddForLoaded)), in EmitAtomicLoadLibcall()
1518 CGF.getContext().VoidPtrTy); in EmitAtomicLoadLibcall()
1520 RValue::get(llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(AO))), in EmitAtomicLoadLibcall()
1521 CGF.getContext().IntTy); in EmitAtomicLoadLibcall()
1522 emitAtomicLibcall(CGF, "__atomic_load", CGF.getContext().VoidTy, Args); in EmitAtomicLoadLibcall()
1529 llvm::LoadInst *Load = CGF.Builder.CreateLoad(Addr, "atomic-load"); in EmitAtomicLoadOp()
1535 CGF.CGM.DecorateInstructionWithTBAA(Load, LVal.getTBAAInfo()); in EmitAtomicLoadOp()
1617 LValue Dest = CGF.MakeAddrLValue(getAtomicAddress(), getAtomicType()); in emitCopyIntoMemory()
1618 LValue Src = CGF.MakeAddrLValue(rvalue.getAggregateAddress(), in emitCopyIntoMemory()
1622 CGF.EmitAggregateCopy(Dest, Src, getAtomicType(), in emitCopyIntoMemory()
1637 CGF.EmitStoreOfScalar(rvalue.getScalarVal(), TempLVal, /*init*/ true); in emitCopyIntoMemory()
1639 CGF.EmitStoreOfComplex(rvalue.getComplexVal(), TempLVal, /*init*/ true); in emitCopyIntoMemory()
1653 LValue TempLV = CGF.MakeAddrLValue(CreateTempAlloca(), getAtomicType()); in materializeRValue()
1654 AtomicInfo Atomics(CGF, TempLV); in materializeRValue()
1656 return TempLV.getAddress(CGF); in materializeRValue()
1665 return CGF.EmitToMemory(Value, ValueTy); in convertRValueToInt()
1668 CGF.getLLVMContext(), in convertRValueToInt()
1671 return CGF.Builder.CreatePtrToInt(Value, InputIntTy); in convertRValueToInt()
1673 return CGF.Builder.CreateBitCast(Value, InputIntTy); in convertRValueToInt()
1682 return CGF.Builder.CreateLoad(Addr); in convertRValueToInt()
1690 auto *Inst = CGF.Builder.CreateAtomicCmpXchg(Addr.getPointer(), in EmitAtomicCompareExchangeOp()
1698 auto *PreviousVal = CGF.Builder.CreateExtractValue(Inst, /*Idxs=*/0); in EmitAtomicCompareExchangeOp()
1699 auto *SuccessFailureVal = CGF.Builder.CreateExtractValue(Inst, /*Idxs=*/1); in EmitAtomicCompareExchangeOp()
1711 Args.add(RValue::get(getAtomicSizeValue()), CGF.getContext().getSizeType()); in EmitAtomicCompareExchangeLibcall()
1712 Args.add(RValue::get(CGF.EmitCastToVoidPtr(getAtomicPointer())), in EmitAtomicCompareExchangeLibcall()
1713 CGF.getContext().VoidPtrTy); in EmitAtomicCompareExchangeLibcall()
1714 Args.add(RValue::get(CGF.EmitCastToVoidPtr(ExpectedAddr)), in EmitAtomicCompareExchangeLibcall()
1715 CGF.getContext().VoidPtrTy); in EmitAtomicCompareExchangeLibcall()
1716 Args.add(RValue::get(CGF.EmitCastToVoidPtr(DesiredAddr)), in EmitAtomicCompareExchangeLibcall()
1717 CGF.getContext().VoidPtrTy); in EmitAtomicCompareExchangeLibcall()
1719 llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(Success))), in EmitAtomicCompareExchangeLibcall()
1720 CGF.getContext().IntTy); in EmitAtomicCompareExchangeLibcall()
1722 llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(Failure))), in EmitAtomicCompareExchangeLibcall()
1723 CGF.getContext().IntTy); in EmitAtomicCompareExchangeLibcall()
1724 auto SuccessFailureRVal = emitAtomicLibcall(CGF, "__atomic_compare_exchange", in EmitAtomicCompareExchangeLibcall()
1725 CGF.getContext().BoolTy, Args); in EmitAtomicCompareExchangeLibcall()
1765 EmitAtomicUpdateValue(CodeGenFunction &CGF, AtomicInfo &Atomics, RValue OldRVal, in EmitAtomicUpdateValue() argument
1773 DesiredLVal = CGF.MakeAddrLValue(DesiredAddr, AtomicLVal.getType()); in EmitAtomicUpdateValue()
1806 UpRVal = CGF.EmitLoadOfLValue(UpdateLVal, SourceLocation()); in EmitAtomicUpdateValue()
1811 CGF.EmitStoreThroughLValue(NewRVal, DesiredLVal); in EmitAtomicUpdateValue()
1814 CGF.EmitStoreOfComplex(NewRVal.getComplexVal(), DesiredLVal, in EmitAtomicUpdateValue()
1827 auto *ContBB = CGF.createBasicBlock("atomic_cont"); in EmitAtomicUpdateLibcall()
1828 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); in EmitAtomicUpdateLibcall()
1829 CGF.EmitBlock(ContBB); in EmitAtomicUpdateLibcall()
1833 auto *OldVal = CGF.Builder.CreateLoad(ExpectedAddr); in EmitAtomicUpdateLibcall()
1834 CGF.Builder.CreateStore(OldVal, DesiredAddr); in EmitAtomicUpdateLibcall()
1839 EmitAtomicUpdateValue(CGF, *this, OldRVal, UpdateOp, DesiredAddr); in EmitAtomicUpdateLibcall()
1844 CGF.Builder.CreateCondBr(Res, ExitBB, ContBB); in EmitAtomicUpdateLibcall()
1845 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); in EmitAtomicUpdateLibcall()
1856 auto *ContBB = CGF.createBasicBlock("atomic_cont"); in EmitAtomicUpdateOp()
1857 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); in EmitAtomicUpdateOp()
1858 auto *CurBB = CGF.Builder.GetInsertBlock(); in EmitAtomicUpdateOp()
1859 CGF.EmitBlock(ContBB); in EmitAtomicUpdateOp()
1860 llvm::PHINode *PHI = CGF.Builder.CreatePHI(OldVal->getType(), in EmitAtomicUpdateOp()
1867 CGF.Builder.CreateStore(PHI, NewAtomicIntAddr); in EmitAtomicUpdateOp()
1871 EmitAtomicUpdateValue(CGF, *this, OldRVal, UpdateOp, NewAtomicAddr); in EmitAtomicUpdateOp()
1872 auto *DesiredVal = CGF.Builder.CreateLoad(NewAtomicIntAddr); in EmitAtomicUpdateOp()
1875 PHI->addIncoming(Res.first, CGF.Builder.GetInsertBlock()); in EmitAtomicUpdateOp()
1876 CGF.Builder.CreateCondBr(Res.second, ExitBB, ContBB); in EmitAtomicUpdateOp()
1877 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); in EmitAtomicUpdateOp()
1880 static void EmitAtomicUpdateValue(CodeGenFunction &CGF, AtomicInfo &Atomics, in EmitAtomicUpdateValue() argument
1903 CGF.EmitStoreThroughLValue(UpdateRVal, DesiredLVal); in EmitAtomicUpdateValue()
1913 auto *ContBB = CGF.createBasicBlock("atomic_cont"); in EmitAtomicUpdateLibcall()
1914 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); in EmitAtomicUpdateLibcall()
1915 CGF.EmitBlock(ContBB); in EmitAtomicUpdateLibcall()
1919 auto *OldVal = CGF.Builder.CreateLoad(ExpectedAddr); in EmitAtomicUpdateLibcall()
1920 CGF.Builder.CreateStore(OldVal, DesiredAddr); in EmitAtomicUpdateLibcall()
1922 EmitAtomicUpdateValue(CGF, *this, UpdateRVal, DesiredAddr); in EmitAtomicUpdateLibcall()
1927 CGF.Builder.CreateCondBr(Res, ExitBB, ContBB); in EmitAtomicUpdateLibcall()
1928 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); in EmitAtomicUpdateLibcall()
1938 auto *ContBB = CGF.createBasicBlock("atomic_cont"); in EmitAtomicUpdateOp()
1939 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); in EmitAtomicUpdateOp()
1940 auto *CurBB = CGF.Builder.GetInsertBlock(); in EmitAtomicUpdateOp()
1941 CGF.EmitBlock(ContBB); in EmitAtomicUpdateOp()
1942 llvm::PHINode *PHI = CGF.Builder.CreatePHI(OldVal->getType(), in EmitAtomicUpdateOp()
1949 CGF.Builder.CreateStore(PHI, NewAtomicIntAddr); in EmitAtomicUpdateOp()
1951 EmitAtomicUpdateValue(CGF, *this, UpdateRVal, NewAtomicAddr); in EmitAtomicUpdateOp()
1952 auto *DesiredVal = CGF.Builder.CreateLoad(NewAtomicIntAddr); in EmitAtomicUpdateOp()
1955 PHI->addIncoming(Res.first, CGF.Builder.GetInsertBlock()); in EmitAtomicUpdateOp()
1956 CGF.Builder.CreateCondBr(Res.second, ExitBB, ContBB); in EmitAtomicUpdateOp()
1957 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); in EmitAtomicUpdateOp()