Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 1 | ; RUN: opt %s -O2 -S -o - | FileCheck %s |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 2 | ; Verify that we emit the same intrinsic at most once. |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 3 | ; 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 Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 8 | ; CHECK: ret |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 9 | ; |
| 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' |
| 25 | target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" |
| 26 | target triple = "x86_64-apple-macosx10.9.0" |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 27 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 28 | %struct.i14 = type { i64 } |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 29 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 30 | ; Function Attrs: nounwind ssp uwtable |
| 31 | define void @init() #0 { |
| 32 | %p = alloca %struct.i14*, align 8 |
Adrian Prantl | b458dc2 | 2014-10-01 18:10:54 +0000 | [diff] [blame] | 33 | call void @llvm.dbg.declare(metadata !{%struct.i14** %p}, metadata !11), !dbg !18 |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 34 | 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 Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 43 | } |
| 44 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 45 | ; Function Attrs: nounwind readnone |
Adrian Prantl | b458dc2 | 2014-10-01 18:10:54 +0000 | [diff] [blame] | 46 | declare void @llvm.dbg.declare(metadata, metadata) #1 |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 47 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 48 | declare i32 @foo(%struct.i14**) |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 49 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 50 | attributes #0 = { nounwind ssp uwtable } |
| 51 | attributes #1 = { nounwind readnone } |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 52 | |
| 53 | !llvm.dbg.cu = !{!0} |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 54 | !llvm.module.flags = !{!8, !9} |
| 55 | !llvm.ident = !{!10} |
Adrian Prantl | 29b9de7 | 2013-04-26 17:48:33 +0000 | [diff] [blame] | 56 | |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 57 | !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 Ren | deeafd8 | 2013-09-06 21:03:58 +0000 | [diff] [blame] | 63 | !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 Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 64 | !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} |