xref: /llvm-project/llvm/test/CodeGen/Generic/MIRDebugify/check-line-and-variables.mir (revision 1c6b0f779f66494cb597884c1a52e377bde4bc54)
1# REQUIRES: x86-registered-target
2# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-debugify,dead-mi-elimination,mir-check-debugify -o - %s 2>&1 | FileCheck %s
3# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-debugify,mir-check-debugify -o - %s 2>&1 | FileCheck %s --check-prefix=CHECK-PASS
4# RUN: llc --experimental-debuginfo-iterators=false -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-debugify,dead-mi-elimination,mir-check-debugify -o - %s 2>&1 | FileCheck %s
5# RUN: llc --experimental-debuginfo-iterators=false -mtriple=x86_64-unknown-linux-gnu -run-pass=mir-debugify,mir-check-debugify -o - %s 2>&1 | FileCheck %s --check-prefix=CHECK-PASS
6--- |
7  ; ModuleID = 'check-line-and-variables.mir'
8  source_filename = "check-line-and-variables.ll"
9
10  @ga = dso_local global i32 2, align 4
11
12  ; Function Attrs: noinline nounwind optnone uwtable
13  define dso_local i32 @foo(i32 %a, i32 %b) {
14  entry:
15    %a.addr = alloca i32, align 4
16    %b.addr = alloca i32, align 4
17    %c = alloca i32, align 4
18    store i32 %a, ptr %a.addr, align 4
19    store i32 %b, ptr %b.addr, align 4
20    %0 = load i32, ptr %a.addr, align 4
21    %1 = load i32, ptr %b.addr, align 4
22    %add = add nsw i32 %0, %1
23    store i32 %add, ptr %c, align 4
24    %2 = load i32, ptr %c, align 4
25    %mul = mul nsw i32 %2, 2
26    store i32 %mul, ptr @ga, align 4
27    %3 = load i32, ptr %c, align 4
28    ; dead-mi-elimination will remove %4 = ...
29    %4 = load i32, ptr %a.addr, align 4
30    ret i32 %3
31  }
32
33...
34---
35name:            foo
36alignment:       16
37stack:
38  - { id: 0, name: a.addr, type: default, offset: 0, size: 4, alignment: 4,
39      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
40      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
41  - { id: 1, name: b.addr, type: default, offset: 0, size: 4, alignment: 4,
42      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
43      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
44  - { id: 2, name: c, type: default, offset: 0, size: 4, alignment: 4,
45      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
46      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
47body:             |
48  bb.0.entry:
49    liveins: $edi, $esi
50
51    %2:gr32 = COPY $esi
52    %0:gr32 = COPY $edi
53    %1:gr32 = COPY killed %0
54    %3:gr32 = COPY killed %2
55    MOV32mr %stack.0.a.addr, 1, $noreg, 0, $noreg, %1 :: (store (s32) into %ir.a.addr)
56    MOV32mr %stack.1.b.addr, 1, $noreg, 0, $noreg, %3 :: (store (s32) into %ir.b.addr)
57    %14:gr32 = MOV32rm %stack.0.a.addr, 1, $noreg, 0, $noreg :: (load (s32) from %ir.a.addr)
58    %13:gr32 = ADD32rm killed %14, %stack.1.b.addr, 1, $noreg, 0, $noreg, implicit-def $eflags :: (load (s32) from %ir.b.addr)
59    ; dead-mi-elimination will remove %15:gr32 = ...
60    %15:gr32 = MOV32rm %stack.0.a.addr, 1, $noreg, 0, $noreg :: (load (s32) from %ir.a.addr)
61    MOV32mr %stack.2.c, 1, $noreg, 0, $noreg, killed %13 :: (store (s32) into %ir.c)
62    %9:gr32 = MOV32rm %stack.2.c, 1, $noreg, 0, $noreg :: (load (s32) from %ir.c)
63    %8:gr32 = SHL32ri killed %9, 1, implicit-def $eflags
64    MOV32mr $noreg, 1, $noreg, @ga, $noreg, killed %8 :: (store (s32) into @ga)
65    %5:gr32 = MOV32rm %stack.2.c, 1, $noreg, 0, $noreg :: (load (s32) from %ir.c)
66    $eax = COPY %5
67    RET64 implicit $eax
68
69    ;CHECK:      WARNING: Missing line 9
70    ;CHECK-NEXT: Machine IR debug info check: FAIL
71    ;CHECK-PASS: Machine IR debug info check: PASS
72...
73