xref: /llvm-project/llvm/test/CodeGen/Generic/MIRDebugify/check-line-and-variables-x.mir (revision 1c6b0f779f66494cb597884c1a52e377bde4bc54)
139584ae5SXiang1 Zhang# REQUIRES: x86-registered-target
239584ae5SXiang1 Zhang# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-check-debugify -o - %s 2>&1 | FileCheck %s
3*1c6b0f77SStephen Tozer# RUN: llc --experimental-debuginfo-iterators=false -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-check-debugify -o - %s 2>&1 | FileCheck %s
439584ae5SXiang1 Zhang--- |
539584ae5SXiang1 Zhang  ; ModuleID = 'check-line-and-variables.mir'
639584ae5SXiang1 Zhang  source_filename = "check-line-and-variables.c"
739584ae5SXiang1 Zhang
839584ae5SXiang1 Zhang  @ga = dso_local local_unnamed_addr global i32 2, align 4
939584ae5SXiang1 Zhang
1039584ae5SXiang1 Zhang  ; Function Attrs: nofree norecurse nounwind uwtable writeonly
1139584ae5SXiang1 Zhang  define dso_local i32 @foo(i32 %a, i32 %b) local_unnamed_addr #0 !dbg !9 {
1239584ae5SXiang1 Zhang  entry:
1339584ae5SXiang1 Zhang    %add = add nsw i32 %b, %a, !dbg !15
1439584ae5SXiang1 Zhang    call void @llvm.dbg.value(metadata i32 %add, metadata !12, metadata !DIExpression()), !dbg !15
1539584ae5SXiang1 Zhang    %mul = shl nsw i32 %add, 1, !dbg !16
1639584ae5SXiang1 Zhang    call void @llvm.dbg.value(metadata i32 %mul, metadata !14, metadata !DIExpression()), !dbg !16
17ff9af4c4SNikita Popov    store i32 %mul, ptr @ga, align 4, !dbg !17
1839584ae5SXiang1 Zhang    ret i32 %add, !dbg !18
1939584ae5SXiang1 Zhang  }
2039584ae5SXiang1 Zhang
2139584ae5SXiang1 Zhang  declare void @llvm.dbg.value(metadata, metadata, metadata) #1
2239584ae5SXiang1 Zhang
2339584ae5SXiang1 Zhang  !llvm.module.flags = !{!0, !1}
2439584ae5SXiang1 Zhang  !llvm.ident = !{!2}
2539584ae5SXiang1 Zhang  !llvm.dbg.cu = !{!3}
2639584ae5SXiang1 Zhang  !llvm.mir.debugify = !{!6, !7}
2739584ae5SXiang1 Zhang  !llvm.debugify = !{!8, !7}
2839584ae5SXiang1 Zhang
2939584ae5SXiang1 Zhang  !0 = !{i32 1, !"wchar_size", i32 4}
3039584ae5SXiang1 Zhang  !1 = !{i32 2, !"Debug Info Version", i32 3}
3139584ae5SXiang1 Zhang  !2 = !{!"clang version 12.0.0 (https://github.com/llvm/llvm-project.git c0a922b3db2d39f36c0c01776cce90cc160a7d62)"}
3239584ae5SXiang1 Zhang  !3 = distinct !DICompileUnit(language: DW_LANG_C, file: !4, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !5)
3339584ae5SXiang1 Zhang  !4 = !DIFile(filename: "main.mir", directory: "/")
3439584ae5SXiang1 Zhang  !5 = !{}
3539584ae5SXiang1 Zhang  !6 = !{i32 6}
3639584ae5SXiang1 Zhang  !7 = !{i32 2}
3739584ae5SXiang1 Zhang  !8 = !{i32 4}
3839584ae5SXiang1 Zhang  !9 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: null, file: !4, line: 1, type: !10, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !3, retainedNodes: !11)
3939584ae5SXiang1 Zhang  !10 = !DISubroutineType(types: !5)
4039584ae5SXiang1 Zhang  !11 = !{!12, !14}
4139584ae5SXiang1 Zhang  !12 = !DILocalVariable(name: "1", scope: !9, file: !4, line: 1, type: !13)
4239584ae5SXiang1 Zhang  !13 = !DIBasicType(name: "ty32", size: 32, encoding: DW_ATE_unsigned)
4339584ae5SXiang1 Zhang  !14 = !DILocalVariable(name: "2", scope: !9, file: !4, line: 2, type: !13)
4439584ae5SXiang1 Zhang  !15 = !DILocation(line: 1, column: 1, scope: !9)
4539584ae5SXiang1 Zhang  !16 = !DILocation(line: 2, column: 1, scope: !9)
4639584ae5SXiang1 Zhang  !17 = !DILocation(line: 3, column: 1, scope: !9)
4739584ae5SXiang1 Zhang  !18 = !DILocation(line: 4, column: 1, scope: !9)
4839584ae5SXiang1 Zhang
4939584ae5SXiang1 Zhang...
5039584ae5SXiang1 Zhang---
5139584ae5SXiang1 Zhangname:            foo
5239584ae5SXiang1 Zhangbody:             |
5339584ae5SXiang1 Zhang  bb.0.entry:
5439584ae5SXiang1 Zhang    liveins: $edi, $esi
5539584ae5SXiang1 Zhang
5639584ae5SXiang1 Zhang    %1:gr32 = COPY $esi, debug-location !15
5739584ae5SXiang1 Zhang    DBG_VALUE %1, $noreg, !12, !DIExpression(), debug-location !15
5839584ae5SXiang1 Zhang    ; Let it missing !14 and debug-location !16
5939584ae5SXiang1 Zhang    ; %0:gr32 = COPY $edi, debug-location !16
6039584ae5SXiang1 Zhang    ; DBG_VALUE %0, $noreg, !14, !DIExpression(), debug-location !16
6139584ae5SXiang1 Zhang    %0:gr32 = COPY $edi
6239584ae5SXiang1 Zhang    %2:gr32 = nsw ADD32rr %1, %0, implicit-def dead $eflags, debug-location !17
6339584ae5SXiang1 Zhang    DBG_VALUE %2, $noreg, !12, !DIExpression(), debug-location !17
6439584ae5SXiang1 Zhang    DBG_VALUE $eflags, $noreg, !12, !DIExpression(), debug-location !17
6539584ae5SXiang1 Zhang    %3:gr32 = nsw ADD32rr %2, %2, implicit-def dead $eflags, debug-location !18
6639584ae5SXiang1 Zhang    DBG_VALUE %3, $noreg, !12, !DIExpression(), debug-location !18
6739584ae5SXiang1 Zhang    DBG_VALUE $eflags, $noreg, !12, !DIExpression(), debug-location !18
68fae05692SMatt Arsenault    MOV32mr $rip, 1, $noreg, @ga, $noreg, killed %3, debug-location !DILocation(line: 5, column: 1, scope: !9) :: (store (s32) into @ga, !tbaa !18)
6939584ae5SXiang1 Zhang    DBG_VALUE 0, $noreg, !12, !DIExpression(), debug-location !DILocation(line: 5, column: 1, scope: !9)
7039584ae5SXiang1 Zhang    ; Let it miss Line 6: Change "!DILocation(line: 6, ..." to "!DILocation(line: 5, ..."
7139584ae5SXiang1 Zhang    $eax = COPY %2, debug-location !DILocation(line: 5, column: 1, scope: !9)
7239584ae5SXiang1 Zhang    DBG_VALUE $eax, $noreg, !12, !DIExpression(), debug-location !DILocation(line: 6, column: 1, scope: !9)
7339584ae5SXiang1 Zhang    RET 0, $eax, debug-location !DILocation(line: 7, column: 1, scope: !9)
7439584ae5SXiang1 Zhang
7539584ae5SXiang1 Zhang    ;CHECK:      WARNING: Instruction with empty DebugLoc in function foo --%1:gr32 = COPY $edi
7639584ae5SXiang1 Zhang    ;CHECK-NEXT: WARNING: Missing line 2
7739584ae5SXiang1 Zhang    ;CHECK-NEXT: WARNING: Missing line 6
7839584ae5SXiang1 Zhang    ;CHECK-NEXT: WARNING: Missing variable 2
7939584ae5SXiang1 Zhang    ;CHECK-NEXT: Machine IR debug info check: FAIL
8039584ae5SXiang1 Zhang
8139584ae5SXiang1 Zhang...
82