# RUN: llc -mtriple=arm-linux-gnu -debug-entry-values -run-pass if-converter %s -o -| FileCheck %s

# Vefify that the call site info will be updated after the optimization.
# This test case would previously trigger an assertion when
# deleting the call instruction.

# Test case is generated from:
# extern void
# foo (int* seg, int subseg);
# extern int* mri_common_symbol;
#
# void
# baa (int* secptr, int subseg)
# {
#   if (! (secptr == 0 && subseg == 0))
#     foo (secptr, subseg);
#   mri_common_symbol = 0;
# }
#
# With slight change of MIR - substitution of BL instruction with BL_pred 
# in order to trigger optimization.
# clang -target arm-linux-gnu -g -O2 -Xclang -femit-debug-entry-values 
#       %s -stop-before=if-convert
#
# CHECK: callSites:
# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs:
# CHECK-NEXT:     - { arg: 0, reg: '$r0' }
# CHECK-NEXT:     - { arg: 1, reg: '$r1' } }

--- |
  ; ModuleID = 'if-convert-call-site-info.c'
  source_filename = "if-convert-call-site-info.c"
  target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
  target triple = "armv6kz-unknown-linux-gnueabihf"
  
  @mri_common_symbol = external dso_local local_unnamed_addr global i32*, align 4
  
  ; Function Attrs: nounwind
  define dso_local void @baa(i32* %secptr, i32 %subseg) local_unnamed_addr #0 !dbg !14 {
  entry:
    call void @llvm.dbg.value(metadata i32* %secptr, metadata !16, metadata !DIExpression()), !dbg !18
    call void @llvm.dbg.value(metadata i32 %subseg, metadata !17, metadata !DIExpression()), !dbg !18
    %cmp = icmp eq i32* %secptr, null, !dbg !19
    %cmp1 = icmp eq i32 %subseg, 0, !dbg !21
    %or.cond = and i1 %cmp, %cmp1, !dbg !22
    br i1 %or.cond, label %if.end, label %if.then, !dbg !22
  
  if.then:                                          ; preds = %entry
    tail call void @foo(i32* %secptr, i32 %subseg), !dbg !23
    br label %if.end, !dbg !23
  
  if.end:                                           ; preds = %entry, %if.then
    store i32* null, i32** @mri_common_symbol, align 4, !dbg !24, !tbaa !25
    ret void, !dbg !29
  }
  
  declare !dbg !4 dso_local void @foo(i32*, i32) local_unnamed_addr
  
  ; Function Attrs: nounwind readnone speculatable willreturn
  declare void @llvm.dbg.value(metadata, metadata, metadata)
  
  ; Function Attrs: nounwind
  declare void @llvm.stackprotector(i8*, i8**)
  
  attributes #0 = { "frame-pointer"="all" }
  
  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!9, !10, !11, !12}
  !llvm.ident = !{!13}
  
  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 10.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !3, nameTableKind: None)
  !1 = !DIFile(filename: "if-convert-call-site-info.c", directory: "/")
  !2 = !{}
  !3 = !{!4}
  !4 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 10, type: !5, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
  !5 = !DISubroutineType(types: !6)
  !6 = !{null, !7, !8}
  !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 32)
  !8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
  !9 = !{i32 2, !"Dwarf Version", i32 4}
  !10 = !{i32 2, !"Debug Info Version", i32 3}
  !11 = !{i32 1, !"wchar_size", i32 4}
  !12 = !{i32 1, !"min_enum_size", i32 4}
  !13 = !{!"clang version 10.0.0 "}
  !14 = distinct !DISubprogram(name: "baa", scope: !1, file: !1, line: 14, type: !5, scopeLine: 15, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !15)
  !15 = !{!16, !17}
  !16 = !DILocalVariable(name: "secptr", arg: 1, scope: !14, file: !1, line: 14, type: !7, flags: DIFlagArgumentNotModified)
  !17 = !DILocalVariable(name: "subseg", arg: 2, scope: !14, file: !1, line: 14, type: !8, flags: DIFlagArgumentNotModified)
  !18 = !DILocation(line: 0, scope: !14)
  !19 = !DILocation(line: 16, column: 17, scope: !20)
  !20 = distinct !DILexicalBlock(scope: !14, file: !1, line: 16, column: 7)
  !21 = !DILocation(line: 16, column: 32, scope: !20)
  !22 = !DILocation(line: 16, column: 22, scope: !20)
  !23 = !DILocation(line: 17, column: 5, scope: !20)
  !24 = !DILocation(line: 18, column: 21, scope: !14)
  !25 = !{!26, !26, i64 0}
  !26 = !{!"any pointer", !27, i64 0}
  !27 = !{!"omnipotent char", !28, i64 0}
  !28 = !{!"Simple C/C++ TBAA"}
  !29 = !DILocation(line: 19, column: 1, scope: !14)

