blob: 0378c7514d846723786581d390e2810b73d214e1 [file] [log] [blame]
Adrian Prantl8e10fdb2013-11-18 23:04:38 +00001; RUN: opt -instcombine %s -S | FileCheck %s
2;
3; Generate me from:
4; clang -cc1 -triple thumbv7-apple-ios7.0.0 -S -target-abi apcs-gnu -gdwarf-2 -Os test.c -o test.ll -emit-llvm
5; void run(float r)
6; {
7; int count = r;
8; float vla[count];
9; vla[0] = r;
10; for (int i = 0; i < count; i++)
11; vla[i] /= r;
12; }
13; rdar://problem/15464571
14;
15; ModuleID = 'test.c'
16target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
17target triple = "thumbv7-apple-ios8.0.0"
18
19; Function Attrs: nounwind optsize readnone
20define void @run(float %r) #0 {
21entry:
Adrian Prantlb458dc22014-10-01 18:10:54 +000022 tail call void @llvm.dbg.declare(metadata !{float %r}, metadata !11), !dbg !22
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000023 %conv = fptosi float %r to i32, !dbg !23
Adrian Prantlb458dc22014-10-01 18:10:54 +000024 tail call void @llvm.dbg.declare(metadata !{i32 %conv}, metadata !12), !dbg !23
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000025 %vla = alloca float, i32 %conv, align 4, !dbg !24
Adrian Prantlb458dc22014-10-01 18:10:54 +000026 tail call void @llvm.dbg.declare(metadata !{float* %vla}, metadata !14), !dbg !24
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000027; The VLA alloca should be described by a dbg.declare:
Adrian Prantlb458dc22014-10-01 18:10:54 +000028; CHECK: call void @llvm.dbg.declare(metadata !{float* %vla}, metadata ![[VLA:.*]])
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000029; The VLA alloca and following store into the array should not be lowered to like this:
30; CHECK-NOT: call void @llvm.dbg.value(metadata !{float %r}, i64 0, metadata ![[VLA]])
31; the backend interprets this as "vla has the location of %r".
32 store float %r, float* %vla, align 4, !dbg !25, !tbaa !26
Adrian Prantlb458dc22014-10-01 18:10:54 +000033 tail call void @llvm.dbg.value(metadata !2, i64 0, metadata !18), !dbg !30
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000034 %cmp8 = icmp sgt i32 %conv, 0, !dbg !30
35 br i1 %cmp8, label %for.body, label %for.end, !dbg !30
36
37for.body: ; preds = %entry, %for.body.for.body_crit_edge
38 %0 = phi float [ %.pre, %for.body.for.body_crit_edge ], [ %r, %entry ]
39 %i.09 = phi i32 [ %inc, %for.body.for.body_crit_edge ], [ 0, %entry ]
40 %arrayidx2 = getelementptr inbounds float* %vla, i32 %i.09, !dbg !31
41 %div = fdiv float %0, %r, !dbg !31
42 store float %div, float* %arrayidx2, align 4, !dbg !31, !tbaa !26
43 %inc = add nsw i32 %i.09, 1, !dbg !30
Adrian Prantlb458dc22014-10-01 18:10:54 +000044 tail call void @llvm.dbg.value(metadata !{i32 %inc}, i64 0, metadata !18), !dbg !30
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000045 %exitcond = icmp eq i32 %inc, %conv, !dbg !30
46 br i1 %exitcond, label %for.end, label %for.body.for.body_crit_edge, !dbg !30
47
48for.body.for.body_crit_edge: ; preds = %for.body
49 %arrayidx2.phi.trans.insert = getelementptr inbounds float* %vla, i32 %inc
50 %.pre = load float* %arrayidx2.phi.trans.insert, align 4, !dbg !31, !tbaa !26
51 br label %for.body, !dbg !30
52
53for.end: ; preds = %for.body, %entry
54 ret void, !dbg !32
55}
56
57; Function Attrs: nounwind readnone
Adrian Prantlb458dc22014-10-01 18:10:54 +000058declare void @llvm.dbg.declare(metadata, metadata) #1
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000059
60; Function Attrs: nounwind readnone
Adrian Prantlb458dc22014-10-01 18:10:54 +000061declare void @llvm.dbg.value(metadata, i64, metadata) #1
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000062
63attributes #0 = { nounwind optsize readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
64attributes #1 = { nounwind readnone }
65
66!llvm.dbg.cu = !{!0}
Manman Ren409558f2013-11-22 21:49:45 +000067!llvm.module.flags = !{!20, !33}
Adrian Prantl8e10fdb2013-11-18 23:04:38 +000068!llvm.ident = !{!21}
69
70!0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.4 ", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [/Volumes/Data/radar/15464571/<unknown>] [DW_LANG_C99]
71!1 = metadata !{metadata !"<unknown>", metadata !"/Volumes/Data/radar/15464571"}
72!2 = metadata !{i32 0}
73!3 = metadata !{metadata !4}
74!4 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"run", metadata !"run", metadata !"", i32 1, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, void (float)* @run, null, null, metadata !10, i32 2} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 2] [run]
75!5 = metadata !{metadata !"test.c", metadata !"/Volumes/Data/radar/15464571"}
76!6 = metadata !{i32 786473, metadata !5} ; [ DW_TAG_file_type ] [/Volumes/Data/radar/15464571/test.c]
77!7 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
78!8 = metadata !{null, metadata !9}
79!9 = metadata !{i32 786468, null, null, metadata !"float", i32 0, i64 32, i64 32, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ] [float] [line 0, size 32, align 32, offset 0, enc DW_ATE_float]
80!10 = metadata !{metadata !11, metadata !12, metadata !14, metadata !18}
81!11 = metadata !{i32 786689, metadata !4, metadata !"r", metadata !6, i32 16777217, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [r] [line 1]
82!12 = metadata !{i32 786688, metadata !4, metadata !"count", metadata !6, i32 3, metadata !13, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [count] [line 3]
83!13 = 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]
84!14 = metadata !{i32 786688, metadata !4, metadata !"vla", metadata !6, i32 4, metadata !15, i32 8192, i32 0} ; [ DW_TAG_auto_variable ] [vla] [line 4]
85!15 = metadata !{i32 786433, null, null, metadata !"", i32 0, i64 0, i64 32, i32 0, i32 0, metadata !9, metadata !16, i32 0, null, null, null} ; [ DW_TAG_array_type ] [line 0, size 0, align 32, offset 0] [from float]
86!16 = metadata !{metadata !17}
87!17 = metadata !{i32 786465, i64 0, i64 -1} ; [ DW_TAG_subrange_type ] [unbounded]
88!18 = metadata !{i32 786688, metadata !19, metadata !"i", metadata !6, i32 6, metadata !13, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [i] [line 6]
89!19 = metadata !{i32 786443, metadata !5, metadata !4, i32 6, i32 0, i32 0} ; [ DW_TAG_lexical_block ] [/Volumes/Data/radar/15464571/test.c]
90!20 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
91!21 = metadata !{metadata !"clang version 3.4 "}
92!22 = metadata !{i32 1, i32 0, metadata !4, null}
93!23 = metadata !{i32 3, i32 0, metadata !4, null}
94!24 = metadata !{i32 4, i32 0, metadata !4, null}
95!25 = metadata !{i32 5, i32 0, metadata !4, null}
96!26 = metadata !{metadata !27, metadata !27, i64 0}
97!27 = metadata !{metadata !"float", metadata !28, i64 0}
98!28 = metadata !{metadata !"omnipotent char", metadata !29, i64 0}
99!29 = metadata !{metadata !"Simple C/C++ TBAA"}
100!30 = metadata !{i32 6, i32 0, metadata !19, null}
101!31 = metadata !{i32 7, i32 0, metadata !19, null}
102!32 = metadata !{i32 8, i32 0, metadata !4, null} ; [ DW_TAG_imported_declaration ]
Manman Ren409558f2013-11-22 21:49:45 +0000103!33 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}