diff options
author | Paul Robinson <paul_robinson@playstation.sony.com> | 2015-08-11 21:36:45 +0000 |
---|---|---|
committer | Paul Robinson <paul_robinson@playstation.sony.com> | 2015-08-11 21:36:45 +0000 |
commit | 78046b49a9397db7899a7879e0a88d26f0199025 (patch) | |
tree | 2e38da1bae46828d95b66b19c344dae5c403bb11 /llvm/test/DebugInfo/X86/dwarf-linkage-names.ll | |
parent | 45be450070170249ac44043e705d4587a9c53205 (diff) | |
download | bcm5719-llvm-78046b49a9397db7899a7879e0a88d26f0199025.tar.gz bcm5719-llvm-78046b49a9397db7899a7879e0a88d26f0199025.zip |
Make DW_AT_[MIPS_]linkage_name optional, and off by default for SCE.
Mangled "linkage" names can be huge, and if the debugger (or other
tools) have no use for them, the size savings can be very impressive
(on the order of 40%).
Add one test for controlling behavior, and modify a number of tests to
either stop using linkage names, or make llc emit them (so these tests
will still run when the default triple is for PS4).
Differential Revision: http://reviews.llvm.org/D11374
llvm-svn: 244678
Diffstat (limited to 'llvm/test/DebugInfo/X86/dwarf-linkage-names.ll')
-rw-r--r-- | llvm/test/DebugInfo/X86/dwarf-linkage-names.ll | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll b/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll new file mode 100644 index 00000000000..203ad212b46 --- /dev/null +++ b/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll @@ -0,0 +1,71 @@ +; DWARF linkage name attributes are optional; verify they are missing for +; PS4 triple or when tuning for SCE. + +; RUN: llc -O0 -mtriple=x86_64-unknown-unknown < %s | FileCheck %s -check-prefix LINKAGE1 +; RUN: llc -O0 -mtriple=x86_64-unknown-unknown < %s | FileCheck %s -check-prefix LINKAGE2 +; RUN: llc -O0 -mtriple=x86_64-scei-ps4 < %s | FileCheck %s -check-prefix NOLINKAGE +; RUN: llc -O0 -mtriple=x86_64-unknown-unknown -debugger-tune=sce < %s | FileCheck %s -check-prefix NOLINKAGE + +; $ clang++ -emit-llvm -S -g dwarf-linkage-names.cpp +; namespace test { +; int global_var; +; int bar() { return global_var; } +;}; + +; With linkage names, we get an attribute for the declaration (first) entry +; for the global variable, and one for the function. + +; This assumes the variable will appear before the function. +; LINKAGE1: .section .debug_info +; LINKAGE1: DW_TAG_variable +; LINKAGE1-NOT: DW_TAG +; LINKAGE1: {{DW_AT_(MIPS_)*linkage_name}} +; LINKAGE1: DW_TAG_subprogram +; LINKAGE1-NOT: DW_TAG +; LINKAGE1: {{DW_AT_(MIPS_)*linkage_name}} +; LINKAGE1: .section + +; Also verify we see the mangled names. We do this as a separate pass to +; avoid depending on the order of .debug_info and .debug_str sections. + +; LINKAGE2-DAG: .asciz "_ZN4test10global_varE" +; LINKAGE2-DAG: .asciz "_ZN4test3barEv" + +; Without linkage names, verify there aren't any linkage-name attributes, +; and no mangled names. + +; NOLINKAGE-NOT: {{DW_AT_(MIPS_)*linkage_name}} +; NOLINKAGE-NOT: .asciz "_ZN4test10global_varE" +; NOLINKAGE-NOT: .asciz "_ZN4test3barEv" + +@_ZN4test10global_varE = global i32 0, align 4 + +; Function Attrs: nounwind uwtable +define i32 @_ZN4test3barEv() #0 { +entry: + %0 = load i32, i32* @_ZN4test10global_varE, align 4, !dbg !14 + ret i32 %0, !dbg !15 +} + +attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!11, !12} +!llvm.ident = !{!13} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.8.0 (trunk 244662)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3, globals: !9) +!1 = !DIFile(filename: "dwarf-linkage-names.cpp", directory: "/home/probinson/projects/scratch") +!2 = !{} +!3 = !{!4} +!4 = !DISubprogram(name: "bar", linkageName: "_ZN4test3barEv", scope: !5, file: !1, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, function: i32 ()* @_ZN4test3barEv, variables: !2) +!5 = !DINamespace(name: "test", scope: null, file: !1, line: 1) +!6 = !DISubroutineType(types: !7) +!7 = !{!8} +!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) +!9 = !{!10} +!10 = !DIGlobalVariable(name: "global_var", linkageName: "_ZN4test10global_varE", scope: !5, file: !1, line: 2, type: !8, isLocal: false, isDefinition: true, variable: i32* @_ZN4test10global_varE) +!11 = !{i32 2, !"Dwarf Version", i32 4} +!12 = !{i32 2, !"Debug Info Version", i32 3} +!13 = !{!"clang version 3.8.0 (trunk 244662)"} +!14 = !DILocation(line: 3, column: 21, scope: !4) +!15 = !DILocation(line: 3, column: 14, scope: !4) |