reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
171 CharUnits size = CGF.getContext().toCharUnitsFromBits(AtomicSizeInBits); 172 return CGF.CGM.getSize(size); 203 addr = CGF.Builder.CreateStructGEP(addr, 0); 205 return LValue::MakeAddr(addr, getValueType(), CGF.getContext(), 290 Address TempAlloca = CGF.CreateMemTemp( 297 return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( 332 return !isFullSizeType(CGF.CGM, type, AtomicSizeInBits); 334 return !isFullSizeType(CGF.CGM, type->getStructElementType(0), 350 CGF.Builder.CreateMemSet( 351 addr, llvm::ConstantInt::get(CGF.Int8Ty, 0), 352 CGF.getContext().toCharUnitsFromBits(AtomicSizeInBits).getQuantity(), 1334 llvm::IntegerType::get(CGF.getLLVMContext(), AtomicSizeInBits); 1335 return CGF.Builder.CreateBitCast(addr, ty->getPointerTo(addrspace)); 1340 uint64_t SourceSizeInBits = CGF.CGM.getDataLayout().getTypeSizeInBits(Ty); 1343 CGF.Builder.CreateMemCpy(Tmp, Addr, 1361 addr = CGF.Builder.CreateStructGEP(addr, 0); 1365 return CGF.convertTempToRValue(addr, getValueType(), loc); 1369 return RValue::get(CGF.Builder.CreateLoad(addr)); 1371 return CGF.EmitLoadOfBitfieldLValue( 1375 return CGF.EmitLoadOfLValue( 1379 return CGF.EmitLoadOfExtVectorElementLValue(LValue::MakeExtVectorElt( 1396 ? CGF.ConvertTypeForMem(ValueTy) 1400 return RValue::get(CGF.EmitFromMemory(IntVal, ValueTy)); 1402 return RValue::get(CGF.Builder.CreateIntToPtr(IntVal, ValTy)); 1404 return RValue::get(CGF.Builder.CreateBitCast(IntVal, ValTy)); 1421 CGF.Builder.CreateStore(IntVal, CastTemp) 1431 Args.add(RValue::get(getAtomicSizeValue()), CGF.getContext().getSizeType()); 1432 Args.add(RValue::get(CGF.EmitCastToVoidPtr(getAtomicPointer())), 1433 CGF.getContext().VoidPtrTy); 1434 Args.add(RValue::get(CGF.EmitCastToVoidPtr(AddForLoaded)), 1435 CGF.getContext().VoidPtrTy); 1437 RValue::get(llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(AO))), 1438 CGF.getContext().IntTy); 1439 emitAtomicLibcall(CGF, "__atomic_load", CGF.getContext().VoidTy, Args); 1439 emitAtomicLibcall(CGF, "__atomic_load", CGF.getContext().VoidTy, Args); 1446 llvm::LoadInst *Load = CGF.Builder.CreateLoad(Addr, "atomic-load"); 1452 CGF.CGM.DecorateInstructionWithTBAA(Load, LVal.getTBAAInfo()); 1534 LValue Dest = CGF.MakeAddrLValue(getAtomicAddress(), getAtomicType()); 1535 LValue Src = CGF.MakeAddrLValue(rvalue.getAggregateAddress(), 1539 CGF.EmitAggregateCopy(Dest, Src, getAtomicType(), 1554 CGF.EmitStoreOfScalar(rvalue.getScalarVal(), TempLVal, /*init*/ true); 1556 CGF.EmitStoreOfComplex(rvalue.getComplexVal(), TempLVal, /*init*/ true); 1570 LValue TempLV = CGF.MakeAddrLValue(CreateTempAlloca(), getAtomicType()); 1571 AtomicInfo Atomics(CGF, TempLV); 1582 return CGF.EmitToMemory(Value, ValueTy); 1585 CGF.getLLVMContext(), 1588 return CGF.Builder.CreatePtrToInt(Value, InputIntTy); 1590 return CGF.Builder.CreateBitCast(Value, InputIntTy); 1599 return CGF.Builder.CreateLoad(Addr); 1607 auto *Inst = CGF.Builder.CreateAtomicCmpXchg(Addr.getPointer(), 1615 auto *PreviousVal = CGF.Builder.CreateExtractValue(Inst, /*Idxs=*/0); 1616 auto *SuccessFailureVal = CGF.Builder.CreateExtractValue(Inst, /*Idxs=*/1); 1628 Args.add(RValue::get(getAtomicSizeValue()), CGF.getContext().getSizeType()); 1629 Args.add(RValue::get(CGF.EmitCastToVoidPtr(getAtomicPointer())), 1630 CGF.getContext().VoidPtrTy); 1631 Args.add(RValue::get(CGF.EmitCastToVoidPtr(ExpectedAddr)), 1632 CGF.getContext().VoidPtrTy); 1633 Args.add(RValue::get(CGF.EmitCastToVoidPtr(DesiredAddr)), 1634 CGF.getContext().VoidPtrTy); 1636 llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(Success))), 1637 CGF.getContext().IntTy); 1639 llvm::ConstantInt::get(CGF.IntTy, (int)llvm::toCABI(Failure))), 1640 CGF.getContext().IntTy); 1641 auto SuccessFailureRVal = emitAtomicLibcall(CGF, "__atomic_compare_exchange", 1642 CGF.getContext().BoolTy, Args); 1744 auto *ContBB = CGF.createBasicBlock("atomic_cont"); 1745 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); 1746 CGF.EmitBlock(ContBB); 1750 auto *OldVal = CGF.Builder.CreateLoad(ExpectedAddr); 1751 CGF.Builder.CreateStore(OldVal, DesiredAddr); 1756 EmitAtomicUpdateValue(CGF, *this, OldRVal, UpdateOp, DesiredAddr); 1761 CGF.Builder.CreateCondBr(Res, ExitBB, ContBB); 1762 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); 1773 auto *ContBB = CGF.createBasicBlock("atomic_cont"); 1774 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); 1775 auto *CurBB = CGF.Builder.GetInsertBlock(); 1776 CGF.EmitBlock(ContBB); 1777 llvm::PHINode *PHI = CGF.Builder.CreatePHI(OldVal->getType(), 1784 CGF.Builder.CreateStore(PHI, NewAtomicIntAddr); 1788 EmitAtomicUpdateValue(CGF, *this, OldRVal, UpdateOp, NewAtomicAddr); 1789 auto *DesiredVal = CGF.Builder.CreateLoad(NewAtomicIntAddr); 1792 PHI->addIncoming(Res.first, CGF.Builder.GetInsertBlock()); 1793 CGF.Builder.CreateCondBr(Res.second, ExitBB, ContBB); 1794 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); 1830 auto *ContBB = CGF.createBasicBlock("atomic_cont"); 1831 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); 1832 CGF.EmitBlock(ContBB); 1836 auto *OldVal = CGF.Builder.CreateLoad(ExpectedAddr); 1837 CGF.Builder.CreateStore(OldVal, DesiredAddr); 1839 EmitAtomicUpdateValue(CGF, *this, UpdateRVal, DesiredAddr); 1844 CGF.Builder.CreateCondBr(Res, ExitBB, ContBB); 1845 CGF.EmitBlock(ExitBB, /*IsFinished=*/true); 1855 auto *ContBB = CGF.createBasicBlock("atomic_cont"); 1856 auto *ExitBB = CGF.createBasicBlock("atomic_exit"); 1857 auto *CurBB = CGF.Builder.GetInsertBlock(); 1858 CGF.EmitBlock(ContBB); 1859 llvm::PHINode *PHI = CGF.Builder.CreatePHI(OldVal->getType(), 1866 CGF.Builder.CreateStore(PHI, NewAtomicIntAddr); 1868 EmitAtomicUpdateValue(CGF, *this, UpdateRVal, NewAtomicAddr); 1869 auto *DesiredVal = CGF.Builder.CreateLoad(NewAtomicIntAddr); 1872 PHI->addIncoming(Res.first, CGF.Builder.GetInsertBlock()); 1873 CGF.Builder.CreateCondBr(Res.second, ExitBB, ContBB); 1874 CGF.EmitBlock(ExitBB, /*IsFinished=*/true);