# RUN: not --crash llc -run-pass=none -verify-machineinstrs %s -o /dev/null 2>&1 \
# RUN:  | FileCheck %s
# REQUIRES: powerpc-registered-target

# Test for a case we observed after the initial implementation of D129997
# landed, in which case we observed a crash while building the ppc64le Linux
# kernel. In that case, we had one block with two exits, both to the same
# successor. Removing one of the exits corrupted the successor/predecessor
# lists.

# CHECK: *** Bad machine code: INLINEASM_BR indirect target missing from successor list ***
# CHECK-NEXT: - function:    ceph_con_v2_try_read
# CHECK-NEXT: - basic block: %bb.3 if.else.i.i
# CHECK-NEXT: - instruction: INLINEASM_BR &"" [sideeffect] [attdialect], $0:[imm], %bb.5
# CHECK-NEXT: - operand 3:   %bb.5

# CHECK: *** Bad machine code: INLINEASM_BR indirect target predecessor list missing parent ***
# CHECK-NEXT: - function:    ceph_con_v2_try_read
# CHECK-NEXT: - basic block: %bb.3 if.else.i.i
# CHECK-NEXT: - instruction: INLINEASM_BR &"" [sideeffect] [attdialect], $0:[imm], %bb.5
# CHECK-NEXT: - operand 3:   %bb.5

--- |
  target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
  target triple = "powerpc64le-unknown-linux-gnu"

  ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
  declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

  define void @ceph_con_v2_try_read(i32 %__trans_tmp_3.sroa.0.0.copyload, i1 %tobool.not.i.i) {
  entry:
    %skip.i.i = alloca i32, i32 0, align 4
    %cond = icmp eq i32 %__trans_tmp_3.sroa.0.0.copyload, 0
    br label %for.cond

  for.cond:                                         ; preds = %for.cond, %process_message_header.exit.i, %if.end.i, %entry
    br i1 %cond, label %sw.bb, label %for.cond

  sw.bb:                                            ; preds = %for.cond
    %call.i.i2 = call i32 null(ptr %skip.i.i)
    br i1 %tobool.not.i.i, label %if.else.i.i, label %process_message_header.exit.i

  if.else.i.i:                                      ; preds = %sw.bb
    callbr void asm sideeffect "", "!i"()
            to label %if.end.i [label %if.end.i]

  process_message_header.exit.i:                    ; preds = %sw.bb
    call void @llvm.lifetime.end.p0(i64 0, ptr %skip.i.i)
    br label %for.cond

  if.end.i:                                         ; preds = %if.else.i.i, %if.else.i.i
    call void @llvm.lifetime.end.p0(i64 0, ptr %skip.i.i)
    br label %for.cond
  }

  attributes #0 = { argmemonly nocallback nofree nosync nounwind willreturn }

...
---
name:            ceph_con_v2_try_read
alignment:       16
exposesReturnsTwice: false
legalized:       false
regBankSelected: false
selected:        false
failedISel:      false
tracksRegLiveness: true
hasWinCFI:       false
callsEHReturn:   false
callsUnwindInit: false
hasEHCatchret:   false
hasEHScopes:     false
hasEHFunclets:   false
failsVerification: false
tracksDebugUserValues: false
registers:
  - { id: 0, class: crbitrc, preferred-register: '' }
  - { id: 1, class: g8rc, preferred-register: '' }
  - { id: 2, class: g8rc, preferred-register: '' }
  - { id: 3, class: crbitrc, preferred-register: '' }
  - { id: 4, class: gprc, preferred-register: '' }
  - { id: 5, class: crrc, preferred-register: '' }
  - { id: 6, class: g8rc, preferred-register: '' }
  - { id: 7, class: g8rc, preferred-register: '' }
  - { id: 8, class: g8rc, preferred-register: '' }
  - { id: 9, class: g8rc, preferred-register: '' }
  - { id: 10, class: g8rc, preferred-register: '' }
liveins:
  - { reg: '$x3', virtual-reg: '%1' }
  - { reg: '$x4', virtual-reg: '%2' }
frameInfo:
  isFrameAddressTaken: false
  isReturnAddressTaken: false
  hasStackMap:     false
  hasPatchPoint:   false
  stackSize:       0
  offsetAdjustment: 0
  maxAlignment:    4
  adjustsStack:    false
  hasCalls:        true
  stackProtector:  ''
  functionContext: ''
  maxCallFrameSize: 4294967295
  cvBytesOfCalleeSavedRegisters: 0
  hasOpaqueSPAdjustment: false
  hasVAStart:      false
  hasMustTailInVarArgFunc: false
  hasTailCall:     false
  localFrameSize:  0
  savePoint:       ''
  restorePoint:    ''
fixedStack:      []
stack:
  - { id: 0, name: skip.i.i, type: default, offset: 0, size: 1, alignment: 4,
      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
callSites:       []
debugValueSubstitutions: []
constants:       []
machineFunctionInfo: {}
body:             |
  bb.0.entry:
    successors: %bb.1(0x80000000)
    liveins: $x3, $x4

    %2:g8rc = COPY $x4
    %1:g8rc = COPY $x3
    %10:g8rc = ANDI8_rec %2, 1, implicit-def $cr0
    %3:crbitrc = COPY $cr0gt
    %4:gprc = COPY %1.sub_32
    %5:crrc = CMPWI killed %4, 0
    %0:crbitrc = COPY %5.sub_eq

  bb.1.for.cond:
    successors: %bb.2(0x30000000), %bb.1(0x50000000)

    BCn %0, %bb.1
    B %bb.2

  bb.2.sw.bb:
    successors: %bb.3(0x40000000), %bb.4(0x40000000)

    ADJCALLSTACKDOWN 32, 0, implicit-def dead $r1, implicit $r1
    %6:g8rc = COPY $x2
    STD %6, 24, $x1 :: (store (s64) into stack + 24)
    %7:g8rc = ADDI8 %stack.0.skip.i.i, 0
    %8:g8rc = LI8 0
    $x3 = COPY %7
    $x12 = COPY %8
    MTCTR8 %8, implicit-def $ctr8
    BCTRL8_LDinto_toc 24, $x1, csr_ppc64_altivec, implicit-def dead $lr8, implicit-def dead $x2, implicit $ctr8, implicit $rm, implicit $x3, implicit $x12, implicit $x2, implicit-def $r1, implicit-def $x3
    ADJCALLSTACKUP 32, 0, implicit-def dead $r1, implicit $r1
    %9:g8rc = COPY $x3
    BCn %3, %bb.4
    B %bb.3

  ; Oops, should have %bb.5 in the successor list!
  bb.3.if.else.i.i:
    successors: %bb.1(0x80000000)

    INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.5
    LIFETIME_END %stack.0.skip.i.i
    B %bb.1

  bb.4.process_message_header.exit.i:
    successors: %bb.1(0x80000000)

    LIFETIME_END %stack.0.skip.i.i
    B %bb.1

  ; Oops, should have %bb.3 in the predecessor list!
  bb.5.if.end.i (machine-block-address-taken, inlineasm-br-indirect-target):
    successors: %bb.1(0x80000000)

    LIFETIME_END %stack.0.skip.i.i
    B %bb.1

...
