```
$ cat /tmp/a.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"

define i32 @main(i1 %0) {
entry:
  br i1 %0, label %1, label %2

1:                                                ; preds = %entry
  store i64 1, ptr null, align 1
  br label %3, !dbg !3

2:                                                ; preds = %entry
  store i64 0, ptr null, align 1
  br label %3

3:                                                ; preds = %2, %1
  ret i32 0
}

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!2}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
!1 = !DIFile(filename: "foo.c", directory: "/tmp", checksumkind: CSK_MD5, checksum: "2d07c91bb9d9c2fa4eee31a1aeed20e3")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocation(line: 17, column: 3, scope: !4)
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 6, type: !5, scopeLine: 6, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
!5 = !DISubroutineType(types: !6)
!6 = !{}

$ build/rel/bin/llc -o /tmp/b.s /tmp/a.ll -enable-tail-merge=1 -stop-after=branch-folder 
$ build/rel/bin/llc -o /tmp/a.s /tmp/a.ll -enable-tail-merge=0 -stop-after=branch-folder 
$ diff /tmp/a.s /tmp/b.s
98c98
<     JMP_1 %bb.8, debug-location !21
---
>     JMP_1 %bb.8
```

reduced from a ubsan backtrace missing line info
[DebugInfo] branch-folder drops debug info in tail merging even if tail merging doesn't change IR
This is a GitHub Issue
repo:llvm-project
owner:llvm
Title : [DebugInfo] branch-folder drops debug info in tail merging even if tail merging doesn't change IR
Issue date:

--- start body ---
```
$ cat /tmp/a.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"

define i32 @main(i1 %0) {
entry:
  br i1 %0, label %1, label %2

1:                                                ; preds = %entry
  store i64 1, ptr null, align 1
  br label %3, !dbg !3

2:                                                ; preds = %entry
  store i64 0, ptr null, align 1
  br label %3

3:                                                ; preds = %2, %1
  ret i32 0
}

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!2}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
!1 = !DIFile(filename: "foo.c", directory: "/tmp", checksumkind: CSK_MD5, checksum: "2d07c91bb9d9c2fa4eee31a1aeed20e3")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocation(line: 17, column: 3, scope: !4)
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 6, type: !5, scopeLine: 6, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
!5 = !DISubroutineType(types: !6)
!6 = !{}

$ build/rel/bin/llc -o /tmp/b.s /tmp/a.ll -enable-tail-merge=1 -stop-after=branch-folder 
$ build/rel/bin/llc -o /tmp/a.s /tmp/a.ll -enable-tail-merge=0 -stop-after=branch-folder 
$ diff /tmp/a.s /tmp/b.s
98c98
<     JMP_1 %bb.8, debug-location !21
---
>     JMP_1 %bb.8
```

reduced from a ubsan backtrace missing line info
--- end body ---

The issue describes a problem in the LLVM project where debug information is lost during the tail merging optimization process, even when the intermediate representation (IR) remains unchanged. This could lead to difficulties in debugging, as the debug information is crucial for understanding the context of the code execution. The specific case shows that the debug location is omitted in the generated assembly when tail merging is enabled, which could hinder developers from tracing back to the original source code accurately.