104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
# RUN: llc %s -run-pass=postra-machine-sink -o - | FileCheck %s
 | 
						|
--- |
 | 
						|
  ; Module stripped of everything, MIR below is what's interesting
 | 
						|
  ; ModuleID = '<stdin>'
 | 
						|
  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, i8** 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:       4
 | 
						|
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, !21, !DIExpression()
 | 
						|
    renamable $ebx = COPY $edi
 | 
						|
    renamable $eax = MOV32r0 implicit-def dead $eflags
 | 
						|
    DBG_VALUE $ebx, $noreg, !21, !DIExpression()
 | 
						|
    CMP32ri $edi, 255, implicit-def $eflags
 | 
						|
    JG_1 %bb.2, 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  
 | 
						|
 | 
						|
...
 |