--- | 
  ; RUN: llc -run-pass=machinelicm -o - %s | FileCheck %s
  ; Line numbers should not be retained when loop invariant instructions are hoisted.
  ; Doing so causes poor stepping bevavior.
  ;
  ; Created from:
  ; int x;
  ; void Process(const unsigned int *p)
  ; {
  ;    while (1)
  ;      x = *p++;
  ; }
  ;
  ; with clang -emit-llvm -S -O2 -g -o t.ll t.c
  ;      llc -relocation-model=pic -stop-after=machine-combine -O2 t.ll -o t.mir
  ;
  ; We check that when the machine loop invariant pass hoists instructions
  ; out of a loop the debug information is not retained.
  ;
  ; CHECK-LABEL:  bb.0.entry:
  ; CHECK:        MOV64rm $rip, 1, $noreg, target-flags(x86-gotpcrel) @x, $noreg :: (load 8 from got)
  ; CHECK-LABEL:  bb.1.while.body:
  ;
  ; ModuleID = 'tx.ll'
  source_filename = "t.c"
  target triple = "x86_64-unknown-linux-gnu"

  @x = common local_unnamed_addr global i32 0, align 4, !dbg !0

  ; Function Attrs: noreturn nounwind uwtable
  define void @Process(i32* nocapture readonly %p) local_unnamed_addr  !dbg !9 {
  entry:
    tail call void @llvm.dbg.value(metadata i32* %p, i64 0, metadata !16, metadata !17), !dbg !18
    br label %while.body, !dbg !19

  while.body:                                       ; preds = %while.body, %entry
    %p.addr.0 = phi i32* [ %p, %entry ], [ %incdec.ptr, %while.body ]
    tail call void @llvm.dbg.value(metadata i32* %p.addr.0, i64 0, metadata !16, metadata !17), !dbg !18
    %incdec.ptr = getelementptr inbounds i32, i32* %p.addr.0, i64 1, !dbg !20
    tail call void @llvm.dbg.value(metadata i32* %incdec.ptr, i64 0, metadata !16, metadata !17), !dbg !18
    %0 = load i32, i32* %p.addr.0, align 4, !dbg !21, !tbaa !22
    store i32 %0, i32* @x, align 4, !dbg !26, !tbaa !22
    br label %while.body, !dbg !27, !llvm.loop !29
  }

  ; Function Attrs: nounwind readnone
  declare void @llvm.dbg.value(metadata, i64, metadata, metadata)

  !llvm.dbg.cu = !{!1}
  !llvm.module.flags = !{!6, !7}
  !llvm.ident = !{!8}

  !0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true), expr: !DIExpression())
  !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
  !2 = !DIFile(filename: "t.c", directory: "/home/test")
  !3 = !{}
  !4 = !{!0}
  !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
  !6 = !{i32 2, !"Dwarf Version", i32 4}
  !7 = !{i32 2, !"Debug Info Version", i32 3}
  !8 = !{!"clang version 4.0.0 "}
  !9 = distinct !DISubprogram(name: "Process", scope: !2, file: !2, line: 2, type: !10, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !1, retainedNodes: !15)
  !10 = !DISubroutineType(types: !11)
  !11 = !{null, !12}
  !12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64)
  !13 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
  !14 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
  !15 = !{!16}
  !16 = !DILocalVariable(name: "p", arg: 1, scope: !9, file: !2, line: 2, type: !12)
  !17 = !DIExpression()
  !18 = !DILocation(line: 2, column: 34, scope: !9)
  !19 = !DILocation(line: 4, column: 3, scope: !9)
  !20 = !DILocation(line: 5, column: 11, scope: !9)
  !21 = !DILocation(line: 5, column: 9, scope: !9)
  !22 = !{!23, !23, i64 0}
  !23 = !{!"int", !24, i64 0}
  !24 = !{!"omnipotent char", !25, i64 0}
  !25 = !{!"C++"}
  !26 = !DILocation(line: 5, column: 7, scope: !9)
  !27 = !DILocation(line: 4, column: 3, scope: !28)
  !28 = !DILexicalBlockFile(scope: !9, file: !2, discriminator: 1)
  !29 = distinct !{!29, !19, !20}

...
---
name:            Process
tracksRegLiveness: true
registers:
  - { id: 0, class: gr64 }
  - { id: 1, class: gr64 }
  - { id: 2, class: gr64 }
  - { id: 3, class: gr32 }
  - { id: 4, class: gr64 }
body:             |
  bb.0.entry:
    successors: %bb.1.while.body(0x80000000)
    liveins: $rdi

    DBG_VALUE $rdi, _, !16, !17, debug-location !18
    %2 = COPY $rdi
    DBG_VALUE %2, _, !16, !17, debug-location !18

  bb.1.while.body:
    successors: %bb.1.while.body(0x80000000)

    %0 = PHI %2, %bb.0.entry, %1, %bb.1.while.body
    DBG_VALUE %0, _, !16, !17, debug-location !18
    %1 = ADD64ri8 %0, 4, implicit-def dead $eflags, debug-location !20
    DBG_VALUE %1, _, !16, !17, debug-location !18
    %3 = MOV32rm %0, 1, _, 0, _, debug-location !21 :: (load 4 from %ir.p.addr.0, !tbaa !22)
    %4 = MOV64rm $rip, 1, _, target-flags(x86-gotpcrel) @x, _, debug-location !26 :: (load 8 from got)
    MOV32mr killed %4, 1, _, 0, _, killed %3, debug-location !26 :: (store 4 into @x, !tbaa !22)
    JMP_1 %bb.1.while.body, debug-location !27

...
