llvm-project/llvm/test/DebugInfo/MIR/X86/debug-entry-value-operation.mir
Djordje Todorovic cbb3571b0d [DWARF] Avoid entry_values production for SCE
SONY debugger does not prefer debug entry values feature, so
the plan is to avoid production of the entry values
by default when the tuning is SCE debugger.

The feature still can be enabled with the -debug-entry-values
option for the testing/development purposes.

This patch addresses PR46643.

Differential Revision: https://reviews.llvm.org/D83462
2020-07-24 13:34:05 +02:00

88 lines
3.9 KiB
YAML

# RUN: llc -start-before=livedebugvalues -mtriple=x86_64-apple-darwin -o %t %s -filetype=obj
# RUN: llvm-dwarfdump %t | FileCheck %s
# RUN: llc -start-before=livedebugvalues -debugger-tune=sce -mtriple=x86_64-sce-ps4 -o %t1 %s -filetype=obj
# RUN: llvm-dwarfdump %t1 | FileCheck %s -check-prefix=SCE
## Based on:
## int global;
## int foo(int p, int q, int r) {
## global = p + 1;
## asm __volatile("" : : : "edi", "esi", "edx");
## return 123;
## }
# CHECK: DW_TAG_formal_parameter
# CHECK: DW_OP_entry_value
# SCE-NOT: DW_OP_{{.*}}entry_value
--- |
; ModuleID = 'multiple-param-dbg-value-entry.ll'
source_filename = "multiple-param-dbg-value-entry.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@global = common dso_local local_unnamed_addr global i32 0, align 4, !dbg !0
define dso_local i32 @foo(i32 %p, i32 %q, i32 %r) local_unnamed_addr !dbg !11 {
entry:
call void @llvm.dbg.value(metadata i32 %p, metadata !15, metadata !DIExpression()), !dbg !18
call void @llvm.dbg.value(metadata i32 %q, metadata !16, metadata !DIExpression()), !dbg !18
call void @llvm.dbg.value(metadata i32 %r, metadata !17, metadata !DIExpression()), !dbg !18
%add = add nsw i32 %p, 1, !dbg !18
store i32 %add, i32* @global, align 4, !dbg !18
tail call void asm sideeffect "", "~{edi},~{esi},~{edx},~{dirflag},~{fpsr},~{flags}"(), !dbg !18, !srcloc !19
ret i32 123, !dbg !18
}
; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!2}
!llvm.module.flags = !{!7, !8, !9}
!llvm.ident = !{!10}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "global", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 9.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
!3 = !DIFile(filename: "multiple-param-dbg-value-entry.c", directory: "/")
!4 = !{}
!5 = !{!0}
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!7 = !{i32 2, !"Dwarf Version", i32 4}
!8 = !{i32 2, !"Debug Info Version", i32 3}
!9 = !{i32 1, !"wchar_size", i32 4}
!10 = !{!"clang version 9.0.0 "}
!11 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 9, type: !12, scopeLine: 9, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !14)
!12 = !DISubroutineType(types: !13)
!13 = !{!6, !6, !6, !6}
!14 = !{!15, !16, !17}
!15 = !DILocalVariable(name: "p", arg: 1, scope: !11, file: !3, line: 9, type: !6)
!16 = !DILocalVariable(name: "q", arg: 2, scope: !11, file: !3, line: 9, type: !6)
!17 = !DILocalVariable(name: "r", arg: 3, scope: !11, file: !3, line: 9, type: !6)
!18 = !DILocation(line: 9, column: 13, scope: !11)
!19 = !{i32 213}
...
---
name: foo
alignment: 16
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0.entry:
liveins: $edi
DBG_VALUE $edi, $noreg, !15, !DIExpression(), debug-location !18
DBG_VALUE $edi, $noreg, !15, !DIExpression(), debug-location !18
DBG_VALUE $esi, $noreg, !16, !DIExpression(), debug-location !18
DBG_VALUE $edx, $noreg, !17, !DIExpression(), debug-location !18
renamable $edi = nsw INC32r killed renamable $edi, implicit-def dead $eflags, debug-location !18
MOV32mr $rip, 1, $noreg, @global, $noreg, killed renamable $edi, debug-location !18 :: (store 4 into @global)
INLINEASM &"", 1, 12, implicit-def dead early-clobber $edi, 12, implicit-def dead early-clobber $esi, 12, implicit-def dead early-clobber $edx, 12, implicit-def dead early-clobber $df, 12, implicit-def dead early-clobber $fpsw, 12, implicit-def dead early-clobber $eflags, !19, debug-location !18
$eax = MOV32ri 123, debug-location !18
RETQ killed $eax, debug-location !18
...