; RUN: llc -O0 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DEBUG
; RUN: llc < %s | FileCheck %s
; RUN: llc -filetype=obj -O0 < %s | llvm-readobj -codeview - | FileCheck %s --check-prefix=OBJ

; IR generated by the following source:
; struct NonTrivial {
;   NonTrivial();// : x(42) {}
;   ~NonTrivial();// {}
;   int x;
; };
; extern "C" void g(int);// {}
; extern "C" void h(int);// {}
; extern "C" void f(NonTrivial a, int b, int unused, int c) {
;   if (b) {
;     g(c);
;   } else {
;     h(a.x);
;   }
;   (void)unused;
; }
; //int main() {
; //  NonTrivial x;
; //  f(x, 1, 2, 3);
; //}
;
; Remove C++ comments to have a complete, debuggable program.

; We don't need (or want) DBG_VALUE instructions to describe the location of
; inalloca arguments. We want frame indices in the side table, especially at
; -O0, because they are reliable across the entire function and don't require
; any propagation or analysis.

; CHECK: _f:                                     # @f
; CHECK: Lfunc_begin0:
; CHECK-NOT: DEBUG_VALUE
; CHECK: [[start:Ltmp[0-9]+]]:
; CHECK-NOT: DEBUG_VALUE
; CHECK:         cmpl
; CHECK:         calll   _g
; CHECK:         calll   _h
; CHECK:         jmp "??1NonTrivial@@QAE@XZ"
; CHECK: [[end:Ltmp[0-9]+]]:
; CHECK: Lfunc_end0:

; FIXME: Optimized debug info should preserve this.
; DEBUG:         .short  4414                    # Record kind: S_LOCAL
; DEBUG:         .asciz  "a"
; DEBUG:         .cv_def_range    [[start]] [[end]]

; CHECK:         .short  4414                    # Record kind: S_LOCAL
; CHECK:         .asciz  "b"
; CHECK:         .cv_def_range    [[start]] [[end]]

; CHECK:         .short  4414                    # Record kind: S_LOCAL
; CHECK:         .asciz  "c"
; CHECK:         .cv_def_range    [[start]] [[end]]

; OBJ-LABEL: {{.*}}Proc{{.*}}Sym {
; OBJ:   Kind: S_GPROC32_ID (0x1147)
; OBJ:   DisplayName: f
; OBJ: }
; OBJ: LocalSym {
; OBJ:   Type: NonTrivial (0x1007)
; OBJ:   Flags [ (0x1)
; OBJ:     IsParameter (0x1)
; OBJ:   ]
; OBJ:   VarName: a
; OBJ: }
; OBJ: DefRangeRegisterRelSym {
; OBJ:   BaseRegister: 21
; OBJ:   BasePointerOffset: 12
; OBJ: }
; OBJ: LocalSym {
; OBJ:   Type: int (0x74)
; OBJ:   Flags [ (0x1)
; OBJ:     IsParameter (0x1)
; OBJ:   ]
; OBJ:   VarName: b
; OBJ: }
; OBJ: DefRangeRegisterRelSym {
; OBJ:   BaseRegister: 21
; OBJ:   BasePointerOffset: 16
; OBJ: }
; FIXME: Retain unused.
; OBJ: LocalSym {
; OBJ:   Type: int (0x74)
; OBJ:   Flags [ (0x1)
; OBJ:     IsParameter (0x1)
; OBJ:   ]
; OBJ:   VarName: c
; OBJ: }
; OBJ: DefRangeRegisterRelSym {
; OBJ:   BaseRegister: 21
; OBJ:   BasePointerOffset: 24
; OBJ: }
; OBJ-LABEL: ProcEnd {
; OBJ: }


; ModuleID = 't.cpp'
source_filename = "t.cpp"
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i386-pc-windows-msvc19.10.24728"

%struct.NonTrivial = type { i32 }

; Function Attrs: nounwind
define void @f(<{ %struct.NonTrivial, i32, i32, i32 }>* inalloca) local_unnamed_addr #0 !dbg !7 {
entry:
  %a = getelementptr inbounds <{ %struct.NonTrivial, i32, i32, i32 }>, <{ %struct.NonTrivial, i32, i32, i32 }>* %0, i32 0, i32 0
  %b = getelementptr inbounds <{ %struct.NonTrivial, i32, i32, i32 }>, <{ %struct.NonTrivial, i32, i32, i32 }>* %0, i32 0, i32 1
  tail call void @llvm.dbg.declare(metadata i32* %c, metadata !20, metadata !24), !dbg !25
  tail call void @llvm.dbg.declare(metadata i32* %b, metadata !22, metadata !24), !dbg !26
  tail call void @llvm.dbg.declare(metadata %struct.NonTrivial* %a, metadata !23, metadata !24), !dbg !27
  %1 = load i32, i32* %b, align 4, !dbg !28, !tbaa !30
  %tobool = icmp eq i32 %1, 0, !dbg !28
  br i1 %tobool, label %if.else, label %if.then, !dbg !34

