clang 20.0.0git
|
#include "CGCXXABI.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "clang/AST/Attr.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/RecordLayout.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/CodeGen/ConstantInitBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/Support/Format.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include <algorithm>
#include <cstdio>
#include <utility>
Go to the source code of this file.
Functions | |
static void | setThunkProperties (CodeGenModule &CGM, const ThunkInfo &Thunk, llvm::Function *ThunkFn, bool ForVTable, GlobalDecl GD) |
static bool | similar (const ABIArgInfo &infoL, CanQualType typeL, const ABIArgInfo &infoR, CanQualType typeR) |
static RValue | PerformReturnAdjustment (CodeGenFunction &CGF, QualType ResultType, RValue RV, const ThunkInfo &Thunk) |
static void | resolveTopLevelMetadata (llvm::Function *Fn, llvm::ValueToValueMapTy &VMap) |
This function clones a function's DISubprogram node and enters it into a value map with the intent that the map can be utilized by the cloner to short-circuit Metadata node mapping. | |
static bool | shouldEmitVTableThunk (CodeGenModule &CGM, const CXXMethodDecl *MD, bool IsUnprototyped, bool ForVTable) |
static bool | UseRelativeLayout (const CodeGenModule &CGM) |
static void | AddPointerLayoutOffset (const CodeGenModule &CGM, ConstantArrayBuilder &builder, CharUnits offset) |
static void | AddRelativeLayoutOffset (const CodeGenModule &CGM, ConstantArrayBuilder &builder, CharUnits offset) |
static bool | shouldEmitAvailableExternallyVTable (const CodeGenModule &CGM, const CXXRecordDecl *RD) |
static bool | shouldEmitVTableAtEndOfTranslationUnit (CodeGenModule &CGM, const CXXRecordDecl *RD) |
Given that we're currently at the end of the translation unit, and we've emitted a reference to the vtable for this class, should we define that vtable? | |
|
static |
Definition at line 726 of file CGVTables.cpp.
References clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenTypeCache::GlobalsInt8PtrTy, and clang::CodeGen::CodeGenTypeCache::PtrDiffTy.
|
static |
Definition at line 734 of file CGVTables.cpp.
References clang::CharUnits::getQuantity(), and clang::CodeGen::CodeGenTypeCache::Int32Ty.
|
static |
Definition at line 70 of file CGVTables.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateIsNull(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::RValue::get(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::Type::getPointeeType(), clang::CodeGen::RValue::getScalarVal(), IsNull, clang::Type::isReferenceType(), clang::CodeGen::CGCXXABI::performReturnAdjustment(), and clang::ThunkInfo::Return.
|
static |
This function clones a function's DISubprogram node and enters it into a value map with the intent that the map can be utilized by the cloner to short-circuit Metadata node mapping.
Furthermore, the function resolves any DILocalVariable nodes referenced by dbg.value intrinsics so they can be properly mapped during cloning.
Definition at line 121 of file CGVTables.cpp.
|
static |
Definition at line 41 of file CGVTables.cpp.
References clang::CodeGen::CGCXXABI::exportThunk(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getModule(), clang::ReturnAdjustment::isEmpty(), clang::ThunkInfo::Return, clang::CodeGen::CodeGenModule::setFunctionLinkage(), clang::CodeGen::CodeGenModule::setGVProperties(), clang::CodeGen::CGCXXABI::setThunkLinkage(), and clang::CodeGen::CodeGenModule::supportsCOMDAT().
|
static |
Definition at line 1071 of file CGVTables.cpp.
References clang::CodeGen::CGCXXABI::canSpeculativelyEmitVTable(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::CodeGenModule::getCXXABI().
Referenced by clang::CodeGen::CodeGenModule::getVTableLinkage(), and shouldEmitVTableAtEndOfTranslationUnit().
|
static |
Given that we're currently at the end of the translation unit, and we've emitted a reference to the vtable for this class, should we define that vtable?
Definition at line 1250 of file CGVTables.cpp.
References clang::CodeGen::CodeGenModule::getVTables(), clang::CodeGen::CodeGenVTables::isVTableExternal(), and shouldEmitAvailableExternallyVTable().
|
static |
Definition at line 485 of file CGVTables.cpp.
References clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::TargetInfo::getCXXABI(), clang::CodeGen::CodeGenModule::getTarget(), and clang::TargetCXXABI::isMicrosoft().
|
static |
Definition at line 61 of file CGVTables.cpp.
References clang::CodeGen::ABIArgInfo::getKind().
|
static |
Definition at line 707 of file CGVTables.cpp.
References clang::TargetInfo::getCXXABI(), clang::CodeGen::CodeGenModule::getItaniumVTableContext(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetCXXABI::isItaniumFamily(), and clang::ItaniumVTableContext::isRelativeLayout().
Referenced by clang::CodeGen::CodeGenModule::getVTableComponentType().