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
124 lines
4.2 KiB
YAML
124 lines
4.2 KiB
YAML
# RUN: llc %s -o - -run-pass=livedebugvalues -mtriple=x86_64-unknown-unknown | FileCheck %s
|
|
# RUN: llc %s -o - -force-instr-ref-livedebugvalues=1 -run-pass=livedebugvalues -mtriple=x86_64-unknown-unknown | FileCheck %s
|
|
#
|
|
# In this lightly modified test case, the transfer in the entry block from
|
|
# geti32's return value in $eax to the non-volatile $ebx should be recognized,
|
|
# and propagated throughout the whole function.
|
|
#
|
|
# CHECK-LABEL: bb.0.entry
|
|
# CHECK: DBG_VALUE $eax
|
|
# CHECK: DBG_VALUE $ebx
|
|
# CHECK-LABEL: bb.1.loop2
|
|
# CHECK: DBG_VALUE $ebx
|
|
# CHECK-LABEL: bb.2.loop
|
|
# CHECK: DBG_VALUE $ebx
|
|
# CHECK-LABEL: bb.3.exit
|
|
# CHECK: DBG_VALUE $ebx
|
|
--- |
|
|
; ModuleID = 'asdf'
|
|
source_filename = "asdf.ll"
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-unknown"
|
|
|
|
@glob = global i32 0
|
|
|
|
declare i1 @booler()
|
|
|
|
declare i32 @geti32()
|
|
|
|
declare void @escape(i32)
|
|
|
|
; Function Attrs: nounwind readnone speculatable willreturn
|
|
declare void @llvm.dbg.value(metadata, metadata, metadata)
|
|
|
|
define i32 @foo() !dbg !4 {
|
|
entry:
|
|
%bar = call i32 @geti32(), !dbg !10
|
|
call void @llvm.dbg.value(metadata i32 %bar, metadata !9, metadata !DIExpression()), !dbg !10
|
|
br label %loop
|
|
|
|
loop: ; preds = %loop2, %entry
|
|
call void @escape(i32 %bar)
|
|
%retval = call i1 @booler(), !dbg !10
|
|
br i1 %retval, label %loop2, label %exit
|
|
|
|
loop2: ; preds = %loop
|
|
store i32 %bar, i32* @glob
|
|
br label %loop
|
|
|
|
exit: ; preds = %loop
|
|
ret i32 %bar
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.stackprotector(i8*, i8**)
|
|
|
|
!llvm.module.flags = !{!0, !1}
|
|
!llvm.dbg.cu = !{!2}
|
|
|
|
!0 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!1 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "beards", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
|
|
!3 = !DIFile(filename: "bees.cpp", directory: ".")
|
|
!4 = distinct !DISubprogram(name: "nope", scope: !3, file: !3, line: 1, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !8)
|
|
!5 = !DISubroutineType(types: !6)
|
|
!6 = !{!7}
|
|
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
|
!8 = !{!9}
|
|
!9 = !DILocalVariable(name: "toast", scope: !4, file: !3, line: 1, type: !7)
|
|
!10 = !DILocation(line: 1, scope: !4)
|
|
|
|
...
|
|
---
|
|
name: foo
|
|
tracksRegLiveness: true
|
|
frameInfo:
|
|
stackSize: 8
|
|
offsetAdjustment: -8
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
cvBytesOfCalleeSavedRegisters: 8
|
|
fixedStack:
|
|
- { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, stack-id: default,
|
|
callee-saved-register: '$rbx', callee-saved-restored: true, debug-info-variable: '',
|
|
debug-info-expression: '', debug-info-location: '' }
|
|
stack: []
|
|
body: |
|
|
bb.0.entry:
|
|
successors: %bb.1(0x80000000)
|
|
liveins: $rbx
|
|
|
|
frame-setup PUSH64r killed $rbx, implicit-def $rsp, implicit $rsp, debug-location !10
|
|
CFI_INSTRUCTION def_cfa_offset 16
|
|
CFI_INSTRUCTION offset $rbx, -16
|
|
CALL64pcrel32 @geti32, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $eax, debug-location !10
|
|
DBG_VALUE $eax, $noreg, !9, !DIExpression(), debug-location !10
|
|
$ebx = MOV32rr killed $eax, debug-location !10
|
|
JMP_1 %bb.1
|
|
|
|
bb.1.loop2:
|
|
successors: %bb.2
|
|
liveins: $ebx
|
|
|
|
MOV32mr $rip, 1, $noreg, @glob, $noreg, renamable $ebx :: (store (s32) into @glob)
|
|
|
|
bb.2.loop:
|
|
successors: %bb.1, %bb.3
|
|
liveins: $ebx
|
|
|
|
$edi = MOV32rr $ebx
|
|
CALL64pcrel32 @escape, csr_64, implicit $rsp, implicit $ssp, implicit killed $edi, implicit-def $rsp, implicit-def $ssp
|
|
CALL64pcrel32 @booler, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $al, debug-location !10
|
|
TEST8ri killed renamable $al, 1, implicit-def $eflags
|
|
JCC_1 %bb.1, 5, implicit $eflags
|
|
|
|
bb.3.exit:
|
|
liveins: $ebx
|
|
|
|
$eax = MOV32rr killed $ebx
|
|
$rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
|
|
CFI_INSTRUCTION def_cfa_offset 8
|
|
RET64 $eax
|
|
|
|
...
|