Lines Matching refs:llvm

26 #include "llvm/ADT/Hashing.h"
27 #include "llvm/IR/DataLayout.h"
28 #include "llvm/IR/Intrinsics.h"
29 #include "llvm/IR/LLVMContext.h"
30 #include "llvm/IR/MDBuilder.h"
31 #include "llvm/Support/ConvertUTF.h"
40 llvm::Value *CodeGenFunction::EmitCastToVoidPtr(llvm::Value *value) {
42 cast<llvm::PointerType>(value->getType())->getAddressSpace();
44 llvm::PointerType *destType = Int8PtrTy;
46 destType = llvm::Type::getInt8PtrTy(getLLVMContext(), addressSpace);
54 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(llvm::Type *Ty,
57 return new llvm::AllocaInst(Ty, nullptr, "", AllocaInsertPt);
58 return new llvm::AllocaInst(Ty, nullptr, Name, AllocaInsertPt);
61 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var,
62 llvm::Value *Init) {
63 auto *Store = new llvm::StoreInst(Init, Var);
64 llvm::BasicBlock *Block = AllocaInsertPt->getParent();
68 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty,
70 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name);
77 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty,
79 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name);
88 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) {
91 llvm::Value *MemPtr = EmitScalarExpr(E);
146 llvm::Value *Location,
178 const Expr *E, llvm::Value *ReferenceTemporary) {
261 llvm::Constant *CleanupFn;
262 llvm::Constant *CleanupArg;
265 cast<llvm::Constant>(ReferenceTemporary), E->getType(),
268 CleanupArg = llvm::Constant::getNullValue(CGF.Int8PtrTy);
272 CleanupArg = cast<llvm::Constant>(ReferenceTemporary);
297 static llvm::Value *
324 llvm::Value *Object = createReferenceTemporary(*this, M, E);
327 if (auto *Var = dyn_cast<llvm::GlobalVariable>(Object)) {
355 llvm::Value *Object = createReferenceTemporary(*this, M, E);
356 if (auto *Var = dyn_cast<llvm::GlobalVariable>(Object)) {
392 llvm::Value *Ptr = EmitScalarExpr(Adjustment.Ptr.RHS);
408 llvm::Value *Value = LV.getAddress();
427 const llvm::Constant *Elts) {
428 return cast<llvm::ConstantInt>(Elts->getAggregateElement(Idx))
432 /// Emit the hash_16_bytes function from include/llvm/ADT/Hashing.h.
433 static llvm::Value *emitHash16Bytes(CGBuilderTy &Builder, llvm::Value *Low,
434 llvm::Value *High) {
435 llvm::Value *KMul = Builder.getInt64(0x9ddfea08eb382d69ULL);
436 llvm::Value *K47 = Builder.getInt64(47);
437 llvm::Value *A0 = Builder.CreateMul(Builder.CreateXor(Low, High), KMul);
438 llvm::Value *A1 = Builder.CreateXor(Builder.CreateLShr(A0, K47), A0);
439 llvm::Value *B0 = Builder.CreateMul(Builder.CreateXor(High, A1), KMul);
440 llvm::Value *B1 = Builder.CreateXor(Builder.CreateLShr(B0, K47), B0);
450 llvm::Value *Address,
461 llvm::Value *Cond = nullptr;
462 llvm::BasicBlock *Done = nullptr;
467 Address, llvm::Constant::getNullValue(Address->getType()));
473 llvm::BasicBlock *Rest = createBasicBlock("not.null");
487 llvm::Type *Tys[2] = { IntPtrTy, Int8PtrTy };
488 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, Tys);
489 llvm::Value *Min = Builder.getFalse();
490 llvm::Value *CastAddr = Builder.CreateBitCast(Address, Int8PtrTy);
491 llvm::Value *LargeEnough =
493 llvm::ConstantInt::get(IntPtrTy, Size));
506 llvm::Value *Align =
508 llvm::ConstantInt::get(IntPtrTy, AlignVal - 1));
509 llvm::Value *Aligned =
510 Builder.CreateICmpEQ(Align, llvm::ConstantInt::get(IntPtrTy, 0));
516 llvm::Constant *StaticData[] = {
519 llvm::ConstantInt::get(SizeTy, AlignVal),
520 llvm::ConstantInt::get(Int8Ty, TCK)
544 llvm::raw_svector_ostream Out(MangledName);
547 llvm::hash_code TypeHash = hash_value(Out.str());
550 llvm::Value *Low = llvm::ConstantInt::get(Int64Ty, TypeHash);
551 llvm::Type *VPtrTy = llvm::PointerType::get(IntPtrTy, 0);
552 llvm::Value *VPtrAddr = Builder.CreateBitCast(Address, VPtrTy);
553 llvm::Value *VPtrVal = Builder.CreateLoad(VPtrAddr);
554 llvm::Value *High = Builder.CreateZExt(VPtrVal, Int64Ty);
556 llvm::Value *Hash = emitHash16Bytes(Builder, Low, High);
561 llvm::Type *HashTable = llvm::ArrayType::get(IntPtrTy, CacheSize);
562 llvm::Value *Cache = CGM.CreateRuntimeVariable(HashTable,
564 llvm::Value *Slot = Builder.CreateAnd(Hash,
565 llvm::ConstantInt::get(IntPtrTy,
567 llvm::Value *Indices[] = { Builder.getInt32(0), Slot };
568 llvm::Value *CacheVal =
575 llvm::Constant *StaticData[] = {
579 llvm::ConstantInt::get(Int8Ty, TCK)
581 llvm::Value *DynamicData[] = { Address, Hash };
623 static llvm::Value *getArrayIndexingBound(
649 llvm::Value *Index, QualType IndexType,
655 llvm::Value *Bound = getArrayIndexingBound(*this, Base, IndexedType);
660 llvm::Value *IndexVal = Builder.CreateIntCast(Index, SizeTy, IndexSigned);
661 llvm::Value *BoundVal = Builder.CreateIntCast(Bound, SizeTy, false);
663 llvm::Constant *StaticData[] = {
668 llvm::Value *Check = Accessed ? Builder.CreateICmpULT(IndexVal, BoundVal)
679 llvm::Value *NextVal;
680 if (isa<llvm::IntegerType>(InVal.first->getType())) {
682 NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true);
688 llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1);
691 NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal);
718 llvm::Type *EltTy =
720 llvm::Value *U = llvm::UndefValue::get(EltTy);
728 llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp");
733 return RValue::get(llvm::UndefValue::get(ConvertType(Ty)));
747 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType()));
748 return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType());
978 llvm::Constant *C = CGM.EmitConstantValue(result.Val, resultType, this);
997 llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue,
1019 llvm::APInt &Min, llvm::APInt &End,
1029 Min = llvm::APInt(CGF.getContext().getTypeSize(Ty), 0);
1030 End = llvm::APInt(CGF.getContext().getTypeSize(Ty), 2);
1033 llvm::Type *LTy = CGF.ConvertTypeForMem(ED->getIntegerType());
1041 End = llvm::APInt(Bitwidth, 1) << (NumBits - 1);
1045 End = llvm::APInt(Bitwidth, 1) << NumPositiveBits;
1046 Min = llvm::APInt(Bitwidth, 0);
1052 llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(QualType Ty) {
1053 llvm::APInt Min, End;
1058 llvm::MDBuilder MDHelper(getLLVMContext());
1062 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile,
1065 llvm::MDNode *TBAAInfo,
1070 llvm::Value *V;
1071 const llvm::Type *EltTy =
1072 cast<llvm::PointerType>(Addr->getType())->getElementType();
1074 const auto *VTy = cast<llvm::VectorType>(EltTy);
1080 llvm::VectorType *vec4Ty = llvm::VectorType::get(VTy->getElementType(),
1082 llvm::PointerType *ptVec4Ty =
1083 llvm::PointerType::get(vec4Ty,
1084 (cast<llvm::PointerType>(
1086 llvm::Value *Cast = Builder.CreateBitCast(Addr, ptVec4Ty,
1089 llvm::Value *LoadVal = Builder.CreateLoad(Cast, Volatile, "loadVec4");
1092 llvm::Constant *Mask[] = {
1093 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 0),
1094 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 1),
1095 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 2)
1098 llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1100 llvm::UndefValue::get(vec4Ty),
1114 llvm::LoadInst *Load = Builder.CreateLoad(Addr);
1120 llvm::MDNode *TBAAPath = CGM.getTBAAStructTagInfo(TBAABaseType, TBAAInfo,
1128 llvm::APInt Min, End;
1131 llvm::Value *Check;
1134 Load, llvm::ConstantInt::get(getLLVMContext(), End));
1136 llvm::Value *Upper = Builder.CreateICmpSLE(
1137 Load, llvm::ConstantInt::get(getLLVMContext(), End));
1138 llvm::Value *Lower = Builder.CreateICmpSGE(
1139 Load, llvm::ConstantInt::get(getLLVMContext(), Min));
1142 llvm::Constant *StaticArgs[] = {
1150 if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty))
1151 Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
1156 llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) {
1170 llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) {
1181 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr,
1183 QualType Ty, llvm::MDNode *TBAAInfo,
1189 llvm::Type *SrcTy = Value->getType();
1190 auto *VecTy = cast<llvm::VectorType>(SrcTy);
1193 llvm::LLVMContext &VMContext = getLLVMContext();
1196 SmallVector<llvm::Constant*, 4> Mask;
1197 Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),
1199 Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),
1201 Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),
1203 Mask.push_back(llvm::UndefValue::get(llvm::Type::getInt32Ty(VMContext)));
1205 llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1207 llvm::UndefValue::get(VecTy),
1209 SrcTy = llvm::VectorType::get(VecTy->getElementType(), 4);
1211 auto *DstPtr = cast<llvm::PointerType>(Addr->getType());
1213 llvm::Type *MemTy =
1214 llvm::PointerType::get(SrcTy, DstPtr->getAddressSpace());
1230 llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile);
1234 llvm::MDNode *TBAAPath = CGM.getTBAAStructTagInfo(TBAABaseType, TBAAInfo,
1241 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *value, LValue lvalue,
1255 llvm::Value *AddrWeakObj = LV.getAddress();
1260 llvm::Value *Object = EmitARCLoadWeakRetained(LV.getAddress());
1273 llvm::LoadInst *Load = Builder.CreateLoad(LV.getVectorAddr(),
1297 llvm::Type *ResLTy = ConvertType(LV.getType());
1299 llvm::Value *Ptr = LV.getBitFieldAddr();
1300 llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(),
1302 cast<llvm::LoadInst>(Val)->setAlignment(Info.StorageAlignment);
1315 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(Info.StorageSize,
1327 llvm::LoadInst *Load = Builder.CreateLoad(LV.getExtVectorAddr(),
1330 llvm::Value *Vec = Load;
1332 const llvm::Constant *Elts = LV.getExtVectorElts();
1339 llvm::Value *Elt = llvm::ConstantInt::get(SizeTy, InIdx);
1346 SmallVector<llvm::Constant*, 4> Mask;
1350 llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1351 Vec = Builder.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()),
1360 llvm::MDNode *RegName = dyn_cast<llvm::MDNode>(LV.getGlobalReg());
1364 llvm::Type *OrigTy = CGM.getTypes().ConvertType(LV.getType());
1365 llvm::Type *Ty = OrigTy;
1368 llvm::Type *Types[] = { Ty };
1370 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::read_register, Types);
1371 llvm::Value *Call = Builder.CreateCall(F, RegName);
1386 llvm::LoadInst *Load = Builder.CreateLoad(Dst.getVectorAddr(),
1389 llvm::Value *Vec = Load;
1392 llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getVectorAddr(),
1438 llvm::Value *LvalueDst = Dst.getAddress();
1439 llvm::Value *src = Src.getScalarVal();
1446 llvm::Value *LvalueDst = Dst.getAddress();
1447 llvm::Value *src = Src.getScalarVal();
1450 llvm::Type *ResultType = ConvertType(getContext().LongTy);
1451 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp());
1452 llvm::Value *dst = RHS;
1454 llvm::Value *LHS =
1456 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset");
1473 llvm::Value **Result) {
1475 llvm::Type *ResLTy = ConvertTypeForMem(Dst.getType());
1476 llvm::Value *Ptr = Dst.getBitFieldAddr();
1479 llvm::Value *SrcVal = Src.getScalarVal();
1485 llvm::Value *MaskedVal = SrcVal;
1491 llvm::Value *Val = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(),
1493 cast<llvm::LoadInst>(Val)->setAlignment(Info.StorageAlignment);
1498 llvm::APInt::getLowBitsSet(Info.StorageSize,
1507 ~llvm::APInt::getBitsSet(Info.StorageSize,
1519 llvm::StoreInst *Store = Builder.CreateStore(SrcVal, Ptr,
1525 llvm::Value *ResultVal = MaskedVal;
1547 llvm::LoadInst *Load = Builder.CreateLoad(Dst.getExtVectorAddr(),
1550 llvm::Value *Vec = Load;
1551 const llvm::Constant *Elts = Dst.getExtVectorElts();
1553 llvm::Value *SrcVal = Src.getScalarVal();
1558 cast<llvm::VectorType>(Vec->getType())->getNumElements();
1563 SmallVector<llvm::Constant*, 4> Mask(NumDstElts);
1567 llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1569 llvm::UndefValue::get(Vec->getType()),
1576 SmallVector<llvm::Constant*, 4> ExtMask;
1579 ExtMask.resize(NumDstElts, llvm::UndefValue::get(Int32Ty));
1580 llvm::Value *ExtMaskV = llvm::ConstantVector::get(ExtMask);
1581 llvm::Value *ExtSrcVal =
1583 llvm::UndefValue::get(SrcVal->getType()),
1586 SmallVector<llvm::Constant*, 4> Mask;
1599 llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1608 llvm::Value *Elt = llvm::ConstantInt::get(SizeTy, InIdx);
1612 llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getExtVectorAddr(),
1621 llvm::MDNode *RegName = dyn_cast<llvm::MDNode>(Dst.getGlobalReg());
1625 llvm::Type *OrigTy = CGM.getTypes().ConvertType(Dst.getType());
1626 llvm::Type *Ty = OrigTy;
1629 llvm::Type *Types[] = { Ty };
1631 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::write_register, Types);
1632 llvm::Value *Value = Src.getScalarVal();
1738 static llvm::Value *
1740 llvm::Value *V, llvm::Type *IRType,
1742 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace();
1754 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD);
1755 llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType());
1760 llvm::LoadInst *LI = CGF.Builder.CreateLoad(V);
1773 llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD);
1791 llvm::Value *ThisValue) {
1799 /// @llvm.read/write_register.
1806 SmallString<64> Name("llvm.named.register.");
1811 llvm::NamedMDNode *M =
1814 llvm::MDString *Str = llvm::MDString::get(CGM.getLLVMContext(),
1816 llvm::Value *Ops[] = { Str };
1817 M->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
1839 llvm::Constant *Val =
1856 llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD);
1867 llvm::Value *V = LocalDeclMap.lookup(VD);
1893 llvm::LoadInst *LI = Builder.CreateLoad(V);
1954 llvm::Value *Addr = LV.getAddress();
1959 !cast<llvm::PointerType>(Addr->getType())
2060 llvm::Constant *C;
2087 llvm::Constant *CodeGenFunction::EmitCheckTypeDescriptor(QualType T) {
2089 if (llvm::Constant *C = CGM.getTypeDescriptorFromMap(T))
2097 TypeInfo = (llvm::Log2_32(getContext().getTypeSize(T)) << 1) |
2112 llvm::Constant *Components[] = {
2114 llvm::ConstantDataArray::getString(getLLVMContext(), Buffer)
2116 llvm::Constant *Descriptor = llvm::ConstantStruct::getAnon(Components);
2118 auto *GV = new llvm::GlobalVariable(
2120 /*isConstant=*/true, llvm::GlobalVariable::PrivateLinkage, Descriptor);
2129 llvm::Value *CodeGenFunction::EmitCheckValue(llvm::Value *V) {
2130 llvm::Type *TargetTy = IntPtrTy;
2137 V = Builder.CreateBitCast(V, llvm::Type::getIntNTy(getLLVMContext(),
2148 llvm::Value *Ptr = CreateTempAlloca(V->getType());
2164 llvm::Constant *CodeGenFunction::EmitCheckSourceLocation(SourceLocation Loc) {
2167 llvm::Constant *Data[] = {
2169 : llvm::Constant::getNullValue(Int8PtrTy),
2174 return llvm::ConstantStruct::getAnon(Data);
2177 void CodeGenFunction::EmitCheck(llvm::Value *Checked, StringRef CheckName,
2178 ArrayRef<llvm::Constant *> StaticArgs,
2179 ArrayRef<llvm::Value *> DynamicArgs,
2189 llvm::BasicBlock *Cont = createBasicBlock("cont");
2191 llvm::BasicBlock *Handler = createBasicBlock("handler." + CheckName);
2193 llvm::Instruction *Branch = Builder.CreateCondBr(Checked, Cont, Handler);
2197 llvm::MDBuilder MDHelper(getLLVMContext());
2198 llvm::MDNode *Node = MDHelper.createBranchWeights((1U << 20) - 1, 1);
2199 Branch->setMetadata(llvm::LLVMContext::MD_prof, Node);
2203 llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
2205 new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false,
2206 llvm::GlobalVariable::PrivateLinkage, Info);
2209 SmallVector<llvm::Value *, 4> Args;
2210 SmallVector<llvm::Type *, 4> ArgTypes;
2228 llvm::FunctionType *FnType =
2229 llvm::FunctionType::get(CGM.VoidTy, ArgTypes, false);
2230 llvm::AttrBuilder B;
2232 B.addAttribute(llvm::Attribute::NoReturn)
2233 .addAttribute(llvm::Attribute::NoUnwind);
2235 B.addAttribute(llvm::Attribute::UWTable);
2242 llvm::Value *Fn = CGM.CreateRuntimeFunction(
2244 llvm::AttributeSet::get(getLLVMContext(),
2245 llvm::AttributeSet::FunctionIndex, B));
2246 llvm::CallInst *HandlerCall = EmitNounwindRuntimeCall(Fn, Args);
2257 void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked) {
2258 llvm::BasicBlock *Cont = createBasicBlock("cont");
2266 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap);
2267 llvm::CallInst *TrapCall = Builder.CreateCall(F);
2297 llvm::Value *Idx = EmitScalarExpr(E->getIdx());
2320 llvm::Value *Address = nullptr;
2330 llvm::Value *numElements = getVLASize(vla).first;
2345 llvm::Value *InterfaceSize =
2346 llvm::ConstantInt::get(Idx->getType(),
2352 llvm::Value *Base = EmitScalarExpr(E->getBase());
2370 llvm::Value *ArrayPtr = ArrayLV.getAddress();
2371 llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0);
2372 llvm::Value *Args[] = { Zero, Idx };
2383 llvm::Value *Base = EmitScalarExpr(E->getBase());
2416 llvm::Constant *GenerateConstantVector(CGBuilderTy &Builder,
2418 SmallVector<llvm::Constant*, 4> CElts;
2422 return llvm::ConstantVector::get(CElts);
2434 llvm::Value *Ptr = EmitScalarExpr(E->getBase());
2447 llvm::Value *Vec = EmitScalarExpr(E->getBase());
2450 llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
2463 llvm::Constant *CV = GenerateConstantVector(Builder, Indices);
2469 llvm::Constant *BaseElts = Base.getExtVectorElts();
2470 SmallVector<llvm::Constant *, 4> CElts;
2474 llvm::Constant *CV = llvm::ConstantVector::get(CElts);
2485 llvm::Value *Ptr = EmitScalarExpr(BaseExpr);
2525 llvm::Value *Addr = base.getAddress();
2531 llvm::Type *PtrTy = llvm::Type::getIntNPtrTy(
2553 llvm::Value *addr = base.getAddress();
2568 llvm::LoadInst *load = Builder.CreateLoad(addr, "ref");
2575 llvm::MDNode *tbaa;
2643 llvm::Value *V = Builder.CreateStructGEP(Base.getAddress(), idx);
2650 llvm::Type *llvmType = ConvertTypeForMem(FieldType);
2665 llvm::Value *GlobalPtr = CGM.GetAddrOfConstantCompoundLiteral(E);
2672 llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral");
2731 llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true");
2732 llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false");
2733 llvm::BasicBlock *contBlock = createBasicBlock("cond.end");
2766 llvm::PHINode *phi = Builder.CreatePHI(lhs->getAddress()->getType(),
2839 llvm::Value *V = LV.getAddress();
2859 llvm::Value *This = LV.getAddress();
2862 llvm::Value *Base =
2878 llvm::Value *Derived =
2896 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
2903 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
2985 llvm::Value *BaseValue = nullptr;
3028 llvm::Value *Callee = EmitScalarExpr(E->getCallee());
3112 llvm::Value *CodeGenFunction::EmitCXXUuidofExpr(const CXXUuidofExpr *E) {
3151 llvm::Value *V =
3156 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface,
3162 llvm::Value *BaseValue,
3171 llvm::Value *BaseValue = nullptr;
3200 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee,
3228 if (llvm::Constant *PrefixSig =
3230 llvm::Constant *FTRTTIConst =
3232 llvm::Type *PrefixStructTyElems[] = {
3236 llvm::StructType *PrefixStructTy = llvm::StructType::get(
3239 llvm::Value *CalleePrefixStruct = Builder.CreateBitCast(
3240 Callee, llvm::PointerType::getUnqual(PrefixStructTy));
3241 llvm::Value *CalleeSigPtr =
3243 llvm::Value *CalleeSig = Builder.CreateLoad(CalleeSigPtr);
3244 llvm::Value *CalleeSigMatch = Builder.CreateICmpEQ(CalleeSig, PrefixSig);
3246 llvm::BasicBlock *Cont = createBasicBlock("cont");
3247 llvm::BasicBlock *TypeCheck = createBasicBlock("typecheck");
3251 llvm::Value *CalleeRTTIPtr =
3253 llvm::Value *CalleeRTTI = Builder.CreateLoad(CalleeRTTIPtr);
3254 llvm::Value *CalleeRTTIMatch =
3256 llvm::Constant *StaticData[] = {
3296 llvm::Type *CalleeTy = getTypes().GetFunctionType(FnInfo);
3306 llvm::Value *BaseV;
3312 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS());
3317 llvm::Value *AddV = CGM.getCXXABI().EmitMemberDataPointerAddress(
3325 RValue CodeGenFunction::convertTempToRValue(llvm::Value *addr,
3340 void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, float Accuracy) {
3342 if (Accuracy == 0.0 || !isa<llvm::Instruction>(Val))
3345 llvm::MDBuilder MDHelper(getLLVMContext());
3346 llvm::MDNode *Node = MDHelper.createFPMath(Accuracy);
3348 cast<llvm::Instruction>(Val)->setMetadata(llvm::LLVMContext::MD_fpmath, Node);