Lines Matching refs:llvm

10 // This is the internal per-translation-unit state used for llvm translation.
28 #include "llvm/ADT/DenseMap.h"
29 #include "llvm/ADT/SetVector.h"
30 #include "llvm/ADT/SmallPtrSet.h"
31 #include "llvm/ADT/StringMap.h"
32 #include "llvm/IR/CallingConv.h"
33 #include "llvm/IR/Module.h"
34 #include "llvm/IR/ValueHandle.h"
36 namespace llvm {
108 llvm::Type *VoidTy;
111 llvm::IntegerType *Int8Ty, *Int16Ty, *Int32Ty, *Int64Ty;
113 llvm::Type *FloatTy, *DoubleTy;
116 llvm::IntegerType *IntTy;
120 llvm::IntegerType *IntPtrTy;
121 llvm::IntegerType *SizeTy;
122 llvm::IntegerType *PtrDiffTy;
127 llvm::PointerType *VoidPtrTy;
128 llvm::PointerType *Int8PtrTy;
133 llvm::PointerType *VoidPtrPtrTy;
134 llvm::PointerType *Int8PtrPtrTy;
148 llvm::CallingConv::ID RuntimeCC;
149 llvm::CallingConv::ID getRuntimeCC() const { return RuntimeCC; }
155 llvm::Constant *objc_autoreleasePoolPop;
158 llvm::Constant *objc_autoreleasePoolPush;
165 llvm::Constant *objc_autorelease;
168 llvm::Constant *objc_autoreleaseReturnValue;
171 llvm::Constant *objc_copyWeak;
174 llvm::Constant *objc_destroyWeak;
177 llvm::Constant *objc_initWeak;
180 llvm::Constant *objc_loadWeak;
183 llvm::Constant *objc_loadWeakRetained;
186 llvm::Constant *objc_moveWeak;
189 llvm::Constant *objc_retain;
192 llvm::Constant *objc_retainAutorelease;
195 llvm::Constant *objc_retainAutoreleaseReturnValue;
198 llvm::Constant *objc_retainAutoreleasedReturnValue;
201 llvm::Constant *objc_retainBlock;
204 llvm::Constant *objc_release;
207 llvm::Constant *objc_storeStrong;
210 llvm::Constant *objc_storeWeak;
214 llvm::InlineAsm *retainAutoreleasedReturnValueMarker;
217 llvm::Constant *clang_arc_use;
261 Structor(int Priority, llvm::Constant *Initializer,
262 llvm::Constant *AssociatedData)
266 llvm::Constant *Initializer;
267 llvm::Constant *AssociatedData;
275 llvm::Module &TheModule;
277 const llvm::DataLayout &TheDataLayout;
280 llvm::LLVMContext &VMContext;
300 llvm::MDNode *NoObjCARCExceptionsMetadata;
302 std::unique_ptr<llvm::IndexedInstrProfReader> PGOReader;
308 llvm::SmallPtrSet<llvm::GlobalValue*, 10> WeakRefReferences;
319 DeferredGlobal(llvm::GlobalValue *GV, GlobalDecl GD) : GV(GV), GD(GD) {}
320 llvm::AssertingVH<llvm::GlobalValue> GV;
324 void addDeferredDeclToEmit(llvm::GlobalValue *GV, GlobalDecl GD) {
332 typedef llvm::StringMap<llvm::TrackingVH<llvm::Constant> > ReplacementsTy;
341 std::vector<llvm::WeakVH> LLVMUsed;
342 std::vector<llvm::WeakVH> LLVMCompilerUsed;
353 llvm::MapVector<GlobalDecl, StringRef> MangledDeclNames;
354 llvm::StringMap<GlobalDecl, llvm::BumpPtrAllocator> Manglings;
357 std::vector<llvm::Constant*> Annotations;
360 llvm::StringMap<llvm::Constant*> AnnotationStrings;
362 llvm::StringMap<llvm::Constant*> CFConstantStringMap;
364 llvm::StringMap<llvm::GlobalVariable *> Constant1ByteStringMap;
365 llvm::StringMap<llvm::GlobalVariable *> Constant2ByteStringMap;
366 llvm::StringMap<llvm::GlobalVariable *> Constant4ByteStringMap;
367 llvm::DenseMap<const Decl*, llvm::Constant *> StaticLocalDeclMap;
368 llvm::DenseMap<const Decl*, llvm::GlobalVariable*> StaticLocalDeclGuardMap;
369 llvm::DenseMap<const Expr*, llvm::Constant *> MaterializedGlobalTemporaryMap;
371 llvm::DenseMap<QualType, llvm::Constant *> AtomicSetterHelperFnMap;
372 llvm::DenseMap<QualType, llvm::Constant *> AtomicGetterHelperFnMap;
375 llvm::DenseMap<QualType, llvm::Constant *> TypeDescriptorMap;
379 typedef llvm::MapVector<IdentifierInfo *,
380 llvm::GlobalValue *> StaticExternCMap;
384 std::vector<std::pair<const VarDecl *, llvm::GlobalVariable *> >
389 std::vector<llvm::Constant*> CXXThreadLocalInits;
392 std::vector<llvm::Constant*> CXXGlobalInits;
398 llvm::DenseMap<const Decl*, unsigned> DelayedCXXInitPosition;
400 typedef std::pair<OrderGlobalInits, llvm::Function*> GlobalInitData;
414 std::vector<std::pair<llvm::WeakVH,llvm::Constant*> > CXXGlobalDtors;
417 llvm::SetVector<clang::Module *> ImportedModules;
420 SmallVector<llvm::Value *, 16> LinkerOptionsMetadata;
427 llvm::WeakVH CFConstantStringClassRef;
431 llvm::WeakVH ConstantStringClassRef;
434 llvm::StructType *NSConstantStringType;
455 llvm::Constant *NSConcreteGlobalBlock;
456 llvm::Constant *NSConcreteStackBlock;
458 llvm::Constant *BlockObjectAssign;
459 llvm::Constant *BlockObjectDispose;
461 llvm::Type *BlockDescriptorType;
462 llvm::Type *GenericBlockLiteralType;
468 /// void @llvm.lifetime.start(i64 %size, i8* nocapture <ptr>)
469 llvm::Constant *LifetimeStartFn;
471 /// void @llvm.lifetime.end(i64 %size, i8* nocapture <ptr>)
472 llvm::Constant *LifetimeEndFn;
481 llvm::Module &M, const llvm::DataLayout &TD,
529 llvm::IndexedInstrProfReader *getPGOReader() const { return PGOReader.get(); }
531 llvm::Constant *getStaticLocalDeclAddress(const VarDecl *D) {
535 llvm::Constant *C) {
539 llvm::GlobalVariable *getStaticLocalDeclGuardAddress(const VarDecl *D) {
543 llvm::GlobalVariable *C) {
550 llvm::Constant *getAtomicSetterHelperFnMap(QualType Ty) {
554 llvm::Constant *Fn) {
558 llvm::Constant *getAtomicGetterHelperFnMap(QualType Ty) {
562 llvm::Constant *Fn) {
566 llvm::Constant *getTypeDescriptorFromMap(QualType Ty) {
569 void setTypeDescriptorInMap(QualType Ty, llvm::Constant *C) {
575 llvm::MDNode *getNoObjCARCExceptionsMetadata() {
578 llvm::MDNode::get(getLLVMContext(),
579 SmallVector<llvm::Value*,1>());
586 llvm::Module &getModule() const { return TheModule; }
588 const llvm::DataLayout &getDataLayout() const { return TheDataLayout; }
591 llvm::LLVMContext &getLLVMContext() { return VMContext; }
609 llvm::MDNode *getTBAAInfo(QualType QTy);
610 llvm::MDNode *getTBAAInfoForVTablePtr();
611 llvm::MDNode *getTBAAStructInfo(QualType QTy);
613 llvm::MDNode *getTBAAStructTypeInfo(QualType QTy);
615 llvm::MDNode *getTBAAStructTagInfo(QualType BaseTy, llvm::MDNode *AccessN,
627 void DecorateInstruction(llvm::Instruction *Inst,
628 llvm::MDNode *TBAAInfo,
632 llvm::ConstantInt *getSize(CharUnits numChars);
635 void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const;
639 void setTLSMode(llvm::GlobalVariable *GV, const VarDecl &D) const;
641 static llvm::GlobalValue::VisibilityTypes GetLLVMVisibility(Visibility V) {
643 case DefaultVisibility: return llvm::GlobalValue::DefaultVisibility;
644 case HiddenVisibility: return llvm::GlobalValue::HiddenVisibility;
645 case ProtectedVisibility: return llvm::GlobalValue::ProtectedVisibility;
650 llvm::Constant *GetAddrOfGlobal(GlobalDecl GD) {
667 llvm::GlobalVariable *
668 CreateOrReplaceCXXRuntimeVariable(StringRef Name, llvm::Type *Ty,
669 llvm::GlobalValue::LinkageTypes Linkage);
677 /// Return the llvm::Constant for the address of the given global variable.
681 llvm::Constant *GetAddrOfGlobalVar(const VarDecl *D,
682 llvm::Type *Ty = nullptr);
686 llvm::Constant *GetAddrOfFunction(GlobalDecl GD, llvm::Type *Ty = 0,
691 llvm::Constant *GetAddrOfRTTIDescriptor(QualType Ty, bool ForEH = false);
694 llvm::Constant *GetAddrOfUuidDescriptor(const CXXUuidofExpr* E);
697 llvm::Constant *GetAddrOfThunk(GlobalDecl GD, const ThunkInfo &Thunk);
700 llvm::Constant *GetWeakRefReference(const ValueDecl *VD);
704 llvm::Constant *
710 class ByrefHelpers : public llvm::FoldingSetNode {
712 llvm::Constant *CopyHelper;
713 llvm::Constant *DisposeHelper;
723 void Profile(llvm::FoldingSetNodeID &id) const {
727 virtual void profileImpl(llvm::FoldingSetNodeID &id) const = 0;
731 llvm::Value *dest, llvm::Value *src) = 0;
734 virtual void emitDispose(CodeGenFunction &CGF, llvm::Value *field) = 0;
737 llvm::FoldingSet<ByrefHelpers> ByrefHelpersCache;
743 llvm::Type *getBlockDescriptorType();
746 llvm::Type *getGenericBlockLiteralType();
749 llvm::Constant *GetAddrOfGlobalBlock(const BlockExpr *BE, const char *);
752 llvm::Constant *GetAddrOfConstantCFString(const StringLiteral *Literal);
757 llvm::Constant *GetAddrOfConstantString(const StringLiteral *Literal);
760 llvm::Constant *GetConstantArrayFromStringLiteral(const StringLiteral *E);
763 llvm::Constant *GetAddrOfConstantStringFromLiteral(const StringLiteral *S);
766 llvm::Constant *GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *);
773 llvm::Constant *GetAddrOfConstantCString(const std::string &str,
779 llvm::Constant *GetAddrOfConstantCompoundLiteral(const CompoundLiteralExpr*E);
783 llvm::Constant *GetAddrOfGlobalTemporary(const MaterializeTemporaryExpr *E,
791 llvm::GlobalValue *
797 llvm::GlobalValue *
801 llvm::FunctionType *fnType = nullptr,
806 llvm::Value *getBuiltinLibFunction(const FunctionDecl *FD,
809 llvm::Function *getIntrinsic(unsigned IID, ArrayRef<llvm::Type*> Tys = None);
821 void MaybeHandleStaticInExternC(const SomeDecl *D, llvm::GlobalValue *GV);
823 /// Add a global to a list to be added to the llvm.used metadata.
824 void addUsedGlobal(llvm::GlobalValue *GV);
826 /// Add a global to a list to be added to the llvm.compiler.used metadata.
827 void addCompilerUsedGlobal(llvm::GlobalValue *GV);
830 void AddCXXDtorEntry(llvm::Constant *DtorFn, llvm::Constant *Object) {
835 llvm::Constant *CreateRuntimeFunction(llvm::FunctionType *Ty,
837 llvm::AttributeSet ExtraAttrs =
838 llvm::AttributeSet());
840 llvm::Constant *CreateRuntimeVariable(llvm::Type *Ty,
846 llvm::Constant *getNSConcreteGlobalBlock();
847 llvm::Constant *getNSConcreteStackBlock();
848 llvm::Constant *getBlockObjectAssign();
849 llvm::Constant *getBlockObjectDispose();
853 llvm::Constant *getLLVMLifetimeStartFn();
854 llvm::Constant *getLLVMLifetimeEndFn();
859 llvm::Constant *getMemberPointerConstant(const UnaryOperator *e);
863 llvm::Constant *EmitConstantInit(const VarDecl &D,
868 llvm::Constant *EmitConstantExpr(const Expr *E, QualType DestType,
873 llvm::Constant *EmitConstantValue(const APValue &Value, QualType DestType,
878 llvm::Constant *EmitConstantValueForMemory(const APValue &Value,
885 llvm::Constant *EmitNullConstant(QualType T);
889 llvm::Constant *EmitNullConstantForBase(const CXXRecordDecl *Record);
903 void SetInternalFunctionAttributes(const Decl *D, llvm::Function *F,
909 llvm::Function *F);
913 void SetLLVMFunctionAttributesForDefinition(const Decl *D, llvm::Function *F);
962 llvm::GlobalVariable::LinkageTypes getFunctionLinkage(GlobalDecl GD);
964 void setFunctionLinkage(GlobalDecl GD, llvm::Function *F) {
970 llvm::GlobalVariable::LinkageTypes getVTableLinkage(const CXXRecordDecl *RD);
973 CharUnits GetTargetTypeStoreSize(llvm::Type *Ty) const;
976 llvm::GlobalValue::LinkageTypes
981 llvm::GlobalValue::LinkageTypes
988 llvm::Constant *EmitAnnotationString(StringRef Str);
991 llvm::Constant *EmitAnnotationUnit(SourceLocation Loc);
994 llvm::Constant *EmitAnnotationLineNo(SourceLocation L);
996 /// Generate the llvm::ConstantStruct which contains the annotation
1003 llvm::Constant *EmitAnnotateAttr(llvm::GlobalValue *GV,
1009 void AddGlobalAnnotations(const ValueDecl *D, llvm::GlobalValue *GV);
1015 void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc,
1027 llvm::GlobalValue *GetGlobalValue(StringRef Ref);
1029 llvm::Constant *
1030 GetOrCreateLLVMFunction(StringRef MangledName, llvm::Type *Ty, GlobalDecl D,
1032 llvm::AttributeSet ExtraAttrs = llvm::AttributeSet());
1034 llvm::Constant *GetOrCreateLLVMGlobal(StringRef MangledName,
1035 llvm::PointerType *PTy,
1038 llvm::StringMapEntry<llvm::GlobalVariable *> *
1045 void SetCommonAttributes(const Decl *D, llvm::GlobalValue *GV);
1047 void setNonAliasAttributes(const Decl *D, llvm::GlobalObject *GO);
1051 llvm::Function *F);
1055 llvm::Function *F,
1058 void EmitGlobalDefinition(GlobalDecl D, llvm::GlobalValue *GV = nullptr);
1060 void EmitGlobalFunctionDefinition(GlobalDecl GD, llvm::GlobalValue *GV);
1094 llvm::GlobalVariable *Addr,
1098 void AddGlobalCtor(llvm::Function *Ctor, int Priority = 65535,
1099 llvm::Constant *AssociatedData = 0);
1100 void AddGlobalDtor(llvm::Function *Dtor, int Priority = 65535);
1121 /// Emit the llvm.used and llvm.compiler.used metadata.
1133 /// \brief Emit the Clang version as llvm.ident metadata.
1139 /// Emit the llvm.gcov metadata used to tell LLVM where to emit the .gcno and
1144 llvm::Constant *EmitUuidofInitializer(StringRef uuidstr, QualType IIDType);