# RUN: llc -run-pass none -o - %s | FileCheck %s --- | target triple = "x86_64-unknown-linux-gnu" define ptr @foo(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) { entry: %tobool.not = icmp eq ptr %ptr, null br i1 %tobool.not, label %if.then, label %if.end if.then: ; preds = %entry %call = tail call ptr @bar(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) br label %if.end if.end: ; preds = %if.then, %entry %ptr.addr.0 = phi ptr [ %call, %if.then ], [ %ptr, %entry ] %incdec.ptr = getelementptr inbounds i8, ptr %ptr.addr.0, i64 1 %call2 = tail call ptr @qux(ptr %incdec.ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) ret ptr %call2 } declare ptr @bar(ptr, i64, i64, i64, i64, i64) declare ptr @qux(ptr, i64, i64, i64, i64, i64) ... --- name: foo alignment: 16 exposesReturnsTwice: false legalized: false regBankSelected: false selected: false failedISel: false tracksRegLiveness: true hasWinCFI: false noPhis: true isSSA: false noVRegs: true hasFakeUses: false callsEHReturn: false callsUnwindInit: false hasEHContTarget: false hasEHScopes: false hasEHFunclets: false isOutlined: false debugInstrRef: true failsVerification: false tracksDebugUserValues: true registers: [] liveins: - { reg: '$rdi', virtual-reg: '' } - { reg: '$rsi', virtual-reg: '' } - { reg: '$rdx', virtual-reg: '' } - { reg: '$rcx', virtual-reg: '' } - { reg: '$r8', virtual-reg: '' } - { reg: '$r9', virtual-reg: '' } frameInfo: isFrameAddressTaken: false isReturnAddressTaken: false hasStackMap: false hasPatchPoint: false stackSize: 0 offsetAdjustment: 0 maxAlignment: 1 adjustsStack: true hasCalls: true stackProtector: '' functionContext: '' maxCallFrameSize: 4294967295 cvBytesOfCalleeSavedRegisters: 0 hasOpaqueSPAdjustment: false hasVAStart: false hasMustTailInVarArgFunc: false hasTailCall: true isCalleeSavedInfoValid: false localFrameSize: 0 # CHECK: savePoint: # CHECK-NEXT: - point: '%bb.2' # CHECK-NEXT: registers: # CHECK-NEXT: - '$r12' # CHECK-NEXT: - '$r13' # CHECK-NEXT: - '$r14' # CHECK-NEXT: - '$r15' # CHECK-NEXT: - '$rbx' # CHECK: restorePoint: # CHECK-NEXT: - point: '%bb.2' # CHECK-NEXT: registers: # CHECK-NEXT: - '$r12' # CHECK-NEXT: - '$r13' # CHECK-NEXT: - '$r14' # CHECK-NEXT: - '$r15' # CHECK-NEXT: - '$rbx' savePoint: - point: '%bb.1' registers: - '$rbx' - '$r12' - '$r13' - '$r14' - '$r15' restorePoint: - point: '%bb.1' registers: - '$rbx' - '$r12' - '$r13' - '$r14' - '$r15' fixedStack: [] stack: [] entry_values: [] callSites: [] debugValueSubstitutions: [] constants: [] machineFunctionInfo: amxProgModel: None body: | bb.0.entry: successors: %bb.1(0x30000000), %bb.3(0x50000000) liveins: $rcx, $rdi, $rdx, $rsi, $r8, $r9 TEST64rr renamable $rdi, renamable $rdi, implicit-def $eflags JCC_1 %bb.1, 4, implicit killed $eflags bb.3: successors: %bb.2(0x80000000) liveins: $rcx, $rdi, $rdx, $rsi, $r8, $r9 JMP_1 %bb.2 bb.1.if.then: successors: %bb.2(0x80000000) liveins: $rcx, $rdi, $rdx, $rsi, $r8, $r9 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rbx = COPY renamable $rsi renamable $r14 = COPY renamable $rdx renamable $r15 = COPY renamable $rcx renamable $r12 = COPY renamable $r8 renamable $r13 = COPY renamable $r9 CALL64pcrel32 target-flags(x86-plt) @bar, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit $rsi, implicit $rdx, implicit $rcx, implicit $r8, implicit $r9, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $rsi = COPY killed renamable $rbx renamable $rdx = COPY killed renamable $r14 renamable $rcx = COPY killed renamable $r15 renamable $r8 = COPY killed renamable $r12 renamable $r9 = COPY killed renamable $r13 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdi = COPY killed $rax bb.2.if.end: liveins: $rcx, $rdi, $rdx, $rsi, $r8, $r9 renamable $rdi = nuw INC64r killed renamable $rdi, implicit-def dead $eflags TCRETURNdi64 target-flags(x86-plt) @qux, 0, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit $rsi, implicit $rdx, implicit $rcx, implicit $r8, implicit $r9 ...