Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / DebugInfo / MIR / InstrRef / x86-drop-compare-inst.mir
blob415b336fc4801068685e40f28a0cbb099d39096a
1 # RUN: llc %s -o - -experimental-debug-variable-locations -run-pass=peephole-opt | FileCheck %s
3 # X86 initially produces subtract operations to perform comparisons, and then
4 # downgrades them into cmp instructions if nothing uses the result. It does this
5 # by calling setDesc on the instruction, mutating it from one sort to another,
6 # which makes any debug instruction numbers attached to the number invalid.
7 # This test tests that the relevant instruction number is dropped.
9 # CHECK-NOT: debug-instr-number
10 # CHECK:     CMP32rm
11 # CHECK-NOT: debug-instr-number
13 --- |
14   ; ModuleID = '/fast/fs/build34llvm4/reduced.ll'
15   target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
16   target triple = "x86_64-unknown-linux-gnu"
17   
18   %"class.std::vector.534" = type { %"struct.std::_Vector_base.535" }
19   %"struct.std::_Vector_base.535" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
20   %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { i8*, i8*, i8* }
21   
22   ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
23   declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
24   
25   define hidden fastcc void @soup() unnamed_addr !dbg !3 {
26   _ZN4llvm11raw_ostreamlsEPKc.exit2752:
27     %0 = load %"class.std::vector.534"*, %"class.std::vector.534"** undef, align 8, !dbg !7
28     %1 = load i8*, i8** undef, align 8, !dbg !7
29     %_M_start.i2756 = getelementptr inbounds %"class.std::vector.534", %"class.std::vector.534"* %0, i64 undef, i32 0, i32 0, i32 0, !dbg !7
30     %2 = load i8*, i8** %_M_start.i2756, align 8, !dbg !7
31     %sub.ptr.lhs.cast.i2757 = ptrtoint i8* %1 to i64, !dbg !7
32     %sub.ptr.rhs.cast.i2758 = ptrtoint i8* %2 to i64, !dbg !7
33     %sub.ptr.sub.i2759 = sub i64 %sub.ptr.lhs.cast.i2757, %sub.ptr.rhs.cast.i2758, !dbg !7
34     %conv373 = trunc i64 %sub.ptr.sub.i2759 to i32, !dbg !7
35     call void @llvm.dbg.value(metadata i32 %conv373, metadata !8, metadata !DIExpression()), !dbg !7
36     %cmp375.not2842 = icmp eq i32 %conv373, 0, !dbg !7
37     br i1 %cmp375.not2842, label %for.cond.cleanup376, label %for.body377, !dbg !7
38   
39   for.cond.cleanup376:                              ; preds = %_ZN4llvm11raw_ostreamlsEPKc.exit2752
40     ret void
41   
42   for.body377:                                      ; preds = %_ZN4llvm11raw_ostreamlsEPKc.exit2752
43     ret void
44   }
45   
46   ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
47   declare void @llvm.dbg.value(metadata, metadata, metadata) #0
48   
49   attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
50   
51   !llvm.module.flags = !{!0}
52   !llvm.dbg.cu = !{!1}
53   
54   !0 = !{i32 2, !"Debug Info Version", i32 3}
55   !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "beards", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
56   !2 = !DIFile(filename: "bees.cpp", directory: "")
57   !3 = distinct !DISubprogram(name: "nope", scope: !2, file: !2, line: 1, type: !4, spFlags: DISPFlagDefinition, unit: !1)
58   !4 = !DISubroutineType(types: !5)
59   !5 = !{!6}
60   !6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
61   !7 = !DILocation(line: 1, scope: !3)
62   !8 = !DILocalVariable(name: "flannel", scope: !3)
64 ...
65 ---
66 name:            soup
67 alignment:       16
68 tracksRegLiveness: true
69 debugInstrRef: true
70 registers:
71   - { id: 0, class: gr64 }
72   - { id: 1, class: gr64 }
73   - { id: 2, class: gr32 }
74   - { id: 3, class: gr32 }
75 frameInfo:
76   maxAlignment:    1
77 machineFunctionInfo: {}
78 body:             |
79   bb.0._ZN4llvm11raw_ostreamlsEPKc.exit2752:
80     successors: %bb.1(0x30000000), %bb.2(0x50000000)
81   
82     %1:gr64 = IMPLICIT_DEF
83     %0:gr64 = MOV64rm killed %1, 1, $noreg, 0, $noreg, debug-location !7 :: (load (s64) from `i8** undef`)
84     %2:gr32 = COPY %0.sub_32bit, debug-location !7
85     %3:gr32 = SUB32rm %2, %0, 1, $noreg, 0, $noreg, implicit-def $eflags, debug-instr-number 1, debug-location !7 :: (load (s32) from %ir._M_start.i2756, align 8)
86     DBG_INSTR_REF !8, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(1, 0), debug-location !7\r
87     JCC_1 %bb.2, 5, implicit $eflags, debug-location !7
88     JMP_1 %bb.1, debug-location !7
89   
90   bb.1.for.cond.cleanup376:
91     RET 0
92   
93   bb.2.for.body377:
94     RET 0
96 ...