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 11define hidden %0 @__divsc3(float %a, float %b, float %c, float %d) nounwind readnone { 12entry: 13 tail call void @llvm.dbg.value(metadata float %a, i64 0, metadata !0, metadata !MDExpression()), !dbg !MDLocation(scope: !1) 14 tail call void @llvm.dbg.value(metadata float %b, i64 0, metadata !11, metadata !MDExpression()), !dbg !MDLocation(scope: !1) 15 tail call void @llvm.dbg.value(metadata float %c, i64 0, metadata !12, metadata !MDExpression()), !dbg !MDLocation(scope: !1) 16 tail call void @llvm.dbg.value(metadata float %d, i64 0, metadata !13, metadata !MDExpression()), !dbg !MDLocation(scope: !1) 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 22bb: ; 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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !dbg !23 36 br label %bb2, !dbg !23 37 38bb1: ; 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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !dbg !27 52 br label %bb2, !dbg !27 53 54bb2: ; 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 62bb4: ; 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 68bb6: ; 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 74bb8: ; 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 !MDExpression()), !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 !MDExpression()), !dbg !31 80 br label %bb46, !dbg !31 81 82bb9: ; 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 89bb11: ; 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 96bb14: ; 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 101bb15: ; 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 106bb16: ; 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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !dbg !36 127 br label %bb46, !dbg !36 128 129bb27: ; 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 136bb30: ; 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 145bb33: ; 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 149bb34: ; 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 154bb35: ; 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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !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 !MDExpression()), !dbg !41 175 br label %bb46, !dbg !41 176 177bb46: ; 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 194declare float @fabsf(float) 195 196declare float @copysignf(float, float) nounwind readnone 197 198declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnone 199 200!llvm.dbg.cu = !{!3} 201!llvm.module.flags = !{!48} 202 203!0 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "a", line: 1921, arg: 0, scope: !1, file: !2, type: !9) 204!1 = !MDSubprogram(name: "__divsc3", linkageName: "__divsc3", line: 1922, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 1922, file: !45, scope: !2, type: !4, function: %0 (float, float, float, float)* @__divsc3, variables: !43) 205!2 = !MDFile(filename: "libgcc2.c", directory: "/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc") 206!3 = !MDCompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: true, emissionKind: 1, file: !45, enums: !47, retainedTypes: !47, subprograms: !44, imports: null) 207!4 = !MDSubroutineType(types: !5) 208!5 = !{!6, !9, !9, !9, !9} 209!6 = !MDDerivedType(tag: DW_TAG_typedef, name: "SCtype", line: 170, file: !46, scope: !7, baseType: !8) 210!7 = !MDFile(filename: "libgcc2.h", directory: "/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc") 211!8 = !MDBasicType(tag: DW_TAG_base_type, name: "complex float", size: 64, align: 32, encoding: DW_ATE_complex_float) 212!9 = !MDDerivedType(tag: DW_TAG_typedef, name: "SFtype", line: 167, file: !46, scope: !7, baseType: !10) 213!10 = !MDBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float) 214!11 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "b", line: 1921, arg: 0, scope: !1, file: !2, type: !9) 215!12 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 1921, arg: 0, scope: !1, file: !2, type: !9) 216!13 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "d", line: 1921, arg: 0, scope: !1, file: !2, type: !9) 217!14 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "denom", line: 1923, scope: !15, file: !2, type: !9) 218!15 = distinct !MDLexicalBlock(line: 1922, column: 0, file: !45, scope: !1) 219!16 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "ratio", line: 1923, scope: !15, file: !2, type: !9) 220!17 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "x", line: 1923, scope: !15, file: !2, type: !9) 221!18 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "y", line: 1923, scope: !15, file: !2, type: !9) 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 = !MDFile(filename: "libgcc2.c", directory: "/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc") 249!46 = !MDFile(filename: "libgcc2.h", directory: "/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc") 250!47 = !{} 251!48 = !{i32 1, !"Debug Info Version", i32 3} 252