On Wed, Mar 26, 2014 at 4:27 PM, David Blaikie <[email protected]> wrote:
> On Wed, Mar 26, 2014 at 4:09 PM, Eric Christopher <[email protected]> wrote:
>> Author: echristo
>> Date: Wed Mar 26 18:09:30 2014
>> New Revision: 204874
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=204874&view=rev
>> Log:
>> Just call getContextDescriptor to get the context for subprograms
>> instead of rolling an inefficient version of the function. This
>> changes some order of emission of metadata nodes, fix up those
>> testcases and make them more flexible to some changes.
>>
>> Modified:
>> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>> cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp
>> cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp
>>
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=204874&r1=204873&r2=204874&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Wed Mar 26 18:09:30 2014
>> @@ -2541,15 +2541,10 @@ void CGDebugInfo::EmitFunctionStart(Glob
>> DebugKind <= CodeGenOptions::DebugLineTablesOnly))
>> LinkageName = StringRef();
>>
>> + // If we aren't in line table only mode then grab a full context and
>> + // template parameters for the function.
>> if (DebugKind >= CodeGenOptions::LimitedDebugInfo) {
>> - if (const NamespaceDecl *NSDecl =
>> - dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
>> - FDContext = getOrCreateNameSpace(NSDecl);
>> - else if (const RecordDecl *RDecl =
>> - dyn_cast_or_null<RecordDecl>(FD->getDeclContext()))
>> - FDContext = getContextDescriptor(cast<Decl>(RDecl));
>> -
>> - // Collect template parameters.
>> + FDContext = getContextDescriptor(cast<Decl>(FD->getDeclContext()));
>
> Could you explain why this change caused changes in the IR output?
>
> I assume the changes are just reorderings - but even reorderings
> surprise me here. For namespace lookups I wouldn't've expected them to
> be found in the "RegionMap" (CGDebugInfo::getOrCreateNamespace doesn't
> appear to add namespaces to any cache other than the NameSpaceCache,
> not the RegionMap) and in the other case is the same before and
> after...
>
Not why I'd thought so before (which was the cache), but rather that
we're no longer using the file ( FDContext(Unit) earlier in this
function) as the context, however, we emit the same amount of metadata
because the namespaces generate the file as context just later.
The change doesn't affect anything since we don't actually use the
context for a function in emitting debug info - they're all file scope
in the backend. I'll add a comment to this effect.
-eric
>> TParamsArray = CollectFunctionTemplateParams(FD, Unit);
>> }
>> } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) {
>>
>> Modified: cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp?rev=204874&r1=204873&r2=204874&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp Wed Mar 26
>> 18:09:30 2014
>> @@ -25,12 +25,10 @@ int global_namespace_variable = 1;
>> // functions that belong to the namespace have it as a context, and the
>> global
>> // function has the file as a context.
>>
>> +// CHECK: [[FILE:![0-9]*]] {{.*}}debug-info-function-context.cpp"
>> // CHECK: metadata !"_ZTS1C", metadata !"member_function"{{.*}} [
>> DW_TAG_subprogram ] [line 11] [def] [member_function]
>> -
>> // CHECK: metadata !"_ZTS1C", metadata !"static_member_function"{{.*}} [
>> DW_TAG_subprogram ] [line 13] [def] [static_member_function]
>> +// CHECK: metadata [[FILE]], null, metadata !"global_function"{{.*}} [
>> DW_TAG_subprogram ] [line 17] [def] [global_function]
>> +// CHECK: metadata [[NS:![0-9]*]], metadata
>> !"global_namespace_function"{{.*}} [ DW_TAG_subprogram ] [line 20] [def]
>> [global_namespace_function]
>> +// CHECK: [[NS]] = {{.*}}, metadata [[FILE]], null, metadata !"ns", {{.*}}
>> ; [ DW_TAG_namespace ] [ns] [line 19]
>>
>> -// CHECK: metadata !22, metadata !"global_function"{{.*}} [
>> DW_TAG_subprogram ] [line 17] [def] [global_function]
>> -// CHECK: !22 = {{.*}} [ DW_TAG_file_type ]
>> -
>> -// CHECK: metadata !24, metadata !"global_namespace_function"{{.*}} [
>> DW_TAG_subprogram ] [line 20] [def] [global_namespace_function]
>> -// CHECK: !24 = {{.*}} [ DW_TAG_namespace ] [ns] [line 19]
>>
>> Modified: cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp?rev=204874&r1=204873&r2=204874&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp Wed Mar 26 18:09:30
>> 2014
>> @@ -52,8 +52,8 @@ using B::i;
>> // CHECK: [[BAR:![0-9]*]] {{.*}} ; [ DW_TAG_structure_type ] [bar] [line 6,
>> {{.*}}] [decl] [from ]
>> // CHECK: [[F1:![0-9]*]] {{.*}} ; [ DW_TAG_subprogram ] [line 4] [def] [f1]
>> // CHECK: [[FUNC:![0-9]*]] {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [def]
>> [func]
>> -// CHECK: [[FILE2]]} ; [ DW_TAG_file_type ] [{{.*}}foo.cpp]
>> // CHECK: [[I:![0-9]*]] = {{.*}}, metadata [[NS]], metadata !"i", {{.*}} ;
>> [ DW_TAG_variable ] [i]
>> +// CHECK: [[FILE2]]} ; [ DW_TAG_file_type ] [{{.*}}foo.cpp]
>> // CHECK: [[MODULES]] = metadata !{metadata [[M1:![0-9]*]], metadata
>> [[M2:![0-9]*]], metadata [[M3:![0-9]*]], metadata [[M4:![0-9]*]], metadata
>> [[M5:![0-9]*]], metadata [[M6:![0-9]*]], metadata [[M7:![0-9]*]], metadata
>> [[M8:![0-9]*]], metadata [[M9:![0-9]*]], metadata [[M10:![0-9]*]], metadata
>> [[M11:![0-9]*]], metadata [[M12:![0-9]*]], metadata [[M13:![0-9]*]]}
>> // CHECK: [[M1]] = metadata !{i32 {{[0-9]*}}, metadata [[CTXT]], metadata
>> [[NS]], i32 11} ; [ DW_TAG_imported_module ]
>> // CHECK: [[M2]] = metadata !{i32 {{[0-9]*}}, metadata [[CU]], metadata
>> [[CTXT]], i32 {{[0-9]*}}} ; [ DW_TAG_imported_module ]
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits