# RUN: llc %s -run-pass=postra-machine-sink -o - | FileCheck %s --- | ; Module stripped of everything, MIR below is what's interesting ; ModuleID = '' source_filename = "justacall.cpp" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; Function Attrs: noinline norecurse nounwind uwtable define dso_local i32 @main(i32 %argc, ptr nocapture readnone %argv) local_unnamed_addr #0 { entry: br label %if.end if.end: br label %return return: ret i32 0 } !0 = !{!"dummy metadata"} !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None) !3 = !DIFile(filename: "justacall.cpp", directory: "/tmp") !4 = !{} !5 = !{!0} !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) !14 = distinct !DISubprogram(name: "main", scope: !3, file: !3, line: 7, type: !15, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !20) !15 = !DISubroutineType(types: !16) !16 = !{!7, !7} !20 = !{!21} !21 = !DILocalVariable(name: "argc", arg: 1, scope: !14, file: !3, line: 7, type: !7) ... --- name: main alignment: 16 exposesReturnsTwice: false legalized: false regBankSelected: false selected: false failedISel: false tracksRegLiveness: true hasWinCFI: false registers: liveins: - { reg: '$edi', virtual-reg: '' } frameInfo: isFrameAddressTaken: false isReturnAddressTaken: false hasStackMap: false hasPatchPoint: false stackSize: 0 offsetAdjustment: 0 maxAlignment: 0 adjustsStack: false hasCalls: true stackProtector: '' maxCallFrameSize: 4294967295 cvBytesOfCalleeSavedRegisters: 0 hasOpaqueSPAdjustment: false hasVAStart: false hasMustTailInVarArgFunc: false localFrameSize: 0 savePoint: '' restorePoint: '' fixedStack: stack: constants: body: | bb.0.entry: successors: %bb.2(0x40000000), %bb.1(0x40000000) liveins: $edi ; Test that the DBG_VALUE on ebx below is sunk with the def of ebx, despite ; not being adjacent to the def, see PR38952 DBG_VALUE $edi, $noreg renamable $ebx = COPY $edi renamable $eax = MOV32r0 implicit-def dead $eflags DBG_VALUE $ebx, $noreg CMP32ri $edi, 255, implicit-def $eflags JCC_1 %bb.2, 15, implicit killed $eflags JMP_1 %bb.1 bb.1.if.end: ; CHECK-LABEL: bb.1.if.end successors: %bb.2(0x80000000) liveins: $ebx ; CHECK: $ebx = COPY $edi ; CHECK-NEXT: DBG_VALUE $ebx renamable $rdx = MOVSX64rr32 renamable $ebx renamable $rdx = nsw SHL64ri killed renamable $rdx, 2, implicit-def dead $eflags ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rdi = MOV32ri64 0 $esi = MOV32r0 implicit-def dead $eflags CALL64pcrel32 &memset, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit killed $esi, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp bb.2.return: liveins: $eax RET 0, $eax ...