; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s

; This test hung in the BranchFolding pass during asm-goto bring up

@e = dso_local global i32 0
@j = dso_local global i32 0

define dso_local void @n(ptr %o, i32 %p, i32 %u) nounwind {
; CHECK-LABEL: n:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    pushq %rbp
; CHECK-NEXT:    pushq %r15
; CHECK-NEXT:    pushq %r14
; CHECK-NEXT:    pushq %r13
; CHECK-NEXT:    pushq %r12
; CHECK-NEXT:    pushq %rbx
; CHECK-NEXT:    pushq %rax
; CHECK-NEXT:    movl %edx, %ebp
; CHECK-NEXT:    movl %esi, %r12d
; CHECK-NEXT:    movq %rdi, %rbx
; CHECK-NEXT:    callq c
; CHECK-NEXT:    movl %eax, %r14d
; CHECK-NEXT:    movq %rbx, %rdi
; CHECK-NEXT:    callq l
; CHECK-NEXT:    testl %eax, %eax
; CHECK-NEXT:    jne .LBB0_9
; CHECK-NEXT:  # %bb.1: # %if.end
; CHECK-NEXT:    cmpl $0, e(%rip)
; CHECK-NEXT:    # implicit-def: $r15d
; CHECK-NEXT:    # implicit-def: $r13d
; CHECK-NEXT:    je .LBB0_4
; CHECK-NEXT:  # %bb.2: # %if.then4
; CHECK-NEXT:    movslq %r12d, %rdi
; CHECK-NEXT:    callq m
; CHECK-NEXT:    # implicit-def: $r15d
; CHECK-NEXT:    # implicit-def: $r12d
; CHECK-NEXT:  .LBB0_3: # %r
; CHECK-NEXT:    callq c
; CHECK-NEXT:    movl %r12d, %r13d
; CHECK-NEXT:  .LBB0_4: # %if.end8
; CHECK-NEXT:    movl %r15d, %edi
; CHECK-NEXT:    callq i
; CHECK-NEXT:    movl %eax, %r12d
; CHECK-NEXT:    orl %r13d, %r12d
; CHECK-NEXT:    andl $4, %r15d
; CHECK-NEXT:    testl %r14d, %r14d
; CHECK-NEXT:    jne .LBB0_3
; CHECK-NEXT:  # %bb.5: # %if.end12
; CHECK-NEXT:    testl %r12d, %r12d
; CHECK-NEXT:    je .LBB0_8
; CHECK-NEXT:  # %bb.6: # %if.then14
; CHECK-NEXT:    #APP
; CHECK-NEXT:    #NO_APP
; CHECK-NEXT:    jmp .LBB0_9
; CHECK-NEXT:  .LBB0_7: # Block address taken
; CHECK-NEXT:    # %if.then20.critedge
; CHECK-NEXT:    # Label of block must be emitted
; CHECK-NEXT:    movl j(%rip), %edi
; CHECK-NEXT:    movslq %ebp, %rcx
; CHECK-NEXT:    movl $1, %esi
; CHECK-NEXT:    movq %rbx, %rdx
; CHECK-NEXT:    addq $8, %rsp
; CHECK-NEXT:    popq %rbx
; CHECK-NEXT:    popq %r12
; CHECK-NEXT:    popq %r13
; CHECK-NEXT:    popq %r14
; CHECK-NEXT:    popq %r15
; CHECK-NEXT:    popq %rbp
; CHECK-NEXT:    jmp k # TAILCALL
; CHECK-NEXT:  .LBB0_8: # %if.else
; CHECK-NEXT:    incq 0
; CHECK-NEXT:  .LBB0_9: # %cleanup
; CHECK-NEXT:    addq $8, %rsp
; CHECK-NEXT:    popq %rbx
; CHECK-NEXT:    popq %r12
; CHECK-NEXT:    popq %r13
; CHECK-NEXT:    popq %r14
; CHECK-NEXT:    popq %r15
; CHECK-NEXT:    popq %rbp
; CHECK-NEXT:    retq
entry:
  %call = tail call i32 @c()
  %call1 = tail call i32 @l(ptr %o)
  %tobool = icmp eq i32 %call1, 0
  br i1 %tobool, label %if.end, label %cleanup

if.end:                                           ; preds = %entry
  %0 = load i32, ptr @e
  %tobool3 = icmp eq i32 %0, 0
  br i1 %tobool3, label %if.end8, label %if.then4, !prof !0

if.then4:                                         ; preds = %if.end
  %conv5 = sext i32 %p to i64
  %call6 = tail call i32 @m(i64 %conv5)
  br label %r

r:                                                ; preds = %if.end8, %if.then4
  %flags.0 = phi i32 [ undef, %if.then4 ], [ %and, %if.end8 ]
  %major.0 = phi i32 [ undef, %if.then4 ], [ %or, %if.end8 ]
  %call7 = tail call i32 @c()
  br label %if.end8

if.end8:                                          ; preds = %r, %if.end
  %flags.1 = phi i32 [ %flags.0, %r ], [ undef, %if.end ]
  %major.1 = phi i32 [ %major.0, %r ], [ undef, %if.end ]
  %call9 = tail call i32 @i(i32 %flags.1)
  %or = or i32 %call9, %major.1
  %and = and i32 %flags.1, 4
  %tobool10 = icmp eq i32 %call, 0
  br i1 %tobool10, label %if.end12, label %r

if.end12:                                         ; preds = %if.end8
  %tobool13 = icmp eq i32 %or, 0
  br i1 %tobool13, label %if.else, label %if.then14

if.then14:                                        ; preds = %if.end12
  callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"()
          to label %cleanup [label %if.then20.critedge]

if.then20.critedge:                               ; preds = %if.then14
  %1 = load i32, ptr @j
  %conv21 = sext i32 %u to i64
  %call22 = tail call i32 @k(i32 %1, i64 1, ptr %o, i64 %conv21)
  br label %cleanup

if.else:                                          ; preds = %if.end12
  %2 = load i64, ptr null
  %inc = add i64 %2, 1
  store i64 %inc, ptr null
  br label %cleanup

cleanup:                                          ; preds = %if.else, %if.then20.critedge, %if.then14, %entry
  ret void
}

declare dso_local i32 @c()

declare dso_local i32 @l(ptr)

declare dso_local i32 @m(i64)

declare dso_local i32 @i(i32)

declare dso_local i32 @k(i32, i64, ptr, i64)

!0 = !{!"branch_weights", i32 2000, i32 1}
