Only add DW_AT_prototyped if we're working with a C-like language.

Worth another 45k (1%) off of a large C++ testcase.

rdar://10909458

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151144 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher
2012-02-22 08:46:21 +00:00
parent 438b092a4b
commit 8b6fe6b651
4 changed files with 18 additions and 9 deletions

View File

@@ -780,8 +780,12 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
Buffer.addChild(Arg); Buffer.addChild(Arg);
} }
} }
// Add prototype flag. // Add prototype flag if we're dealing with a C language and the
if (isPrototyped) // function has been prototyped.
if (isPrototyped &&
(Language == dwarf::DW_LANG_C89 ||
Language == dwarf::DW_LANG_C99 ||
Language == dwarf::DW_LANG_ObjC))
addUInt(&Buffer, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1); addUInt(&Buffer, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
} }
break; break;
@@ -1023,7 +1027,12 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
addSourceLine(SPDie, SP); addSourceLine(SPDie, SP);
if (SP.isPrototyped()) // Add the prototype if we have a prototype and we have a C like
// language.
if (SP.isPrototyped() &&
(Language == dwarf::DW_LANG_C89 ||
Language == dwarf::DW_LANG_C99 ||
Language == dwarf::DW_LANG_ObjC))
addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1); addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
// Add Return Type. // Add Return Type.

View File

@@ -4,7 +4,7 @@
; test that the DW_AT_specification is a back edge in the file. ; test that the DW_AT_specification is a back edge in the file.
; CHECK: 0x00000038: DW_TAG_subprogram [5] * ; CHECK: 0x00000038: DW_TAG_subprogram [5] *
; CHECK: 0x0000005f: DW_AT_specification [DW_FORM_ref4] (cu + 0x0038 => {0x00000038}) ; CHECK: 0x0000005e: DW_AT_specification [DW_FORM_ref4] (cu + 0x0038 => {0x00000038})
@_ZZN3foo3barEvE1x = constant i32 0, align 4 @_ZZN3foo3barEvE1x = constant i32 0, align 4

View File

@@ -7,7 +7,7 @@
; first check that we have a TAG_subprogram at a given offset and it has ; first check that we have a TAG_subprogram at a given offset and it has
; AT_inline. ; AT_inline.
; CHECK: 0x00000134: DW_TAG_subprogram ; CHECK: 0x00000130: DW_TAG_subprogram [18]
; CHECK-NEXT: DW_AT_MIPS_linkage_name ; CHECK-NEXT: DW_AT_MIPS_linkage_name
; CHECK-NEXT: DW_AT_specification ; CHECK-NEXT: DW_AT_specification
; CHECK-NEXT: DW_AT_inline ; CHECK-NEXT: DW_AT_inline
@@ -15,8 +15,8 @@
; and then that a TAG_subprogram refers to it with AT_abstract_origin. ; and then that a TAG_subprogram refers to it with AT_abstract_origin.
; CHECK: 0x00000184: DW_TAG_subprogram ; CHECK: 0x00000180: DW_TAG_subprogram [20]
; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0134 => {0x00000134}) ; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0130 => {0x00000130})
define i32 @_ZN17nsAutoRefCnt7ReleaseEv() { define i32 @_ZN17nsAutoRefCnt7ReleaseEv() {
entry: entry:

View File

@@ -3,8 +3,8 @@
; test that the DW_AT_specification is a back edge in the file. ; test that the DW_AT_specification is a back edge in the file.
; CHECK: 0x0000005b: DW_TAG_subprogram [5] ; CHECK: 0x0000005a: DW_TAG_subprogram [5]
; CHECK: 0x0000007c: DW_AT_specification [DW_FORM_ref4] (cu + 0x005b => {0x0000005b}) ; CHECK: 0x0000007a: DW_AT_specification [DW_FORM_ref4] (cu + 0x005a => {0x0000005a})
%struct.foo = type { i8 } %struct.foo = type { i8 }