IR: Move MDLocation into place
[oota-llvm.git] / test / CodeGen / X86 / 2010-05-25-DotDebugLoc.ll
1 ; RUN: llc -mtriple=x86_64-pc-linux -O2 < %s | FileCheck %s
2 ; RUN: llc -mtriple=x86_64-pc-linux -O2 -regalloc=basic < %s | FileCheck %s
3 ; Test to check .debug_loc support. This test case emits many debug_loc entries.
4
5 ; CHECK: .short {{.*}} # Loc expr size
6 ; CHECK-NEXT: .Ltmp
7 ; CHECK-NEXT: DW_OP_reg
8
9 %0 = type { double }
10
11 define hidden %0 @__divsc3(float %a, float %b, float %c, float %d) nounwind readnone {
12 entry:
13   tail call void @llvm.dbg.value(metadata float %a, i64 0, metadata !0, metadata !{!"0x102"})
14   tail call void @llvm.dbg.value(metadata float %b, i64 0, metadata !11, metadata !{!"0x102"})
15   tail call void @llvm.dbg.value(metadata float %c, i64 0, metadata !12, metadata !{!"0x102"})
16   tail call void @llvm.dbg.value(metadata float %d, i64 0, metadata !13, metadata !{!"0x102"})
17   %0 = tail call float @fabsf(float %c) nounwind readnone, !dbg !19 ; <float> [#uses=1]
18   %1 = tail call float @fabsf(float %d) nounwind readnone, !dbg !19 ; <float> [#uses=1]
19   %2 = fcmp olt float %0, %1, !dbg !19            ; <i1> [#uses=1]
20   br i1 %2, label %bb, label %bb1, !dbg !19
21
22 bb:                                               ; preds = %entry
23   %3 = fdiv float %c, %d, !dbg !20                ; <float> [#uses=3]
24   tail call void @llvm.dbg.value(metadata float %3, i64 0, metadata !16, metadata !{!"0x102"}), !dbg !20
25   %4 = fmul float %3, %c, !dbg !21                ; <float> [#uses=1]
26   %5 = fadd float %4, %d, !dbg !21                ; <float> [#uses=2]
27   tail call void @llvm.dbg.value(metadata float %5, i64 0, metadata !14, metadata !{!"0x102"}), !dbg !21
28   %6 = fmul float %3, %a, !dbg !22                ; <float> [#uses=1]
29   %7 = fadd float %6, %b, !dbg !22                ; <float> [#uses=1]
30   %8 = fdiv float %7, %5, !dbg !22                ; <float> [#uses=1]
31   tail call void @llvm.dbg.value(metadata float %8, i64 0, metadata !17, metadata !{!"0x102"}), !dbg !22
32   %9 = fmul float %3, %b, !dbg !23                ; <float> [#uses=1]
33   %10 = fsub float %9, %a, !dbg !23               ; <float> [#uses=1]
34   %11 = fdiv float %10, %5, !dbg !23              ; <float> [#uses=1]
35   tail call void @llvm.dbg.value(metadata float %11, i64 0, metadata !18, metadata !{!"0x102"}), !dbg !23
36   br label %bb2, !dbg !23
37
38 bb1:                                              ; preds = %entry
39   %12 = fdiv float %d, %c, !dbg !24               ; <float> [#uses=3]
40   tail call void @llvm.dbg.value(metadata float %12, i64 0, metadata !16, metadata !{!"0x102"}), !dbg !24
41   %13 = fmul float %12, %d, !dbg !25              ; <float> [#uses=1]
42   %14 = fadd float %13, %c, !dbg !25              ; <float> [#uses=2]
43   tail call void @llvm.dbg.value(metadata float %14, i64 0, metadata !14, metadata !{!"0x102"}), !dbg !25
44   %15 = fmul float %12, %b, !dbg !26              ; <float> [#uses=1]
45   %16 = fadd float %15, %a, !dbg !26              ; <float> [#uses=1]
46   %17 = fdiv float %16, %14, !dbg !26             ; <float> [#uses=1]
47   tail call void @llvm.dbg.value(metadata float %17, i64 0, metadata !17, metadata !{!"0x102"}), !dbg !26
48   %18 = fmul float %12, %a, !dbg !27              ; <float> [#uses=1]
49   %19 = fsub float %b, %18, !dbg !27              ; <float> [#uses=1]
50   %20 = fdiv float %19, %14, !dbg !27             ; <float> [#uses=1]
51   tail call void @llvm.dbg.value(metadata float %20, i64 0, metadata !18, metadata !{!"0x102"}), !dbg !27
52   br label %bb2, !dbg !27
53
54 bb2:                                              ; preds = %bb1, %bb
55   %y.0 = phi float [ %11, %bb ], [ %20, %bb1 ]    ; <float> [#uses=5]
56   %x.0 = phi float [ %8, %bb ], [ %17, %bb1 ]     ; <float> [#uses=5]
57   %21 = fcmp uno float %x.0, 0.000000e+00, !dbg !28 ; <i1> [#uses=1]
58   %22 = fcmp uno float %y.0, 0.000000e+00, !dbg !28 ; <i1> [#uses=1]
59   %or.cond = and i1 %21, %22                      ; <i1> [#uses=1]
60   br i1 %or.cond, label %bb4, label %bb46, !dbg !28
61
62 bb4:                                              ; preds = %bb2
63   %23 = fcmp une float %c, 0.000000e+00, !dbg !29 ; <i1> [#uses=1]
64   %24 = fcmp une float %d, 0.000000e+00, !dbg !29 ; <i1> [#uses=1]
65   %or.cond93 = or i1 %23, %24                     ; <i1> [#uses=1]
66   br i1 %or.cond93, label %bb9, label %bb6, !dbg !29
67
68 bb6:                                              ; preds = %bb4
69   %25 = fcmp uno float %a, 0.000000e+00, !dbg !29 ; <i1> [#uses=1]
70   %26 = fcmp uno float %b, 0.000000e+00, !dbg !29 ; <i1> [#uses=1]
71   %or.cond94 = and i1 %25, %26                    ; <i1> [#uses=1]
72   br i1 %or.cond94, label %bb9, label %bb8, !dbg !29
73
74 bb8:                                              ; preds = %bb6
75   %27 = tail call float @copysignf(float 0x7FF0000000000000, float %c) nounwind readnone, !dbg !30 ; <float> [#uses=2]
76   %28 = fmul float %27, %a, !dbg !30              ; <float> [#uses=1]
77   tail call void @llvm.dbg.value(metadata float %28, i64 0, metadata !17, metadata !{!"0x102"}), !dbg !30
78   %29 = fmul float %27, %b, !dbg !31              ; <float> [#uses=1]
79   tail call void @llvm.dbg.value(metadata float %29, i64 0, metadata !18, metadata !{!"0x102"}), !dbg !31
80   br label %bb46, !dbg !31
81
82 bb9:                                              ; preds = %bb6, %bb4
83   %30 = fcmp ord float %a, 0.000000e+00           ; <i1> [#uses=1]
84   %31 = fsub float %a, %a, !dbg !32               ; <float> [#uses=3]
85   %32 = fcmp uno float %31, 0.000000e+00          ; <i1> [#uses=1]
86   %33 = and i1 %30, %32, !dbg !32                 ; <i1> [#uses=2]
87   br i1 %33, label %bb14, label %bb11, !dbg !32
88
89 bb11:                                             ; preds = %bb9
90   %34 = fcmp ord float %b, 0.000000e+00           ; <i1> [#uses=1]
91   %35 = fsub float %b, %b, !dbg !32               ; <float> [#uses=1]
92   %36 = fcmp uno float %35, 0.000000e+00          ; <i1> [#uses=1]
93   %37 = and i1 %34, %36, !dbg !32                 ; <i1> [#uses=1]
94   br i1 %37, label %bb14, label %bb27, !dbg !32
95
96 bb14:                                             ; preds = %bb11, %bb9
97   %38 = fsub float %c, %c, !dbg !32               ; <float> [#uses=1]
98   %39 = fcmp ord float %38, 0.000000e+00          ; <i1> [#uses=1]
99   br i1 %39, label %bb15, label %bb27, !dbg !32
100
101 bb15:                                             ; preds = %bb14
102   %40 = fsub float %d, %d, !dbg !32               ; <float> [#uses=1]
103   %41 = fcmp ord float %40, 0.000000e+00          ; <i1> [#uses=1]
104   br i1 %41, label %bb16, label %bb27, !dbg !32
105
106 bb16:                                             ; preds = %bb15
107   %iftmp.0.0 = select i1 %33, float 1.000000e+00, float 0.000000e+00 ; <float> [#uses=1]
108   %42 = tail call float @copysignf(float %iftmp.0.0, float %a) nounwind readnone, !dbg !33 ; <float> [#uses=2]
109   tail call void @llvm.dbg.value(metadata float %42, i64 0, metadata !0, metadata !{!"0x102"}), !dbg !33
110   %43 = fcmp ord float %b, 0.000000e+00           ; <i1> [#uses=1]
111   %44 = fsub float %b, %b, !dbg !34               ; <float> [#uses=1]
112   %45 = fcmp uno float %44, 0.000000e+00          ; <i1> [#uses=1]
113   %46 = and i1 %43, %45, !dbg !34                 ; <i1> [#uses=1]
114   %iftmp.1.0 = select i1 %46, float 1.000000e+00, float 0.000000e+00 ; <float> [#uses=1]
115   %47 = tail call float @copysignf(float %iftmp.1.0, float %b) nounwind readnone, !dbg !34 ; <float> [#uses=2]
116   tail call void @llvm.dbg.value(metadata float %47, i64 0, metadata !11, metadata !{!"0x102"}), !dbg !34
117   %48 = fmul float %42, %c, !dbg !35              ; <float> [#uses=1]
118   %49 = fmul float %47, %d, !dbg !35              ; <float> [#uses=1]
119   %50 = fadd float %48, %49, !dbg !35             ; <float> [#uses=1]
120   %51 = fmul float %50, 0x7FF0000000000000, !dbg !35 ; <float> [#uses=1]
121   tail call void @llvm.dbg.value(metadata float %51, i64 0, metadata !17, metadata !{!"0x102"}), !dbg !35
122   %52 = fmul float %47, %c, !dbg !36              ; <float> [#uses=1]
123   %53 = fmul float %42, %d, !dbg !36              ; <float> [#uses=1]
124   %54 = fsub float %52, %53, !dbg !36             ; <float> [#uses=1]
125   %55 = fmul float %54, 0x7FF0000000000000, !dbg !36 ; <float> [#uses=1]
126   tail call void @llvm.dbg.value(metadata float %55, i64 0, metadata !18, metadata !{!"0x102"}), !dbg !36
127   br label %bb46, !dbg !36
128
129 bb27:                                             ; preds = %bb15, %bb14, %bb11
130   %56 = fcmp ord float %c, 0.000000e+00           ; <i1> [#uses=1]
131   %57 = fsub float %c, %c, !dbg !37               ; <float> [#uses=1]
132   %58 = fcmp uno float %57, 0.000000e+00          ; <i1> [#uses=1]
133   %59 = and i1 %56, %58, !dbg !37                 ; <i1> [#uses=2]
134   br i1 %59, label %bb33, label %bb30, !dbg !37
135
136 bb30:                                             ; preds = %bb27
137   %60 = fcmp ord float %d, 0.000000e+00           ; <i1> [#uses=1]
138   %61 = fsub float %d, %d, !dbg !37               ; <float> [#uses=1]
139   %62 = fcmp uno float %61, 0.000000e+00          ; <i1> [#uses=1]
140   %63 = and i1 %60, %62, !dbg !37                 ; <i1> [#uses=1]
141   %64 = fcmp ord float %31, 0.000000e+00          ; <i1> [#uses=1]
142   %or.cond95 = and i1 %63, %64                    ; <i1> [#uses=1]
143   br i1 %or.cond95, label %bb34, label %bb46, !dbg !37
144
145 bb33:                                             ; preds = %bb27
146   %.old = fcmp ord float %31, 0.000000e+00        ; <i1> [#uses=1]
147   br i1 %.old, label %bb34, label %bb46, !dbg !37
148
149 bb34:                                             ; preds = %bb33, %bb30
150   %65 = fsub float %b, %b, !dbg !37               ; <float> [#uses=1]
151   %66 = fcmp ord float %65, 0.000000e+00          ; <i1> [#uses=1]
152   br i1 %66, label %bb35, label %bb46, !dbg !37
153
154 bb35:                                             ; preds = %bb34
155   %iftmp.2.0 = select i1 %59, float 1.000000e+00, float 0.000000e+00 ; <float> [#uses=1]
156   %67 = tail call float @copysignf(float %iftmp.2.0, float %c) nounwind readnone, !dbg !38 ; <float> [#uses=2]
157   tail call void @llvm.dbg.value(metadata float %67, i64 0, metadata !12, metadata !{!"0x102"}), !dbg !38
158   %68 = fcmp ord float %d, 0.000000e+00           ; <i1> [#uses=1]
159   %69 = fsub float %d, %d, !dbg !39               ; <float> [#uses=1]
160   %70 = fcmp uno float %69, 0.000000e+00          ; <i1> [#uses=1]
161   %71 = and i1 %68, %70, !dbg !39                 ; <i1> [#uses=1]
162   %iftmp.3.0 = select i1 %71, float 1.000000e+00, float 0.000000e+00 ; <float> [#uses=1]
163   %72 = tail call float @copysignf(float %iftmp.3.0, float %d) nounwind readnone, !dbg !39 ; <float> [#uses=2]
164   tail call void @llvm.dbg.value(metadata float %72, i64 0, metadata !13, metadata !{!"0x102"}), !dbg !39
165   %73 = fmul float %67, %a, !dbg !40              ; <float> [#uses=1]
166   %74 = fmul float %72, %b, !dbg !40              ; <float> [#uses=1]
167   %75 = fadd float %73, %74, !dbg !40             ; <float> [#uses=1]
168   %76 = fmul float %75, 0.000000e+00, !dbg !40    ; <float> [#uses=1]
169   tail call void @llvm.dbg.value(metadata float %76, i64 0, metadata !17, metadata !{!"0x102"}), !dbg !40
170   %77 = fmul float %67, %b, !dbg !41              ; <float> [#uses=1]
171   %78 = fmul float %72, %a, !dbg !41              ; <float> [#uses=1]
172   %79 = fsub float %77, %78, !dbg !41             ; <float> [#uses=1]
173   %80 = fmul float %79, 0.000000e+00, !dbg !41    ; <float> [#uses=1]
174   tail call void @llvm.dbg.value(metadata float %80, i64 0, metadata !18, metadata !{!"0x102"}), !dbg !41
175   br label %bb46, !dbg !41
176
177 bb46:                                             ; preds = %bb35, %bb34, %bb33, %bb30, %bb16, %bb8, %bb2
178   %y.1 = phi float [ %80, %bb35 ], [ %y.0, %bb34 ], [ %y.0, %bb33 ], [ %y.0, %bb30 ], [ %55, %bb16 ], [ %29, %bb8 ], [ %y.0, %bb2 ] ; <float> [#uses=2]
179   %x.1 = phi float [ %76, %bb35 ], [ %x.0, %bb34 ], [ %x.0, %bb33 ], [ %x.0, %bb30 ], [ %51, %bb16 ], [ %28, %bb8 ], [ %x.0, %bb2 ] ; <float> [#uses=1]
180   %81 = fmul float %y.1, 0.000000e+00, !dbg !42   ; <float> [#uses=1]
181   %82 = fadd float %y.1, 0.000000e+00, !dbg !42   ; <float> [#uses=1]
182   %tmpr = fadd float %x.1, %81, !dbg !42          ; <float> [#uses=1]
183   %tmp89 = bitcast float %tmpr to i32             ; <i32> [#uses=1]
184   %tmp90 = zext i32 %tmp89 to i64                 ; <i64> [#uses=1]
185   %tmp85 = bitcast float %82 to i32               ; <i32> [#uses=1]
186   %tmp86 = zext i32 %tmp85 to i64                 ; <i64> [#uses=1]
187   %tmp87 = shl i64 %tmp86, 32                     ; <i64> [#uses=1]
188   %ins = or i64 %tmp90, %tmp87                    ; <i64> [#uses=1]
189   %tmp84 = bitcast i64 %ins to double             ; <double> [#uses=1]
190   %mrv75 = insertvalue %0 undef, double %tmp84, 0, !dbg !42 ; <%0> [#uses=1]
191   ret %0 %mrv75, !dbg !42
192 }
193
194 declare float @fabsf(float)
195
196 declare float @copysignf(float, float) nounwind readnone
197
198 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnone
199
200 !llvm.dbg.cu = !{!3}
201 !llvm.module.flags = !{!48}
202
203 !0 = !{!"0x101\00a\001921\000", !1, !2, !9} ; [ DW_TAG_arg_variable ]
204 !1 = !{!"0x2e\00__divsc3\00__divsc3\00__divsc3\001922\000\001\000\006\000\001\001922", !45, !2, !4, null, %0 (float, float, float, float)* @__divsc3, null, null, !43} ; [ DW_TAG_subprogram ]
205 !2 = !{!"0x29", !45} ; [ DW_TAG_file_type ]
206 !3 = !{!"0x11\001\004.2.1 (Based on Apple Inc. build 5658) (LLVM build)\001\00\000\00\001", !45, !47, !47, !44, null,  null} ; [ DW_TAG_compile_unit ]
207 !4 = !{!"0x15\00\000\000\000\000\000\000", !45, !2, null, !5, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
208 !5 = !{!6, !9, !9, !9, !9}
209 !6 = !{!"0x16\00SCtype\00170\000\000\000\000", !46, !7, !8} ; [ DW_TAG_typedef ]
210 !7 = !{!"0x29", !46} ; [ DW_TAG_file_type ]
211 !8 = !{!"0x24\00complex float\000\0064\0032\000\000\003", !45, !2} ; [ DW_TAG_base_type ]
212 !9 = !{!"0x16\00SFtype\00167\000\000\000\000", !46, !7, !10} ; [ DW_TAG_typedef ]
213 !10 = !{!"0x24\00float\000\0032\0032\000\000\004", !45, !2} ; [ DW_TAG_base_type ]
214 !11 = !{!"0x101\00b\001921\000", !1, !2, !9} ; [ DW_TAG_arg_variable ]
215 !12 = !{!"0x101\00c\001921\000", !1, !2, !9} ; [ DW_TAG_arg_variable ]
216 !13 = !{!"0x101\00d\001921\000", !1, !2, !9} ; [ DW_TAG_arg_variable ]
217 !14 = !{!"0x100\00denom\001923\000", !15, !2, !9} ; [ DW_TAG_auto_variable ]
218 !15 = !{!"0xb\001922\000\000", !45, !1} ; [ DW_TAG_lexical_block ]
219 !16 = !{!"0x100\00ratio\001923\000", !15, !2, !9} ; [ DW_TAG_auto_variable ]
220 !17 = !{!"0x100\00x\001923\000", !15, !2, !9} ; [ DW_TAG_auto_variable ]
221 !18 = !{!"0x100\00y\001923\000", !15, !2, !9} ; [ DW_TAG_auto_variable ]
222 !19 = !MDLocation(line: 1929, scope: !15)
223 !20 = !MDLocation(line: 1931, scope: !15)
224 !21 = !MDLocation(line: 1932, scope: !15)
225 !22 = !MDLocation(line: 1933, scope: !15)
226 !23 = !MDLocation(line: 1934, scope: !15)
227 !24 = !MDLocation(line: 1938, scope: !15)
228 !25 = !MDLocation(line: 1939, scope: !15)
229 !26 = !MDLocation(line: 1940, scope: !15)
230 !27 = !MDLocation(line: 1941, scope: !15)
231 !28 = !MDLocation(line: 1946, scope: !15)
232 !29 = !MDLocation(line: 1948, scope: !15)
233 !30 = !MDLocation(line: 1950, scope: !15)
234 !31 = !MDLocation(line: 1951, scope: !15)
235 !32 = !MDLocation(line: 1953, scope: !15)
236 !33 = !MDLocation(line: 1955, scope: !15)
237 !34 = !MDLocation(line: 1956, scope: !15)
238 !35 = !MDLocation(line: 1957, scope: !15)
239 !36 = !MDLocation(line: 1958, scope: !15)
240 !37 = !MDLocation(line: 1960, scope: !15)
241 !38 = !MDLocation(line: 1962, scope: !15)
242 !39 = !MDLocation(line: 1963, scope: !15)
243 !40 = !MDLocation(line: 1964, scope: !15)
244 !41 = !MDLocation(line: 1965, scope: !15)
245 !42 = !MDLocation(line: 1969, scope: !15)
246 !43 = !{!0, !11, !12, !13, !14, !16, !17, !18}
247 !44 = !{!1}
248 !45 = !{!"libgcc2.c", !"/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc"}
249 !46 = !{!"libgcc2.h", !"/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc"}
250 !47 = !{i32 0}
251 !48 = !{i32 1, !"Debug Info Version", i32 2}