mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
5b721561aa
Previously, subprograms contained a metadata reference to the function they described. Because most clients need to get or set a subprogram for a given function rather than the other way around, this created unneeded inefficiency. For example, many passes needed to call the function llvm::makeSubprogramMap() to build a mapping from functions to subprograms, and the IR linker needed to fix up function references in a way that caused quadratic complexity in the IR linking phase of LTO. This change reverses the direction of the edge by storing the subprogram as function-level metadata and removing DISubprogram's function field. Since this is an IR change, a bitcode upgrade has been provided. Fixes PR23367. An upgrade script for textual IR for out-of-tree clients is attached to the PR. Differential Revision: http://reviews.llvm.org/D14265 llvm-svn: 252219
147 lines
6.6 KiB
C++
147 lines
6.6 KiB
C++
//===- DIBuilderBindings.h - Bindings for DIBuilder -------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines C bindings for the DIBuilder class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_BINDINGS_GO_LLVM_DIBUILDERBINDINGS_H
|
|
#define LLVM_BINDINGS_GO_LLVM_DIBUILDERBINDINGS_H
|
|
|
|
#include "IRBindings.h"
|
|
#include "llvm-c/Core.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// FIXME: These bindings shouldn't be Go-specific and should eventually move to
|
|
// a (somewhat) less stable collection of C APIs for use in creating bindings of
|
|
// LLVM in other languages.
|
|
|
|
typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
|
|
|
|
LLVMDIBuilderRef LLVMNewDIBuilder(LLVMModuleRef m);
|
|
|
|
void LLVMDIBuilderDestroy(LLVMDIBuilderRef d);
|
|
void LLVMDIBuilderFinalize(LLVMDIBuilderRef d);
|
|
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateCompileUnit(LLVMDIBuilderRef D, unsigned Language,
|
|
const char *File, const char *Dir,
|
|
const char *Producer, int Optimized,
|
|
const char *Flags, unsigned RuntimeVersion);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef D, const char *File,
|
|
const char *Dir);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef File,
|
|
unsigned Line, unsigned Column);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef File,
|
|
unsigned Discriminator);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateFunction(
|
|
LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name,
|
|
const char *LinkageName, LLVMMetadataRef File, unsigned Line,
|
|
LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition,
|
|
unsigned ScopeLine, unsigned Flags, int IsOptimized);
|
|
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateAutoVariable(LLVMDIBuilderRef D, LLVMMetadataRef Scope,
|
|
const char *Name, LLVMMetadataRef File,
|
|
unsigned Line, LLVMMetadataRef Ty,
|
|
int AlwaysPreserve, unsigned Flags);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
|
|
LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name, unsigned ArgNo,
|
|
LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, int AlwaysPreserve,
|
|
unsigned Flags);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef D,
|
|
const char *Name,
|
|
uint64_t SizeInBits,
|
|
uint64_t AlignInBits,
|
|
unsigned Encoding);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef PointeeType,
|
|
uint64_t SizeInBits,
|
|
uint64_t AlignInBits,
|
|
const char *Name);
|
|
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef D, LLVMMetadataRef File,
|
|
LLVMMetadataRef ParameterTypes);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
|
LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name,
|
|
LLVMMetadataRef File, unsigned Line, uint64_t SizeInBits,
|
|
uint64_t AlignInBits, unsigned Flags, LLVMMetadataRef DerivedFrom,
|
|
LLVMMetadataRef ElementTypes);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType(
|
|
LLVMDIBuilderRef D, unsigned Tag, const char *Name, LLVMMetadataRef Scope,
|
|
LLVMMetadataRef File, unsigned Line, unsigned RuntimeLang,
|
|
uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags);
|
|
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef D, LLVMMetadataRef Scope,
|
|
const char *Name, LLVMMetadataRef File,
|
|
unsigned Line, uint64_t SizeInBits,
|
|
uint64_t AlignInBits, uint64_t OffsetInBits,
|
|
unsigned Flags, LLVMMetadataRef Ty);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef D,
|
|
uint64_t SizeInBits,
|
|
uint64_t AlignInBits,
|
|
LLVMMetadataRef ElementType,
|
|
LLVMMetadataRef Subscripts);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef Ty, const char *Name,
|
|
LLVMMetadataRef File, unsigned Line,
|
|
LLVMMetadataRef Context);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef D, int64_t Lo,
|
|
int64_t Count);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef *Data,
|
|
size_t Length);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef D,
|
|
LLVMMetadataRef *Data,
|
|
size_t Length);
|
|
|
|
LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Dref,
|
|
int64_t *Addr, size_t Length);
|
|
|
|
LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef D,
|
|
LLVMValueRef Storage,
|
|
LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr,
|
|
LLVMBasicBlockRef Block);
|
|
|
|
LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef D, LLVMValueRef Val,
|
|
uint64_t Offset,
|
|
LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr,
|
|
LLVMBasicBlockRef Block);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|