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

define i32 @h(i1 %arg, i32 %arg1) {
; CHECK-LABEL: h:
; CHECK:       # %bb.0: # %bb
; CHECK-NEXT:    movl $1, %eax
; CHECK-NEXT:    movabsq $9166129423, %rcx # imm = 0x22258090F
; CHECK-NEXT:    xorl %edx, %edx
; CHECK-NEXT:    jmp .LBB0_1
; CHECK-NEXT:    .p2align 4
; CHECK-NEXT:  .LBB0_9: # %bb18
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    testb $1, %dil
; CHECK-NEXT:    jne .LBB0_10
; CHECK-NEXT:  .LBB0_1: # %bb4
; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
; CHECK-NEXT:    testq %rdx, %rdx
; CHECK-NEXT:    jne .LBB0_2
; CHECK-NEXT:  # %bb.7: # %bb16
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    testb $1, %dil
; CHECK-NEXT:    jne .LBB0_9
; CHECK-NEXT:  # %bb.8: # %bb17
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    movq %rcx, %rdx
; CHECK-NEXT:    jmp .LBB0_9
; CHECK-NEXT:  .LBB0_2: # %bb9
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    testb $1, %dil
; CHECK-NEXT:    testb $1, %dil
; CHECK-NEXT:    je .LBB0_4
; CHECK-NEXT:  # %bb.3: # %bb13
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:  .LBB0_4: # %bb14
; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
; CHECK-NEXT:    cmpl $1, %esi
; CHECK-NEXT:    je .LBB0_1
; CHECK-NEXT:  # %bb.5: # %bb14
; CHECK-NEXT:    movl %eax, %r8d
; CHECK-NEXT:    testl %esi, %esi
; CHECK-NEXT:    movl %esi, %eax
; CHECK-NEXT:    jne .LBB0_6
; CHECK-NEXT:  .LBB0_10: # %bb22
; CHECK-NEXT:    retq
; CHECK-NEXT:  .LBB0_6: # %bb22.loopexit1
; CHECK-NEXT:    movl %r8d, %eax
; CHECK-NEXT:    retq
bb:
  br label %bb2

bb2:                                              ; preds = %bb14, %bb
  %i = phi i64 [ %i5, %bb14 ], [ 0, %bb ]
  %i3 = phi i32 [ %i15, %bb14 ], [ 1, %bb ]
  br label %bb4

bb4:                                              ; preds = %bb18, %bb2
  %i5 = phi i64 [ %i19, %bb18 ], [ %i, %bb2 ]
  %i6 = phi i64 [ %i20, %bb18 ], [ %i, %bb2 ]
  %i7 = phi i32 [ 0, %bb18 ], [ %i3, %bb2 ]
  %i8 = icmp eq i64 %i6, 0
  br i1 %i8, label %bb16, label %bb9

bb9:                                              ; preds = %bb4
  br i1 %arg, label %bb12, label %bb10

bb10:                                             ; preds = %bb9
  %i11 = sdiv i64 0, 0
  br label %bb12

bb12:                                             ; preds = %bb10, %bb9
  br i1 %arg, label %bb13, label %bb14

bb13:                                             ; preds = %bb12
  br label %bb14

bb14:                                             ; preds = %bb13, %bb12
  %i15 = phi i32 [ 0, %bb13 ], [ %i7, %bb12 ]
  switch i32 %arg1, label %bb22 [
    i32 0, label %bb21
    i32 1, label %bb2
  ]

bb16:                                             ; preds = %bb4
  br i1 %arg, label %bb18, label %bb17

bb17:                                             ; preds = %bb16
  br label %bb18

bb18:                                             ; preds = %bb17, %bb16
  %i19 = phi i64 [ 9166129423, %bb17 ], [ %i5, %bb16 ]
  %i20 = phi i64 [ 9166129423, %bb17 ], [ %i6, %bb16 ]
  br i1 %arg, label %bb22, label %bb4

bb21:                                             ; preds = %bb14
  br label %bb22

bb22:                                             ; preds = %bb21, %bb18, %bb14
  %i23 = phi i32 [ %arg1, %bb21 ], [ %i15, %bb14 ], [ 0, %bb18 ]
  ret i32 %i23
}
