blob: 12fd9d576bdd9f45558516bef714641bb7c62e91 [file] [log] [blame]
Adrian Prantl32da8892014-04-25 20:49:25 +00001; RUN: opt %s -O2 -S -o - | FileCheck %s
Adrian Prantl29b9de72013-04-26 17:48:33 +00002; Verify that we emit the same intrinsic at most once.
Adrian Prantl32da8892014-04-25 20:49:25 +00003; rdar://problem/13056109
4;
5; CHECK: call void @llvm.dbg.value(metadata !{%struct.i14** %p}
6; CHECK-NOT: call void @llvm.dbg.value(metadata !{%struct.i14** %p}
7; CHECK-NEXT: call i32 @foo
Adrian Prantl29b9de72013-04-26 17:48:33 +00008; CHECK: ret
Adrian Prantl32da8892014-04-25 20:49:25 +00009;
10;
11; typedef struct {
12; long i;
13; } i14;
14;
15; int foo(i14**);
16;
17; void init() {
18; i14* p = 0;
19; foo(&p);
20; p->i |= 4;
21; foo(&p);
22; }
23;
24; ModuleID = 'instcombine_intrinsics.c'
25target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
26target triple = "x86_64-apple-macosx10.9.0"
Adrian Prantl29b9de72013-04-26 17:48:33 +000027
Adrian Prantl32da8892014-04-25 20:49:25 +000028%struct.i14 = type { i64 }
Adrian Prantl29b9de72013-04-26 17:48:33 +000029
Adrian Prantl32da8892014-04-25 20:49:25 +000030; Function Attrs: nounwind ssp uwtable
31define void @init() #0 {
32 %p = alloca %struct.i14*, align 8
Adrian Prantl87b7eb92014-10-01 18:55:02 +000033 call void @llvm.dbg.declare(metadata !{%struct.i14** %p}, metadata !11, metadata !{i32 786690}), !dbg !18
Adrian Prantl32da8892014-04-25 20:49:25 +000034 store %struct.i14* null, %struct.i14** %p, align 8, !dbg !18
35 %1 = call i32 @foo(%struct.i14** %p), !dbg !19
36 %2 = load %struct.i14** %p, align 8, !dbg !20
37 %3 = getelementptr inbounds %struct.i14* %2, i32 0, i32 0, !dbg !20
38 %4 = load i64* %3, align 8, !dbg !20
39 %5 = or i64 %4, 4, !dbg !20
40 store i64 %5, i64* %3, align 8, !dbg !20
41 %6 = call i32 @foo(%struct.i14** %p), !dbg !21
42 ret void, !dbg !22
Adrian Prantl29b9de72013-04-26 17:48:33 +000043}
44
Adrian Prantl32da8892014-04-25 20:49:25 +000045; Function Attrs: nounwind readnone
Adrian Prantl87b7eb92014-10-01 18:55:02 +000046declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
Adrian Prantl29b9de72013-04-26 17:48:33 +000047
Adrian Prantl32da8892014-04-25 20:49:25 +000048declare i32 @foo(%struct.i14**)
Adrian Prantl29b9de72013-04-26 17:48:33 +000049
Adrian Prantl32da8892014-04-25 20:49:25 +000050attributes #0 = { nounwind ssp uwtable }
51attributes #1 = { nounwind readnone }
Adrian Prantl29b9de72013-04-26 17:48:33 +000052
53!llvm.dbg.cu = !{!0}
Adrian Prantl32da8892014-04-25 20:49:25 +000054!llvm.module.flags = !{!8, !9}
55!llvm.ident = !{!10}
Adrian Prantl29b9de72013-04-26 17:48:33 +000056
Adrian Prantl32da8892014-04-25 20:49:25 +000057!0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5.0 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [instcombine_intrinsics.c] [DW_LANG_C99]
58!1 = metadata !{metadata !"instcombine_intrinsics.c", metadata !""}
59!2 = metadata !{}
60!3 = metadata !{metadata !4}
61!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"init", metadata !"init", metadata !"", i32 7, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 0, i1 false, void ()* @init, null, null, metadata !2, i32 7} ; [ DW_TAG_subprogram ] [line 7] [def] [init]
62!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [instcombine_intrinsics.c]
Manman Rendeeafd82013-09-06 21:03:58 +000063!6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
Adrian Prantl32da8892014-04-25 20:49:25 +000064!7 = metadata !{null}
65!8 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
66!9 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
67!10 = metadata !{metadata !"clang version 3.5.0 "}
68!11 = metadata !{i32 786688, metadata !4, metadata !"p", metadata !5, i32 8, metadata !12, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [p] [line 8]
69!12 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !13} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from i14]
70!13 = metadata !{i32 786454, metadata !1, null, metadata !"i14", i32 3, i64 0, i64 0, i64 0, i32 0, metadata !14} ; [ DW_TAG_typedef ] [i14] [line 3, size 0, align 0, offset 0] [from ]
71!14 = metadata !{i32 786451, metadata !1, null, metadata !"", i32 1, i64 64, i64 64, i32 0, i32 0, null, metadata !15, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [line 1, size 64, align 64, offset 0] [def] [from ]
72!15 = metadata !{metadata !16}
73!16 = metadata !{i32 786445, metadata !1, metadata !14, metadata !"i", i32 2, i64 64, i64 64, i64 0, i32 0, metadata !17} ; [ DW_TAG_member ] [i] [line 2, size 64, align 64, offset 0] [from long int]
74!17 = metadata !{i32 786468, null, null, metadata !"long int", i32 0, i64 64, i64 64, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [long int] [line 0, size 64, align 64, offset 0, enc DW_ATE_signed]
75!18 = metadata !{i32 8, i32 0, metadata !4, null} ; [ DW_TAG_imported_declaration ]
76!19 = metadata !{i32 9, i32 0, metadata !4, null}
77!20 = metadata !{i32 10, i32 0, metadata !4, null}
78!21 = metadata !{i32 11, i32 0, metadata !4, null}
79!22 = metadata !{i32 12, i32 0, metadata !4, null}