}
; CHECK-LABEL: @with_dbg
; CHECK-NEXT: entry:
-; CHECK: call void @__tsan_func_entry(ptr %0), !dbg [[DBG:![0-9]+]]
-; CHECK: call void @__tsan_read4(ptr %a), !dbg [[DBG]]
-; CHECK: call void @__tsan_func_exit(), !dbg [[DBG]]
+; CHECK: call void @__tsan_func_entry(ptr %0), !dbg [[DBG1:![0-9]+]]
+; CHECK: call void @__tsan_read4(ptr %a), !dbg [[DBG1]]
+; CHECK: call void @__tsan_func_exit(), !dbg [[DBG1]]
+
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1)
+
+define void @memintrinsic(ptr nocapture %x, ptr nocapture %y) sanitize_thread !dbg !7 {
+entry:
+ tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %x, ptr align 4 %y, i64 16, i1 false)
+ ret void
+}
+; CHECK-LABEL: @memintrinsic
+; CHECK-NEXT: entry:
+; CHECK: call void @__tsan_func_entry(ptr %0), !dbg [[DBG2:![0-9]+]]
+; CHECK: call ptr @__tsan_memcpy(ptr %x, ptr %y, i64 16), !dbg [[DBG2]]
+; CHECK: call void @__tsan_func_exit(), !dbg [[DBG2]]
define i32 @without_dbg(ptr %a) sanitize_thread {
entry:
!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 190, type: !4, scopeLine: 192, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0)
!4 = !DISubroutineType(types: !5)
!5 = !{}
+!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 195, type: !4, scopeLine: 199, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0)
-; CHECK: [[DBG]] = !DILocation(line: 0, scope: !3)
+; CHECK: [[DBG1]] = !DILocation(line: 0, scope: !3)
+; CHECK: [[DBG2]] = !DILocation(line: 0, scope: !7)