forked from OSchip/llvm-project
Change debug-info-for-profiling from a TargetOption to a function attribute.
Summary: LTO requires the debug-info-for-profiling to be a function attribute. Reviewers: echristo, mehdi_amini, dblaikie, probinson, aprantl Reviewed By: mehdi_amini, dblaikie, aprantl Subscribers: aprantl, probinson, ahatanak, llvm-commits, mehdi_amini Differential Revision: https://reviews.llvm.org/D29203 llvm-svn: 293833
This commit is contained in:
parent
db00b61860
commit
0944a8c2ec
|
@ -105,13 +105,17 @@ namespace llvm {
|
|||
/// out into.
|
||||
/// \param Kind The kind of debug information to generate.
|
||||
/// \param DWOId The DWOId if this is a split skeleton compile unit.
|
||||
/// \param SplitDebugInlining Whether to emit inline debug info.
|
||||
/// \param DebugInfoFOrProfiling Whether to emit extra debug info for
|
||||
/// profile collection.
|
||||
DICompileUnit *
|
||||
createCompileUnit(unsigned Lang, DIFile *File, StringRef Producer,
|
||||
bool isOptimized, StringRef Flags, unsigned RV,
|
||||
StringRef SplitName = StringRef(),
|
||||
DICompileUnit::DebugEmissionKind Kind =
|
||||
DICompileUnit::DebugEmissionKind::FullDebug,
|
||||
uint64_t DWOId = 0, bool SplitDebugInlining = true);
|
||||
uint64_t DWOId = 0, bool SplitDebugInlining = true,
|
||||
bool DebugInfoForProfiling = false);
|
||||
|
||||
/// Create a file descriptor to hold debugging information for a file.
|
||||
/// \param Filename File name.
|
||||
|
|
|
@ -1044,15 +1044,17 @@ private:
|
|||
unsigned EmissionKind;
|
||||
uint64_t DWOId;
|
||||
bool SplitDebugInlining;
|
||||
bool DebugInfoForProfiling;
|
||||
|
||||
DICompileUnit(LLVMContext &C, StorageType Storage, unsigned SourceLanguage,
|
||||
bool IsOptimized, unsigned RuntimeVersion,
|
||||
unsigned EmissionKind, uint64_t DWOId, bool SplitDebugInlining,
|
||||
ArrayRef<Metadata *> Ops)
|
||||
bool DebugInfoForProfiling, ArrayRef<Metadata *> Ops)
|
||||
: DIScope(C, DICompileUnitKind, Storage, dwarf::DW_TAG_compile_unit, Ops),
|
||||
SourceLanguage(SourceLanguage), IsOptimized(IsOptimized),
|
||||
RuntimeVersion(RuntimeVersion), EmissionKind(EmissionKind),
|
||||
DWOId(DWOId), SplitDebugInlining(SplitDebugInlining) {
|
||||
DWOId(DWOId), SplitDebugInlining(SplitDebugInlining),
|
||||
DebugInfoForProfiling(DebugInfoForProfiling) {
|
||||
assert(Storage != Uniqued);
|
||||
}
|
||||
~DICompileUnit() = default;
|
||||
|
@ -1065,15 +1067,16 @@ private:
|
|||
DIScopeArray RetainedTypes,
|
||||
DIGlobalVariableExpressionArray GlobalVariables,
|
||||
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
|
||||
uint64_t DWOId, bool SplitDebugInlining, StorageType Storage,
|
||||
bool ShouldCreate = true) {
|
||||
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling,
|
||||
StorageType Storage, bool ShouldCreate = true) {
|
||||
return getImpl(Context, SourceLanguage, File,
|
||||
getCanonicalMDString(Context, Producer), IsOptimized,
|
||||
getCanonicalMDString(Context, Flags), RuntimeVersion,
|
||||
getCanonicalMDString(Context, SplitDebugFilename),
|
||||
EmissionKind, EnumTypes.get(), RetainedTypes.get(),
|
||||
GlobalVariables.get(), ImportedEntities.get(), Macros.get(),
|
||||
DWOId, SplitDebugInlining, Storage, ShouldCreate);
|
||||
DWOId, SplitDebugInlining, DebugInfoForProfiling, Storage,
|
||||
ShouldCreate);
|
||||
}
|
||||
static DICompileUnit *
|
||||
getImpl(LLVMContext &Context, unsigned SourceLanguage, Metadata *File,
|
||||
|
@ -1082,7 +1085,8 @@ private:
|
|||
unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes,
|
||||
Metadata *GlobalVariables, Metadata *ImportedEntities,
|
||||
Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining,
|
||||
StorageType Storage, bool ShouldCreate = true);
|
||||
bool DebugInfoForProfiling, StorageType Storage,
|
||||
bool ShouldCreate = true);
|
||||
|
||||
TempDICompileUnit cloneImpl() const {
|
||||
return getTemporary(getContext(), getSourceLanguage(), getFile(),
|
||||
|
@ -1090,7 +1094,8 @@ private:
|
|||
getRuntimeVersion(), getSplitDebugFilename(),
|
||||
getEmissionKind(), getEnumTypes(), getRetainedTypes(),
|
||||
getGlobalVariables(), getImportedEntities(),
|
||||
getMacros(), DWOId, getSplitDebugInlining());
|
||||
getMacros(), DWOId, getSplitDebugInlining(),
|
||||
getDebugInfoForProfiling());
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -1105,10 +1110,11 @@ public:
|
|||
DICompositeTypeArray EnumTypes, DIScopeArray RetainedTypes,
|
||||
DIGlobalVariableExpressionArray GlobalVariables,
|
||||
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
|
||||
uint64_t DWOId, bool SplitDebugInlining),
|
||||
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling),
|
||||
(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
|
||||
SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes,
|
||||
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining))
|
||||
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining,
|
||||
DebugInfoForProfiling))
|
||||
DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(
|
||||
DICompileUnit,
|
||||
(unsigned SourceLanguage, Metadata *File, MDString *Producer,
|
||||
|
@ -1116,10 +1122,11 @@ public:
|
|||
MDString *SplitDebugFilename, unsigned EmissionKind, Metadata *EnumTypes,
|
||||
Metadata *RetainedTypes, Metadata *GlobalVariables,
|
||||
Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId,
|
||||
bool SplitDebugInlining),
|
||||
bool SplitDebugInlining, bool DebugInfoForProfiling),
|
||||
(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
|
||||
SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes,
|
||||
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining))
|
||||
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining,
|
||||
DebugInfoForProfiling))
|
||||
|
||||
TempDICompileUnit clone() const { return cloneImpl(); }
|
||||
|
||||
|
@ -1129,6 +1136,7 @@ public:
|
|||
DebugEmissionKind getEmissionKind() const {
|
||||
return (DebugEmissionKind)EmissionKind;
|
||||
}
|
||||
bool getDebugInfoForProfiling() const { return DebugInfoForProfiling; }
|
||||
StringRef getProducer() const { return getStringOperand(1); }
|
||||
StringRef getFlags() const { return getStringOperand(2); }
|
||||
StringRef getSplitDebugFilename() const { return getStringOperand(3); }
|
||||
|
|
|
@ -108,7 +108,7 @@ namespace llvm {
|
|||
DisableIntegratedAS(false), CompressDebugSections(false),
|
||||
RelaxELFRelocations(false), FunctionSections(false),
|
||||
DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),
|
||||
EmulatedTLS(false), EnableIPRA(false), DebugInfoForProfiling(false) {}
|
||||
EmulatedTLS(false), EnableIPRA(false) {}
|
||||
|
||||
/// PrintMachineCode - This flag is enabled when the -print-machineinstrs
|
||||
/// option is specified on the command line, and should enable debugging
|
||||
|
@ -225,9 +225,6 @@ namespace llvm {
|
|||
/// This flag enables InterProcedural Register Allocation (IPRA).
|
||||
unsigned EnableIPRA : 1;
|
||||
|
||||
/// This flag enables emitting extra debug info for sample profiling.
|
||||
unsigned DebugInfoForProfiling : 1;
|
||||
|
||||
/// FloatABIType - This setting is set by -float-abi=xxx option is specfied
|
||||
/// on the command line. This setting may either be Default, Soft, or Hard.
|
||||
/// Default selects the target's default behavior. Soft selects the ABI for
|
||||
|
@ -302,8 +299,7 @@ inline bool operator==(const TargetOptions &LHS,
|
|||
ARE_EQUAL(FPDenormalMode) &&
|
||||
ARE_EQUAL(ExceptionModel) &&
|
||||
ARE_EQUAL(MCOptions) &&
|
||||
ARE_EQUAL(EnableIPRA) &&
|
||||
ARE_EQUAL(DebugInfoForProfiling);
|
||||
ARE_EQUAL(EnableIPRA);
|
||||
#undef ARE_EQUAL
|
||||
}
|
||||
|
||||
|
|
|
@ -4029,7 +4029,8 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
|
|||
OPTIONAL(imports, MDField, ); \
|
||||
OPTIONAL(macros, MDField, ); \
|
||||
OPTIONAL(dwoId, MDUnsignedField, ); \
|
||||
OPTIONAL(splitDebugInlining, MDBoolField, = true);
|
||||
OPTIONAL(splitDebugInlining, MDBoolField, = true); \
|
||||
OPTIONAL(debugInfoForProfiling, MDBoolField, = false);
|
||||
PARSE_MD_FIELDS();
|
||||
#undef VISIT_MD_FIELDS
|
||||
|
||||
|
@ -4037,7 +4038,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
|
|||
Context, language.Val, file.Val, producer.Val, isOptimized.Val, flags.Val,
|
||||
runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val,
|
||||
retainedTypes.Val, globals.Val, imports.Val, macros.Val, dwoId.Val,
|
||||
splitDebugInlining.Val);
|
||||
splitDebugInlining.Val, debugInfoForProfiling.Val);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1203,7 +1203,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
|||
break;
|
||||
}
|
||||
case bitc::METADATA_COMPILE_UNIT: {
|
||||
if (Record.size() < 14 || Record.size() > 17)
|
||||
if (Record.size() < 14 || Record.size() > 18)
|
||||
return error("Invalid record");
|
||||
|
||||
// Ignore Record[0], which indicates whether this compile unit is
|
||||
|
@ -1216,7 +1216,8 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
|||
getMDOrNull(Record[12]), getMDOrNull(Record[13]),
|
||||
Record.size() <= 15 ? nullptr : getMDOrNull(Record[15]),
|
||||
Record.size() <= 14 ? 0 : Record[14],
|
||||
Record.size() <= 16 ? true : Record[16]);
|
||||
Record.size() <= 16 ? true : Record[16],
|
||||
Record.size() <= 17 ? false : Record[17]);
|
||||
|
||||
MetadataList.assignValue(CU, NextMetadataNo);
|
||||
NextMetadataNo++;
|
||||
|
|
|
@ -1549,6 +1549,7 @@ void ModuleBitcodeWriter::writeDICompileUnit(const DICompileUnit *N,
|
|||
Record.push_back(N->getDWOId());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getMacros().get()));
|
||||
Record.push_back(N->getSplitDebugInlining());
|
||||
Record.push_back(N->getDebugInfoForProfiling());
|
||||
|
||||
Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev);
|
||||
Record.clear();
|
||||
|
|
|
@ -1213,7 +1213,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
|
|||
// Under -gmlt, skip building the subprogram if there are no inlined
|
||||
// subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
|
||||
// is still needed as we need its source location.
|
||||
if (!Asm->TM.Options.DebugInfoForProfiling &&
|
||||
if (!TheCU.getCUNode()->getDebugInfoForProfiling() &&
|
||||
TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly &&
|
||||
LScopes.getAbstractScopesList().empty() && !IsDarwin) {
|
||||
assert(InfoHolder.getScopeVariables().empty());
|
||||
|
|
|
@ -1184,7 +1184,7 @@ void DwarfUnit::applySubprogramAttributes(const DISubprogram *SP, DIE &SPDie,
|
|||
// If -fdebug-info-for-profiling is enabled, need to emit the subprogram
|
||||
// and its source location.
|
||||
bool SkipSPSourceLocation = SkipSPAttributes &&
|
||||
!Asm->TM.Options.DebugInfoForProfiling;
|
||||
!CUNode->getDebugInfoForProfiling();
|
||||
if (!SkipSPSourceLocation)
|
||||
if (applySubprogramDefinitionAttributes(SP, SPDie))
|
||||
return;
|
||||
|
|
|
@ -1688,6 +1688,8 @@ static void writeDICompileUnit(raw_ostream &Out, const DICompileUnit *N,
|
|||
Printer.printMetadata("macros", N->getRawMacros());
|
||||
Printer.printInt("dwoId", N->getDWOId());
|
||||
Printer.printBool("splitDebugInlining", N->getSplitDebugInlining(), true);
|
||||
Printer.printBool("debugInfoForProfiling", N->getDebugInfoForProfiling(),
|
||||
false);
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ DICompileUnit *DIBuilder::createCompileUnit(
|
|||
unsigned Lang, DIFile *File, StringRef Producer, bool isOptimized,
|
||||
StringRef Flags, unsigned RunTimeVer, StringRef SplitName,
|
||||
DICompileUnit::DebugEmissionKind Kind, uint64_t DWOId,
|
||||
bool SplitDebugInlining) {
|
||||
bool SplitDebugInlining, bool DebugInfoForProfiling) {
|
||||
|
||||
assert(((Lang <= dwarf::DW_LANG_Fortran08 && Lang >= dwarf::DW_LANG_C89) ||
|
||||
(Lang <= dwarf::DW_LANG_hi_user && Lang >= dwarf::DW_LANG_lo_user)) &&
|
||||
|
@ -136,7 +136,7 @@ DICompileUnit *DIBuilder::createCompileUnit(
|
|||
CUNode = DICompileUnit::getDistinct(
|
||||
VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer,
|
||||
SplitName, Kind, nullptr, nullptr, nullptr, nullptr, nullptr, DWOId,
|
||||
SplitDebugInlining);
|
||||
SplitDebugInlining, DebugInfoForProfiling);
|
||||
|
||||
// Create a named metadata so that it is easier to find cu in a module.
|
||||
NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
|
||||
|
|
|
@ -449,7 +449,8 @@ private:
|
|||
CU->isOptimized(), CU->getFlags(), CU->getRuntimeVersion(),
|
||||
CU->getSplitDebugFilename(), DICompileUnit::LineTablesOnly, EnumTypes,
|
||||
RetainedTypes, GlobalVariables, ImportedEntities, CU->getMacros(),
|
||||
CU->getDWOId(), CU->getSplitDebugInlining());
|
||||
CU->getDWOId(), CU->getSplitDebugInlining(),
|
||||
CU->getDebugInfoForProfiling());
|
||||
}
|
||||
|
||||
DILocation *getReplacementMDLocation(DILocation *MLD) {
|
||||
|
|
|
@ -383,8 +383,8 @@ DICompileUnit *DICompileUnit::getImpl(
|
|||
unsigned RuntimeVersion, MDString *SplitDebugFilename,
|
||||
unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes,
|
||||
Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros,
|
||||
uint64_t DWOId, bool SplitDebugInlining, StorageType Storage,
|
||||
bool ShouldCreate) {
|
||||
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling,
|
||||
StorageType Storage, bool ShouldCreate) {
|
||||
assert(Storage != Uniqued && "Cannot unique DICompileUnit");
|
||||
assert(isCanonical(Producer) && "Expected canonical MDString");
|
||||
assert(isCanonical(Flags) && "Expected canonical MDString");
|
||||
|
@ -397,7 +397,8 @@ DICompileUnit *DICompileUnit::getImpl(
|
|||
return storeImpl(new (array_lengthof(Ops))
|
||||
DICompileUnit(Context, Storage, SourceLanguage,
|
||||
IsOptimized, RuntimeVersion, EmissionKind,
|
||||
DWOId, SplitDebugInlining, Ops),
|
||||
DWOId, SplitDebugInlining,
|
||||
DebugInfoForProfiling, Ops),
|
||||
Storage);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,10 +35,6 @@ cl::opt<bool> EnableIPRA("enable-ipra", cl::init(false), cl::Hidden,
|
|||
cl::desc("Enable interprocedural register allocation "
|
||||
"to reduce load/store at procedure calls."));
|
||||
|
||||
cl::opt<bool> DebugInfoForProfiling(
|
||||
"debug-info-for-profiling", cl::init(false), cl::Hidden,
|
||||
cl::desc("Emit extra debug info to make sample profile more accurate."));
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// TargetMachine Class
|
||||
//
|
||||
|
@ -51,8 +47,6 @@ TargetMachine::TargetMachine(const Target &T, StringRef DataLayoutString,
|
|||
RequireStructuredCFG(false), DefaultOptions(Options), Options(Options) {
|
||||
if (EnableIPRA.getNumOccurrences())
|
||||
this->Options.EnableIPRA = EnableIPRA;
|
||||
if (DebugInfoForProfiling.getNumOccurrences())
|
||||
this->Options.DebugInfoForProfiling = DebugInfoForProfiling;
|
||||
}
|
||||
|
||||
TargetMachine::~TargetMachine() {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
; RUN: llvm-dis < %s.bc | FileCheck %s
|
||||
; RUN: verify-uselistorder < %s.bc
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
!0 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
||||
!llvm.dbg.cu = !{!1}
|
||||
; CHECK: DICompileUnit(language: DW_LANG_C99, file: !{{[0-9]+}}, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
|
||||
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, emissionKind: FullDebug)
|
||||
!2 = !DIFile(filename: "foo.c", directory: "/path/to/dir")
|
Binary file not shown.
|
@ -1,4 +1,8 @@
|
|||
; REQUIRES: object-emission
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj < %S/gmlt.ll | llvm-dwarfdump - | FileCheck %S/gmlt.ll
|
||||
|
||||
; There's a darwin specific test in X86/gmlt, so it's okay to XFAIL this here.
|
||||
; XFAIL: darwin
|
||||
|
||||
; Generated from the following source compiled with clang++ -gmlt:
|
||||
; void f1() {}
|
||||
|
@ -76,13 +80,6 @@
|
|||
; CHECK-NOT: {{DW_TAG|DW_AT}}
|
||||
; CHECK: NULL
|
||||
|
||||
; PROFILING: DW_TAG_subprogram
|
||||
; PROFILING: DW_AT_name {{.*}} "f1"
|
||||
; With -debug-info-for-profiling, we need to emit decl_file a-nd decl_line
|
||||
; of the subprogram.
|
||||
; PROFILING: DW_AT_decl_file
|
||||
; PROFILING: DW_AT_decl_line
|
||||
|
||||
; CHECK: .debug_ranges contents:
|
||||
|
||||
; ... some addresses (depends on platform (such as platforms with function
|
|
@ -1,6 +0,0 @@
|
|||
; REQUIRES: object-emission
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj < %S/../Inputs/gmlt.ll | llvm-dwarfdump - | FileCheck %S/../Inputs/gmlt.ll
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj -debug-info-for-profiling < %S/../Inputs/gmlt.ll | llvm-dwarfdump - | FileCheck %S/../Inputs/gmlt.ll --check-prefixes=PROFILING
|
||||
|
||||
; There's a darwin specific test in X86/gmlt, so it's okay to XFAIL this here.
|
||||
; XFAIL: darwin
|
|
@ -0,0 +1,35 @@
|
|||
; REQUIRES: object-emission
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj < %S/gmlt_profiling.ll | llvm-dwarfdump - | FileCheck %S/gmlt_profiling.ll
|
||||
|
||||
; There's a darwin specific test in X86/gmlt, so it's okay to XFAIL this here.
|
||||
; XFAIL: darwin
|
||||
|
||||
; CHECK: .debug_info
|
||||
; CHECK: DW_TAG_subprogram
|
||||
; CHECK-NOT: DW_TAG
|
||||
; CHECK: DW_AT_name {{.*}} "f1"
|
||||
; With debug-info-for-profiling attribute, we need to emit decl_file and
|
||||
; decl_line of the subprogram.
|
||||
; CHECK-NEXT: DW_AT_decl_file
|
||||
; CHECK-NEXT: DW_AT_decl_line
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
define void @_Z2f1v() !dbg !4 {
|
||||
entry:
|
||||
ret void, !dbg !13
|
||||
}
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!10, !11}
|
||||
!llvm.ident = !{!12}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.6.0 ", isOptimized: false, emissionKind: LineTablesOnly, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2, debugInfoForProfiling: true)
|
||||
!1 = !DIFile(filename: "gmlt.cpp", directory: "/tmp/dbginfo")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "f1", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "gmlt.cpp", directory: "/tmp/dbginfo")
|
||||
!6 = !DISubroutineType(types: !2)
|
||||
!10 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!11 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!12 = !{!"clang version 3.6.0 "}
|
||||
!13 = !DILocation(line: 1, column: 12, scope: !4)
|
|
@ -1,2 +1,2 @@
|
|||
; RUN: llc -O0 -filetype=obj < %S/../Inputs/gmlt.ll -mtriple x86_64-apple-darwin | llvm-dwarfdump - \
|
||||
; RUN: | FileCheck --check-prefix=CHECK --check-prefix=DARWIN %S/../Inputs/gmlt.ll
|
||||
; RUN: llc -O0 -filetype=obj < %S/../Generic/gmlt.ll -mtriple x86_64-apple-darwin | llvm-dwarfdump - \
|
||||
; RUN: | FileCheck --check-prefix=CHECK --check-prefix=DARWIN %S/../Generic/gmlt.ll
|
||||
|
|
|
@ -95,7 +95,7 @@ protected:
|
|||
return DICompileUnit::getDistinct(Context, 1, getFile(), "clang", false,
|
||||
"-g", 2, "", DICompileUnit::FullDebug,
|
||||
getTuple(), getTuple(), getTuple(),
|
||||
getTuple(), getTuple(), 0, true);
|
||||
getTuple(), getTuple(), 0, true, false);
|
||||
}
|
||||
DIType *getBasicType(StringRef Name) {
|
||||
return DIBasicType::get(Context, dwarf::DW_TAG_unspecified_type, Name);
|
||||
|
@ -1406,7 +1406,8 @@ TEST_F(DICompileUnitTest, get) {
|
|||
auto *N = DICompileUnit::getDistinct(
|
||||
Context, SourceLanguage, File, Producer, IsOptimized, Flags,
|
||||
RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
|
||||
RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, true);
|
||||
RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, true,
|
||||
false);
|
||||
|
||||
EXPECT_EQ(dwarf::DW_TAG_compile_unit, N->getTag());
|
||||
EXPECT_EQ(SourceLanguage, N->getSourceLanguage());
|
||||
|
@ -1463,7 +1464,7 @@ TEST_F(DICompileUnitTest, replaceArrays) {
|
|||
auto *N = DICompileUnit::getDistinct(
|
||||
Context, SourceLanguage, File, Producer, IsOptimized, Flags,
|
||||
RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
|
||||
RetainedTypes, nullptr, ImportedEntities, nullptr, DWOId, true);
|
||||
RetainedTypes, nullptr, ImportedEntities, nullptr, DWOId, true, false);
|
||||
|
||||
auto *GlobalVariables = MDTuple::getDistinct(Context, None);
|
||||
EXPECT_EQ(nullptr, N->getGlobalVariables().get());
|
||||
|
|
Loading…
Reference in New Issue