Index: lib/Analysis/MemoryDependenceAnalysis.cpp =================================================================== --- lib/Analysis/MemoryDependenceAnalysis.cpp +++ lib/Analysis/MemoryDependenceAnalysis.cpp @@ -182,14 +182,17 @@ // Walk backwards through the block, looking for dependencies. while (ScanIt != BB->begin()) { + Instruction *Inst = &*--ScanIt; + // Debug intrinsics don't cause dependences and should not affect Limit + if (isa(Inst)) + continue; + // Limit the amount of scanning we do so we don't end up with quadratic // running time on extreme testcases. --Limit; if (!Limit) return MemDepResult::getUnknown(); - Instruction *Inst = &*--ScanIt; - // If this inst is a memory op, get the pointer it accessed MemoryLocation Loc; ModRefInfo MR = GetLocation(Inst, Loc, TLI); @@ -201,9 +204,6 @@ } if (auto InstCS = CallSite(Inst)) { - // Debug intrinsics don't cause dependences. - if (isa(Inst)) - continue; // If these two calls do not interfere, look past it. switch (AA.getModRefInfo(CS, InstCS)) { case MRI_NoModRef: Index: test/Transforms/DeadStoreElimination/mda-with-dbg-values.ll =================================================================== --- /dev/null +++ test/Transforms/DeadStoreElimination/mda-with-dbg-values.ll @@ -0,0 +1,383 @@ +; RUN: opt -S -dse < %s | FileCheck %s +; RUN: opt -S -strip-debug -dse < %s | FileCheck %s + +; Test case to check that the memory dependency analysis gets the same +; result even if we have a lot of dbg values between the memcpy and +; stores (all the dbg values comes from a loop of stores that were +; transformed into a memcpy). The memory dependency is then used by +; DSE to remove a store. + + +; ModuleID = './csmith33634798561077.debug.ll' +source_filename = "./csmith33634798561077.debug.ll" + + +%rec1153 = type { i32, i32, i32 } + +@g_177 = global %rec1153 zeroinitializer, !dbg !0 +@g_2016 = global i16 0, !dbg !12 + +; Function Attrs: argmemonly nounwind +declare void @llvm.memcpy.p0i16.p0i16.i32(i16* nocapture writeonly, i16* nocapture readonly, i32, i32, i1) #0 + +; Function Attrs: nounwind readnone +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 + +; Function Attrs: nounwind +define i16 @fn1() local_unnamed_addr #2 !dbg !21 { + %volatileloadslot5 = alloca [6 x i16], align 1 + %l_136.114 = alloca [6 x i16], align 1 + %l_137.12 = alloca %rec1153, align 1 + tail call void @llvm.dbg.declare(metadata [6 x [8 x [3 x i32]]]* undef, metadata !24, metadata !34), !dbg !35 + %volatileloadslot5.sub = getelementptr inbounds [6 x i16], [6 x i16]* %volatileloadslot5, i16 0, i16 0 + %l_136.114.sub = getelementptr inbounds [6 x i16], [6 x i16]* %l_136.114, i16 0, i16 0 + %_tmp15 = load volatile i16, i16* @g_2016, align 1, !dbg !36 + %lc1.14.sroa.0.0..sroa_idx = getelementptr inbounds %rec1153, %rec1153* %l_137.12, i16 0, i32 0, !dbg !37 + store i32 1, i32* %lc1.14.sroa.0.0..sroa_idx, align 1, !dbg !37 + +; CHECK-NOT: store i32 + + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !38), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !39), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !40), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !41), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !42), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !43), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !44), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !45), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !46), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !47), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !48), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !49), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !50), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !51), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !52), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !53), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !54), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !55), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !56), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !57), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !58), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !59), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !60), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !61), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !62), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !63), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !64), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !65), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !66), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !67), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !68), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !69), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !70), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !71), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !72), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !73), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !74), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !75), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !76), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !77), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !78), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !79), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !80), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !81), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !82), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !83), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !84), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !85), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !86), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !87), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !88), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !89), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !90), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !91), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !92), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !93), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !94), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !95), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !96), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !97), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !98), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !99), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !100), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !101), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !102), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !103), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !104), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !105), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !106), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !107), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !108), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !109), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !110), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !111), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !112), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !113), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !114), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !115), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !116), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !117), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !118), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !119), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !120), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !121), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !122), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !123), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !124), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !125), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !126), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !127), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !128), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !129), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !130), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !131), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !132), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !133), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !134), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !135), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !136), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !137), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !138), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !139), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !140), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !141), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !142), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !143), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !144), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !145), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !146), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !147), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !148), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !149), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !150), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !151), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !152), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !153), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !154), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !155), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !156), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !157), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !158), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !159), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !160), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !161), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !162), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !163), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !164), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !165), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !166), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !167), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !168), !dbg !35 + tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !24, metadata !169), !dbg !35 + %1 = bitcast %rec1153* %l_137.12 to i16* + call void @llvm.memcpy.p0i16.p0i16.i32(i16* nonnull %1, i16* nonnull %l_136.114.sub, i32 6, i32 1, i1 false), !dbg !181 + tail call void @llvm.dbg.value(metadata i16 undef, i64 0, metadata !182, metadata !34), !dbg !190 + %_tmp903 = load i32, i32* %lc1.14.sroa.0.0..sroa_idx, align 1, !dbg !192 + %_tmp904 = icmp eq i32 %_tmp903, 0, !dbg !192 + tail call void @llvm.dbg.value(metadata i16 undef, i64 0, metadata !193, metadata !34), !dbg !197 + br label %bb2, !dbg !199 + +bb2: ; preds = %0 + ret i16 0, !dbg !200 +} + +; Function Attrs: nounwind readnone +declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #3 + +attributes #0 = { argmemonly nounwind } +attributes #1 = { nounwind readnone } + +!llvm.dbg.cu = !{!15} +!llvm.module.flags = !{!18, !19} +!llvm.ident = !{!20} + +!0 = !DIGlobalVariable(name: "g_177", scope: null, file: !1, line: 6, type: !2, isLocal: false, isDefinition: true) +!1 = !DIFile(filename: "csmith33634798561077.c", directory: "/local/repo/llvm/foobar") +!2 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !3) +!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !1, line: 2, size: 96, align: 16, elements: !4) +!4 = !{!5, !10, !11} +!5 = !DIDerivedType(tag: DW_TAG_member, name: "f1", scope: !3, file: !1, line: 3, baseType: !6, size: 32, align: 16) +!6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint32_t", file: !7, line: 95, baseType: !8) +!7 = !DIFile(filename: "/local/repo/llvm/foobar/include/stdint.h", directory: "/local/repo/llvm/foobar") +!8 = !DIDerivedType(tag: DW_TAG_typedef, name: "__u32_t", file: !1, baseType: !9) +!9 = !DIBasicType(name: "unsigned long", size: 32, align: 16, encoding: DW_ATE_unsigned) +!10 = !DIDerivedType(tag: DW_TAG_member, name: "f2", scope: !3, file: !1, line: 4, baseType: !6, size: 32, align: 16, offset: 32) +!11 = !DIDerivedType(tag: DW_TAG_member, name: "f3", scope: !3, file: !1, line: 5, baseType: !6, size: 32, align: 16, offset: 64) +!12 = !DIGlobalVariable(name: "g_2016", scope: null, file: !1, line: 7, type: !13, isLocal: false, isDefinition: true) +!13 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !14) +!14 = !DIBasicType(name: "int", size: 16, align: 16, encoding: DW_ATE_signed) +!15 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "FlexASIC FlexC Compiler v6.46 for (LLVM)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !16, retainedTypes: !16, globals: !17) +!16 = !{} +!17 = !{!0, !12} +!18 = !{i32 2, !"Dwarf Version", i32 4} +!19 = !{i32 2, !"Debug Info Version", i32 3} +!20 = !{!"FlexASIC FlexC Compiler v6.46 for (LLVM)"} +!21 = distinct !DISubprogram(name: "fn1", scope: !1, file: !1, line: 8, type: !22, isLocal: false, isDefinition: true, scopeLine: 8, isOptimized: false, unit: !15, variables: !16) +!22 = !DISubroutineType(types: !23) +!23 = !{!14} +!24 = !DILocalVariable(name: "l_140", scope: !21, line: 12, type: !25) +!25 = !DICompositeType(tag: DW_TAG_array_type, baseType: !26, size: 4608, align: 16, elements: !32) +!26 = !DICompositeType(tag: DW_TAG_array_type, baseType: !27, size: 768, align: 16, elements: !30) +!27 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 96, align: 16, elements: !28) +!28 = !{!29} +!29 = !DISubrange(count: 3) +!30 = !{!31} +!31 = !DISubrange(count: 8) +!32 = !{!33} +!33 = !DISubrange(count: 6) +!34 = !DIExpression() +!35 = !DILocation(line: 12, column: 12, scope: !21) +!36 = !DILocation(line: 9, column: 3, scope: !21) +!37 = !DILocation(line: 11, column: 20, scope: !21) +!38 = !DIExpression(DW_OP_bit_piece, 32, 32) +!39 = !DIExpression(DW_OP_bit_piece, 64, 32) +!40 = !DIExpression(DW_OP_bit_piece, 96, 32) +!41 = !DIExpression(DW_OP_bit_piece, 128, 32) +!42 = !DIExpression(DW_OP_bit_piece, 160, 32) +!43 = !DIExpression(DW_OP_bit_piece, 192, 32) +!44 = !DIExpression(DW_OP_bit_piece, 224, 32) +!45 = !DIExpression(DW_OP_bit_piece, 256, 32) +!46 = !DIExpression(DW_OP_bit_piece, 288, 32) +!47 = !DIExpression(DW_OP_bit_piece, 320, 32) +!48 = !DIExpression(DW_OP_bit_piece, 352, 32) +!49 = !DIExpression(DW_OP_bit_piece, 384, 32) +!50 = !DIExpression(DW_OP_bit_piece, 416, 32) +!51 = !DIExpression(DW_OP_bit_piece, 448, 32) +!52 = !DIExpression(DW_OP_bit_piece, 480, 32) +!53 = !DIExpression(DW_OP_bit_piece, 512, 32) +!54 = !DIExpression(DW_OP_bit_piece, 544, 32) +!55 = !DIExpression(DW_OP_bit_piece, 576, 32) +!56 = !DIExpression(DW_OP_bit_piece, 608, 32) +!57 = !DIExpression(DW_OP_bit_piece, 640, 32) +!58 = !DIExpression(DW_OP_bit_piece, 672, 32) +!59 = !DIExpression(DW_OP_bit_piece, 704, 32) +!60 = !DIExpression(DW_OP_bit_piece, 736, 32) +!61 = !DIExpression(DW_OP_bit_piece, 768, 32) +!62 = !DIExpression(DW_OP_bit_piece, 800, 32) +!63 = !DIExpression(DW_OP_bit_piece, 832, 32) +!64 = !DIExpression(DW_OP_bit_piece, 864, 32) +!65 = !DIExpression(DW_OP_bit_piece, 896, 32) +!66 = !DIExpression(DW_OP_bit_piece, 928, 32) +!67 = !DIExpression(DW_OP_bit_piece, 960, 32) +!68 = !DIExpression(DW_OP_bit_piece, 992, 32) +!69 = !DIExpression(DW_OP_bit_piece, 1024, 32) +!70 = !DIExpression(DW_OP_bit_piece, 1056, 32) +!71 = !DIExpression(DW_OP_bit_piece, 1088, 32) +!72 = !DIExpression(DW_OP_bit_piece, 1120, 32) +!73 = !DIExpression(DW_OP_bit_piece, 1152, 32) +!74 = !DIExpression(DW_OP_bit_piece, 1184, 32) +!75 = !DIExpression(DW_OP_bit_piece, 1216, 32) +!76 = !DIExpression(DW_OP_bit_piece, 1248, 32) +!77 = !DIExpression(DW_OP_bit_piece, 1280, 32) +!78 = !DIExpression(DW_OP_bit_piece, 1312, 32) +!79 = !DIExpression(DW_OP_bit_piece, 1344, 32) +!80 = !DIExpression(DW_OP_bit_piece, 1376, 32) +!81 = !DIExpression(DW_OP_bit_piece, 1408, 32) +!82 = !DIExpression(DW_OP_bit_piece, 1440, 32) +!83 = !DIExpression(DW_OP_bit_piece, 1472, 32) +!84 = !DIExpression(DW_OP_bit_piece, 1504, 32) +!85 = !DIExpression(DW_OP_bit_piece, 1536, 32) +!86 = !DIExpression(DW_OP_bit_piece, 1568, 32) +!87 = !DIExpression(DW_OP_bit_piece, 1600, 32) +!88 = !DIExpression(DW_OP_bit_piece, 1632, 32) +!89 = !DIExpression(DW_OP_bit_piece, 1664, 32) +!90 = !DIExpression(DW_OP_bit_piece, 1696, 32) +!91 = !DIExpression(DW_OP_bit_piece, 1728, 32) +!92 = !DIExpression(DW_OP_bit_piece, 1760, 32) +!93 = !DIExpression(DW_OP_bit_piece, 1792, 32) +!94 = !DIExpression(DW_OP_bit_piece, 1824, 32) +!95 = !DIExpression(DW_OP_bit_piece, 1856, 32) +!96 = !DIExpression(DW_OP_bit_piece, 1888, 32) +!97 = !DIExpression(DW_OP_bit_piece, 1920, 32) +!98 = !DIExpression(DW_OP_bit_piece, 1952, 32) +!99 = !DIExpression(DW_OP_bit_piece, 1984, 32) +!100 = !DIExpression(DW_OP_bit_piece, 2016, 32) +!101 = !DIExpression(DW_OP_bit_piece, 2048, 32) +!102 = !DIExpression(DW_OP_bit_piece, 2080, 32) +!103 = !DIExpression(DW_OP_bit_piece, 2112, 32) +!104 = !DIExpression(DW_OP_bit_piece, 2144, 32) +!105 = !DIExpression(DW_OP_bit_piece, 2176, 32) +!106 = !DIExpression(DW_OP_bit_piece, 2208, 32) +!107 = !DIExpression(DW_OP_bit_piece, 2240, 32) +!108 = !DIExpression(DW_OP_bit_piece, 2272, 32) +!109 = !DIExpression(DW_OP_bit_piece, 2304, 32) +!110 = !DIExpression(DW_OP_bit_piece, 2336, 32) +!111 = !DIExpression(DW_OP_bit_piece, 2368, 32) +!112 = !DIExpression(DW_OP_bit_piece, 2400, 32) +!113 = !DIExpression(DW_OP_bit_piece, 2432, 32) +!114 = !DIExpression(DW_OP_bit_piece, 2464, 32) +!115 = !DIExpression(DW_OP_bit_piece, 2496, 32) +!116 = !DIExpression(DW_OP_bit_piece, 2528, 32) +!117 = !DIExpression(DW_OP_bit_piece, 2560, 32) +!118 = !DIExpression(DW_OP_bit_piece, 2592, 32) +!119 = !DIExpression(DW_OP_bit_piece, 2624, 32) +!120 = !DIExpression(DW_OP_bit_piece, 2656, 32) +!121 = !DIExpression(DW_OP_bit_piece, 2688, 32) +!122 = !DIExpression(DW_OP_bit_piece, 2720, 32) +!123 = !DIExpression(DW_OP_bit_piece, 2752, 32) +!124 = !DIExpression(DW_OP_bit_piece, 2784, 32) +!125 = !DIExpression(DW_OP_bit_piece, 2816, 32) +!126 = !DIExpression(DW_OP_bit_piece, 2848, 32) +!127 = !DIExpression(DW_OP_bit_piece, 2880, 32) +!128 = !DIExpression(DW_OP_bit_piece, 2912, 32) +!129 = !DIExpression(DW_OP_bit_piece, 2944, 32) +!130 = !DIExpression(DW_OP_bit_piece, 2976, 32) +!131 = !DIExpression(DW_OP_bit_piece, 3008, 32) +!132 = !DIExpression(DW_OP_bit_piece, 3040, 32) +!133 = !DIExpression(DW_OP_bit_piece, 3072, 32) +!134 = !DIExpression(DW_OP_bit_piece, 3104, 32) +!135 = !DIExpression(DW_OP_bit_piece, 3136, 32) +!136 = !DIExpression(DW_OP_bit_piece, 3168, 32) +!137 = !DIExpression(DW_OP_bit_piece, 3200, 32) +!138 = !DIExpression(DW_OP_bit_piece, 3232, 32) +!139 = !DIExpression(DW_OP_bit_piece, 3264, 32) +!140 = !DIExpression(DW_OP_bit_piece, 3296, 32) +!141 = !DIExpression(DW_OP_bit_piece, 3328, 32) +!142 = !DIExpression(DW_OP_bit_piece, 3360, 32) +!143 = !DIExpression(DW_OP_bit_piece, 3392, 32) +!144 = !DIExpression(DW_OP_bit_piece, 3424, 32) +!145 = !DIExpression(DW_OP_bit_piece, 3456, 32) +!146 = !DIExpression(DW_OP_bit_piece, 3488, 32) +!147 = !DIExpression(DW_OP_bit_piece, 3520, 32) +!148 = !DIExpression(DW_OP_bit_piece, 3552, 32) +!149 = !DIExpression(DW_OP_bit_piece, 3584, 32) +!150 = !DIExpression(DW_OP_bit_piece, 3616, 32) +!151 = !DIExpression(DW_OP_bit_piece, 3648, 32) +!152 = !DIExpression(DW_OP_bit_piece, 3680, 32) +!153 = !DIExpression(DW_OP_bit_piece, 3712, 32) +!154 = !DIExpression(DW_OP_bit_piece, 3744, 32) +!155 = !DIExpression(DW_OP_bit_piece, 3776, 32) +!156 = !DIExpression(DW_OP_bit_piece, 3808, 32) +!157 = !DIExpression(DW_OP_bit_piece, 3840, 32) +!158 = !DIExpression(DW_OP_bit_piece, 3872, 32) +!159 = !DIExpression(DW_OP_bit_piece, 3904, 32) +!160 = !DIExpression(DW_OP_bit_piece, 3936, 32) +!161 = !DIExpression(DW_OP_bit_piece, 3968, 32) +!162 = !DIExpression(DW_OP_bit_piece, 4000, 32) +!163 = !DIExpression(DW_OP_bit_piece, 4032, 32) +!164 = !DIExpression(DW_OP_bit_piece, 4064, 32) +!165 = !DIExpression(DW_OP_bit_piece, 4096, 32) +!166 = !DIExpression(DW_OP_bit_piece, 4128, 32) +!167 = !DIExpression(DW_OP_bit_piece, 4160, 32) +!168 = !DIExpression(DW_OP_bit_piece, 4192, 32) +!169 = !DIExpression(DW_OP_bit_piece, 4224, 32) +!181 = !DILocation(line: 13, column: 3, scope: !21) +!182 = !DILocalVariable(name: "ui2", arg: 2, scope: !183, line: 662, type: !187) +!183 = distinct !DISubprogram(name: "safe_mul_func_uint16_t_u_u", scope: !184, file: !184, line: 662, type: !185, isLocal: true, isDefinition: true, scopeLine: 663, isOptimized: false, unit: !15, variables: !16) +!184 = !DIFile(filename: "/usr/local/include/csmith-2.3.0/safe_math.h", directory: "/local/repo/llvm/foobar") +!185 = !DISubroutineType(types: !186) +!186 = !{!187, !187, !187} +!187 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint16_t", file: !7, line: 93, baseType: !188) +!188 = !DIDerivedType(tag: DW_TAG_typedef, name: "__u16_t", file: !1, baseType: !189) +!189 = !DIBasicType(name: "unsigned int", size: 16, align: 16, encoding: DW_ATE_unsigned) +!190 = !DILocation(line: 662, column: 57, scope: !183, inlinedAt: !191) +!191 = distinct !DILocation(line: 15, column: 3, scope: !21) +!192 = !DILocation(line: 15, column: 3, scope: !21) +!193 = !DILocalVariable(name: "right", arg: 2, scope: !194, line: 717, type: !14) +!194 = distinct !DISubprogram(name: "safe_rshift_func_uint16_t_u_s", scope: !184, file: !184, line: 717, type: !195, isLocal: true, isDefinition: true, scopeLine: 718, isOptimized: false, unit: !15, variables: !16) +!195 = !DISubroutineType(types: !196) +!196 = !{!187, !187, !14} +!197 = !DILocation(line: 717, column: 56, scope: !194, inlinedAt: !198) +!198 = distinct !DILocation(line: 15, column: 3, scope: !21) +!199 = !DILocation(line: 17, column: 5, scope: !21) +!200 = !DILocation(line: 18, column: 7, scope: !21)