Files
clang-p2996/llvm/test/DebugInfo/MIR/InstrRef/pick-vphi-in-shifting-loop.mir
Simon Pilgrim d391e4fe84 [X86] Update RET/LRET instruction to use the same naming convention as IRET (PR36876). NFC
Be more consistent in the naming convention for the various RET instructions to specify in terms of bitwidth.

Helps prevent future scheduler model mismatches like those that were only addressed in D44687.

Differential Revision: https://reviews.llvm.org/D113302
2021-11-07 15:06:54 +00:00

129 lines
4.9 KiB
YAML

# RUN: llc %s -o - -run-pass=livedebugvalues \
# RUN: -experimental-debug-variable-locations \
# RUN: | FileCheck %s
#
# This test used to cause an infinite loop in InstrRefBasedLDV. Observe block
# five: on the first entry the desired variable value is in $rdx and $rcx, on
# both paths to the block. However, the block rotates values between those
# registers, and feeds a zero-value in too. Ultimately, there is no correct
# location for the variable in that block.
# This caused an infinite loop in a previous implementation of LiveDebugValues.
# Keep this around as a regression test, and check that no location is picked
# in block 5.
#
# CHECK-LABEL: bb.3:
# CHECK: DBG_INSTR_REF 7, 0
# CHECK-NEXT: DBG_VALUE $rdx
# CHECK-NEXT: $rcx = MOV64rr $rdx
# CHECK-LABEL: bb.4:
# CHECK: DBG_VALUE $rcx
# CHECK-NEXT: $rdx = MOV64rr killed $rcx
# CHECK-LABEL: bb.5:
# CHEKC-NOT: DBG_VALUE
--- |
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: nofree norecurse nosync nounwind readonly uwtable
define dso_local void @bees() local_unnamed_addr !dbg !13 {
entry:
ret void, !dbg !22
}
; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!2}
!llvm.module.flags = !{!8, !9, !10, !11}
!llvm.ident = !{!12}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "xmlNormalizeURIPath_path", scope: !2, file: !3, line: 1, type: !6, isLocal: false, isDefinition: true)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 10.0 (git@github.com:llvm/llvm-project 9d8de79d09c9560c094d90b010e8315fe2712ec2)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None)
!3 = !DIFile(filename: "test4.c", directory: "/tmp")
!4 = !{}
!5 = !{!0}
!6 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64)
!7 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
!8 = !{i32 7, !"Dwarf Version", i32 4}
!9 = !{i32 2, !"Debug Info Version", i32 3}
!10 = !{i32 1, !"wchar_size", i32 4}
!11 = !{i32 7, !"uwtable", i32 1}
!12 = !{!"clang version 10.0 (git@github.com:llvm/llvm-project 9d8de79d09c9560c094d90b010e8315fe2712ec2)"}
!13 = distinct !DISubprogram(name: "xmlNormalizeURIPath", scope: !3, file: !3, line: 2, type: !14, scopeLine: 2, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !16)
!14 = !DISubroutineType(types: !15)
!15 = !{null}
!16 = !{!17, !18}
!17 = !DILocalVariable(name: "cur", scope: !13, file: !3, line: 3, type: !6)
!18 = !DILocalVariable(name: "segp", scope: !19, file: !3, line: 5, type: !6)
!19 = distinct !DILexicalBlock(scope: !13, file: !3, line: 4, column: 13)
!20 = !DILocation(line: 4, column: 3, scope: !13)
!21 = !DILocation(line: 0, scope: !13)
!22 = !DILocation(line: 0, scope: !19)
!23 = !DILocation(line: 6, column: 5, scope: !19)
!24 = !DILocation(line: 6, column: 12, scope: !19)
!25 = !{!26, !26, i64 0}
!26 = !{!"omnipotent char", !27, i64 0}
!27 = !{!"Simple C/C++ TBAA"}
!28 = !DILocation(line: 6, column: 27, scope: !19)
!29 = !DILocation(line: 7, column: 7, scope: !19)
!30 = distinct !{!30, !23, !31, !32, !33}
!31 = !DILocation(line: 7, column: 9, scope: !19)
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!"llvm.loop.unroll.disable"}
...
---
name: bees
alignment: 16
tracksRegLiveness: true
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo: {}
body: |
bb.0:
$rdx = MOV64ri 0, implicit-def $eflags
$esi = MOV32ri 0, implicit-def $eflags
bb.1:
successors: %bb.2(0x03e0f83e), %bb.1(0x7c1f07c2)
liveins: $rcx, $rdi, $rdx, $eflags
DBG_PHI $rcx, 2
DBG_INSTR_REF 2, 0, !18, !DIExpression(), debug-location !22
JCC_1 %bb.1, 4, implicit $eflags, debug-location !22
bb.2:
successors: %bb.4(0x30000000), %bb.3(0x50000000)
liveins: $rcx, $rdi, $eflags
JCC_1 %bb.4, 4, implicit $eflags, debug-location !22
bb.3:
successors: %bb.5(0x04000000)
liveins: $rcx, $rdi, $eflags
$rdx = MOV64ri 0, debug-instr-number 7, debug-location !22
DBG_INSTR_REF 7, 0, !18, !DIExpression(), debug-location !22
$rcx = MOV64rr $rdx
JMP_1 %bb.5, debug-location !22
bb.4:
liveins: $rcx, $rdi, $eflags
$rdx = MOV64rr killed $rcx, debug-location !22
bb.5:
successors: %bb.5(0x7c000000), %bb.6(0x04000000)
liveins: $rdi, $rdx, $eflags
$rcx = MOV64rr $rdx, debug-location !22
$rdx = MOV64ri 0 ; jmorse -- disabling this makes variable live-through
JCC_1 %bb.5, 6, implicit $eflags, debug-location !22
bb.6:
RET64 debug-location !22
...