...
---
name:            baa
alignment:       2
tracksRegLiveness: true
liveins:
  - { reg: '$r0' }
  - { reg: '$r1' }
frameInfo:
  stackSize:       8
  maxAlignment:    4
  adjustsStack:    true
  hasCalls:        true
  maxCallFrameSize: 0
stack:
  - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, callee-saved-register: '$lr', 
      callee-saved-restored: false }
  - { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 4, callee-saved-register: '$r11' }
callSites:
  - { bb: 2, offset: 0, fwdArgRegs: 
      - { arg: 0, reg: '$r0' }
      - { arg: 1, reg: '$r1' } }
constants:
  - id:              0
    value:           'i32** null'
    alignment:       4
machineFunctionInfo: {}
body:             |
  bb.0.entry:
    successors: %bb.1(0x60000000), %bb.2(0x20000000)
    liveins: $r0, $r1, $lr
  
    DBG_VALUE $r0, $noreg, !16, !DIExpression(), debug-location !18
    DBG_VALUE $r0, $noreg, !16, !DIExpression(), debug-location !18
    DBG_VALUE $r1, $noreg, !17, !DIExpression(), debug-location !18
    DBG_VALUE $r1, $noreg, !17, !DIExpression(), debug-location !18
    $sp = frame-setup STMDB_UPD $sp, 14, $noreg, killed $r11, killed $lr
    frame-setup CFI_INSTRUCTION def_cfa_offset 8
    frame-setup CFI_INSTRUCTION offset $lr, -4
    frame-setup CFI_INSTRUCTION offset $r11, -8
    $r11 = frame-setup MOVr killed $sp, 14, $noreg, $noreg
    frame-setup CFI_INSTRUCTION def_cfa_register $r11
    CMPri renamable $r0, 0, 14, $noreg, implicit-def $cpsr, debug-location !22
    Bcc %bb.2, 1, killed $cpsr, debug-location !22
  
  bb.1.entry:
    successors: %bb.3(0x55555555), %bb.2(0x2aaaaaab)
    liveins: $r0, $r1
  
    CMPri renamable $r1, 0, 14, $noreg, implicit-def $cpsr, debug-location !22
    Bcc %bb.3, 0, killed $cpsr, debug-location !22
  
  bb.2.if.then:
    liveins: $r0, $r1
  
    BL_pred @foo, 14, $noreg, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $sp, debug-location !23
  
  bb.3.if.end:
    renamable $r0 = LDRi12 %const.0, 0, 14, $noreg, debug-location !24 :: (load 4 from constant-pool)
    renamable $r1 = MOVi 0, 14, $noreg, $noreg
    STRi12 killed renamable $r1, killed renamable $r0, 0, 14, $noreg, debug-location !24 :: (store 4 into @mri_common_symbol, !tbaa !25)
    $sp = LDMIA_RET $sp, 14, $noreg, def $r11, def $pc, debug-location !29

...
