1*232897feSAdrian Prantl; ModuleID = 'array.c'
2*232897feSAdrian Prantl;
3*232897feSAdrian Prantl; From (clang -g -c -O0):
4*232897feSAdrian Prantl;
5*232897feSAdrian Prantl; void f(int* p) {
6*232897feSAdrian Prantl;   p[0] = 42;
7*232897feSAdrian Prantl; }
8*232897feSAdrian Prantl;
9*232897feSAdrian Prantl; int main(int argc, char** argv) {
10*232897feSAdrian Prantl;   int array[4] = { 0, 1, 2, 3 };
11*232897feSAdrian Prantl;   f(array);
12*232897feSAdrian Prantl;   return array[0];
13*232897feSAdrian Prantl; }
14*232897feSAdrian Prantl;
15*232897feSAdrian Prantl; RUN: opt %s -O2 -S -o - | FileCheck %s
16*232897feSAdrian Prantl; Test that we do not lower dbg.declares for arrays.
17*232897feSAdrian Prantl;
18*232897feSAdrian Prantl; CHECK: define i32 @main
19*232897feSAdrian Prantl; CHECK: call void @llvm.dbg.value
20*232897feSAdrian Prantl; CHECK: call void @llvm.dbg.value
21*232897feSAdrian Prantl; CHECK: call void @llvm.dbg.declare
22*232897feSAdrian Prantltarget datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
23*232897feSAdrian Prantltarget triple = "x86_64-apple-macosx10.9.0"
24*232897feSAdrian Prantl
25*232897feSAdrian Prantl@main.array = private unnamed_addr constant [4 x i32] [i32 0, i32 1, i32 2, i32 3], align 16
26*232897feSAdrian Prantl
27*232897feSAdrian Prantl; Function Attrs: nounwind ssp uwtable
28*232897feSAdrian Prantldefine void @f(i32* %p) #0 {
29*232897feSAdrian Prantlentry:
30*232897feSAdrian Prantl  %p.addr = alloca i32*, align 8
31*232897feSAdrian Prantl  store i32* %p, i32** %p.addr, align 8
32*232897feSAdrian Prantl  call void @llvm.dbg.declare(metadata !{i32** %p.addr}, metadata !19), !dbg !20
33*232897feSAdrian Prantl  %0 = load i32** %p.addr, align 8, !dbg !21
34*232897feSAdrian Prantl  %arrayidx = getelementptr inbounds i32* %0, i64 0, !dbg !21
35*232897feSAdrian Prantl  store i32 42, i32* %arrayidx, align 4, !dbg !21
36*232897feSAdrian Prantl  ret void, !dbg !22
37*232897feSAdrian Prantl}
38*232897feSAdrian Prantl
39*232897feSAdrian Prantl; Function Attrs: nounwind readnone
40*232897feSAdrian Prantldeclare void @llvm.dbg.declare(metadata, metadata) #1
41*232897feSAdrian Prantl
42*232897feSAdrian Prantl; Function Attrs: nounwind ssp uwtable
43*232897feSAdrian Prantldefine i32 @main(i32 %argc, i8** %argv) #0 {
44*232897feSAdrian Prantlentry:
45*232897feSAdrian Prantl  %retval = alloca i32, align 4
46*232897feSAdrian Prantl  %argc.addr = alloca i32, align 4
47*232897feSAdrian Prantl  %argv.addr = alloca i8**, align 8
48*232897feSAdrian Prantl  %array = alloca [4 x i32], align 16
49*232897feSAdrian Prantl  store i32 0, i32* %retval
50*232897feSAdrian Prantl  store i32 %argc, i32* %argc.addr, align 4
51*232897feSAdrian Prantl  call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !23), !dbg !24
52*232897feSAdrian Prantl  store i8** %argv, i8*** %argv.addr, align 8
53*232897feSAdrian Prantl  call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !25), !dbg !24
54*232897feSAdrian Prantl  call void @llvm.dbg.declare(metadata !{[4 x i32]* %array}, metadata !26), !dbg !30
55*232897feSAdrian Prantl  %0 = bitcast [4 x i32]* %array to i8*, !dbg !30
56*232897feSAdrian Prantl  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast ([4 x i32]* @main.array to i8*), i64 16, i32 16, i1 false), !dbg !30
57*232897feSAdrian Prantl  %arraydecay = getelementptr inbounds [4 x i32]* %array, i32 0, i32 0, !dbg !31
58*232897feSAdrian Prantl  call void @f(i32* %arraydecay), !dbg !31
59*232897feSAdrian Prantl  %arrayidx = getelementptr inbounds [4 x i32]* %array, i32 0, i64 0, !dbg !32
60*232897feSAdrian Prantl  %1 = load i32* %arrayidx, align 4, !dbg !32
61*232897feSAdrian Prantl  ret i32 %1, !dbg !32
62*232897feSAdrian Prantl}
63*232897feSAdrian Prantl
64*232897feSAdrian Prantl; Function Attrs: nounwind
65*232897feSAdrian Prantldeclare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
66*232897feSAdrian Prantl
67*232897feSAdrian Prantlattributes #0 = { nounwind ssp uwtable }
68*232897feSAdrian Prantlattributes #1 = { nounwind readnone }
69*232897feSAdrian Prantlattributes #2 = { nounwind }
70*232897feSAdrian Prantl
71*232897feSAdrian Prantl!llvm.dbg.cu = !{!0}
72*232897feSAdrian Prantl!llvm.module.flags = !{!16, !17}
73*232897feSAdrian Prantl!llvm.ident = !{!18}
74*232897feSAdrian Prantl
75*232897feSAdrian Prantl!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 ] [array.c] [DW_LANG_C99]
76*232897feSAdrian Prantl!1 = metadata !{metadata !"array.c", metadata !""}
77*232897feSAdrian Prantl!2 = metadata !{}
78*232897feSAdrian Prantl!3 = metadata !{metadata !4, metadata !10}
79*232897feSAdrian Prantl!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f", metadata !"f", metadata !"", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i32*)* @f, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [f]
80*232897feSAdrian Prantl!5 = metadata !{i32 786473, metadata !1}          ; [ DW_TAG_file_type ] [array.c]
81*232897feSAdrian Prantl!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 ]
82*232897feSAdrian Prantl!7 = metadata !{null, metadata !8}
83*232897feSAdrian Prantl!8 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !9} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int]
84*232897feSAdrian Prantl!9 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
85*232897feSAdrian Prantl!10 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"main", metadata !"main", metadata !"", i32 5, metadata !11, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32, i8**)* @main, null, null, metadata !2, i32 5} ; [ DW_TAG_subprogram ] [line 5] [def] [main]
86*232897feSAdrian Prantl!11 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !12, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
87*232897feSAdrian Prantl!12 = metadata !{metadata !9, metadata !9, metadata !13}
88*232897feSAdrian Prantl!13 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !14} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ]
89*232897feSAdrian Prantl!14 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !15} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from char]
90*232897feSAdrian Prantl!15 = metadata !{i32 786468, null, null, metadata !"char", i32 0, i64 8, i64 8, i64 0, i32 0, i32 6} ; [ DW_TAG_base_type ] [char] [line 0, size 8, align 8, offset 0, enc DW_ATE_signed_char]
91*232897feSAdrian Prantl!16 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
92*232897feSAdrian Prantl!17 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
93*232897feSAdrian Prantl!18 = metadata !{metadata !"clang version 3.5.0 "}
94*232897feSAdrian Prantl!19 = metadata !{i32 786689, metadata !4, metadata !"p", metadata !5, i32 16777217, metadata !8, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [p] [line 1]
95*232897feSAdrian Prantl!20 = metadata !{i32 1, i32 0, metadata !4, null}
96*232897feSAdrian Prantl!21 = metadata !{i32 2, i32 0, metadata !4, null}
97*232897feSAdrian Prantl!22 = metadata !{i32 3, i32 0, metadata !4, null}
98*232897feSAdrian Prantl!23 = metadata !{i32 786689, metadata !10, metadata !"argc", metadata !5, i32 16777221, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [argc] [line 5]
99*232897feSAdrian Prantl!24 = metadata !{i32 5, i32 0, metadata !10, null}
100*232897feSAdrian Prantl!25 = metadata !{i32 786689, metadata !10, metadata !"argv", metadata !5, i32 33554437, metadata !13, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [argv] [line 5]
101*232897feSAdrian Prantl!26 = metadata !{i32 786688, metadata !10, metadata !"array", metadata !5, i32 6, metadata !27, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [array] [line 6]
102*232897feSAdrian Prantl!27 = metadata !{i32 786433, null, null, metadata !"", i32 0, i64 128, i64 32, i32 0, i32 0, metadata !9, metadata !28, i32 0, null, null, null} ; [ DW_TAG_array_type ] [line 0, size 128, align 32, offset 0] [from int]
103*232897feSAdrian Prantl!28 = metadata !{metadata !29}
104*232897feSAdrian Prantl!29 = metadata !{i32 786465, i64 0, i64 4}        ; [ DW_TAG_subrange_type ] [0, 3]
105*232897feSAdrian Prantl!30 = metadata !{i32 6, i32 0, metadata !10, null}
106*232897feSAdrian Prantl!31 = metadata !{i32 7, i32 0, metadata !10, null}
107*232897feSAdrian Prantl!32 = metadata !{i32 8, i32 0, metadata !10, null} ; [ DW_TAG_imported_declaration ]
108