reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

tools/clang/lib/CodeGen/CGAtomic.cpp
  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);