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