if.then:                                          ; preds = %entry
  %c = getelementptr inbounds <{ %struct.NonTrivial, i32, i32, i32 }>, <{ %struct.NonTrivial, i32, i32, i32 }>* %0, i32 0, i32 3
  %2 = load i32, i32* %c, align 4, !dbg !35, !tbaa !30
  tail call void @g(i32 %2) #4, !dbg !37
  br label %if.end, !dbg !38

if.else:                                          ; preds = %entry
  %x = getelementptr inbounds <{ %struct.NonTrivial, i32, i32, i32 }>, <{ %struct.NonTrivial, i32, i32, i32 }>* %0, i32 0, i32 0, i32 0, !dbg !39
  %3 = load i32, i32* %x, align 4, !dbg !39, !tbaa !41
  tail call void @h(i32 %3) #4, !dbg !43
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  tail call x86_thiscallcc void @"\01??1NonTrivial@@QAE@XZ"(%struct.NonTrivial* nonnull %a) #4, !dbg !44
  ret void, !dbg !44
}

; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

declare void @g(i32) local_unnamed_addr

declare void @h(i32) local_unnamed_addr

; Function Attrs: nounwind
declare x86_thiscallcc void @"\01??1NonTrivial@@QAE@XZ"(%struct.NonTrivial*) unnamed_addr #3

attributes #0 = { nounwind }
attributes #1 = { nounwind readnone speculatable }
attributes #3 = { nounwind }
attributes #4 = { nounwind }

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4, !5}
!llvm.ident = !{!6}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "t.cpp", directory: "C:\5Csrc\5Cllvm-project\5Cbuild", checksumkind: CSK_MD5, checksum: "e41e3fda2a91b52e121ed6c29a209eae")
!2 = !{}
!3 = !{i32 1, !"NumRegisterParameters", i32 0}
!4 = !{i32 2, !"CodeView", i32 1}
!5 = !{i32 2, !"Debug Info Version", i32 3}
!6 = !{!"clang version 5.0.0 "}
!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 8, type: !8, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !19)
!8 = !DISubroutineType(types: !9)
!9 = !{null, !10, !13, !13, !13}
!10 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NonTrivial", file: !1, line: 1, size: 32, elements: !11, identifier: ".?AUNonTrivial@@")
!11 = !{!12, !14, !18}
!12 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !10, file: !1, line: 4, baseType: !13, size: 32)
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!14 = !DISubprogram(name: "NonTrivial", scope: !10, file: !1, line: 2, type: !15, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true)
!15 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !16)
!16 = !{null, !17}
!17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 32, flags: DIFlagArtificial | DIFlagObjectPointer)
!18 = !DISubprogram(name: "~NonTrivial", scope: !10, file: !1, line: 3, type: !15, isLocal: false, isDefinition: false, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true)
!19 = !{!20, !21, !22, !23}
!20 = !DILocalVariable(name: "c", arg: 4, scope: !7, file: !1, line: 8, type: !13)
!21 = !DILocalVariable(name: "unused", arg: 3, scope: !7, file: !1, line: 8, type: !13)
!22 = !DILocalVariable(name: "b", arg: 2, scope: !7, file: !1, line: 8, type: !13)
!23 = !DILocalVariable(name: "a", arg: 1, scope: !7, file: !1, line: 8, type: !10)
!24 = !DIExpression()
!25 = !DILocation(line: 8, column: 56, scope: !7)
!26 = !DILocation(line: 8, column: 37, scope: !7)
!27 = !DILocation(line: 8, column: 30, scope: !7)
!28 = !DILocation(line: 9, column: 7, scope: !29)
!29 = distinct !DILexicalBlock(scope: !7, file: !1, line: 9, column: 7)
!30 = !{!31, !31, i64 0}
!31 = !{!"int", !32, i64 0}
!32 = !{!"omnipotent char", !33, i64 0}
!33 = !{!"Simple C++ TBAA"}
!34 = !DILocation(line: 9, column: 7, scope: !7)
!35 = !DILocation(line: 10, column: 7, scope: !36)
!36 = distinct !DILexicalBlock(scope: !29, file: !1, line: 9, column: 10)
!37 = !DILocation(line: 10, column: 5, scope: !36)
!38 = !DILocation(line: 11, column: 3, scope: !36)
!39 = !DILocation(line: 12, column: 9, scope: !40)
!40 = distinct !DILexicalBlock(scope: !29, file: !1, line: 11, column: 10)
!41 = !{!42, !31, i64 0}
!42 = !{!"?AUNonTrivial@@", !31, i64 0}
!43 = !DILocation(line: 12, column: 5, scope: !40)
!44 = !DILocation(line: 15, column: 1, scope: !7)
