154 lines · plain
1; RUN: opt < %s -S -passes=mldst-motion -o - | FileCheck %s2; RUN: opt < %s -S -strip-debug -passes=mldst-motion -o - | FileCheck %s3 4; Verify that the amount of stores that are sunk is invariant regarding debug5; info. This used to fail due to including dbg.value instructions when6; calculating the size of a basic block for the "MagicCompileTimeControl"7; check in MergedLoadStoreMotion::mergeStores.8 9; CHECK-LABEL: return:10; CHECK-NEXT: %.sink = phi i16 [ 5, %if.end ], [ 6, %if.then ]11; CHECK-NEXT: store i16 %.sink, ptr %agg.result12; CHECK-NEXT: %0 = getelementptr inbounds %struct.S0, ptr %agg.result, i16 0, i32 113; CHECK-NEXT: store i16 0, ptr %014; CHECK-NEXT: ret void15 16%struct.S0 = type { i16, i16 }17 18@g_173 = dso_local local_unnamed_addr global i16 0, !dbg !019 20; Function Attrs: noinline norecurse nounwind21define dso_local void @func_34(ptr noalias sret(%struct.S0) %agg.result, i1 %arg) local_unnamed_addr #0 !dbg !11 {22entry:23 br i1 %arg, label %if.end, label %if.then, !dbg !1824 25if.then: ; preds = %entry26 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2227 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2228 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2229 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2230 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2231 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2232 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2233 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2234 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2235 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2236 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2237 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2238 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2239 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2240 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2241 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2242 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2243 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2244 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2245 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2246 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2247 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2248 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2249 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2250 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2251 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2252 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2253 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2254 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2255 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2256 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2257 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2258 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2259 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2260 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2261 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2262 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2263 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2264 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2265 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2266 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2267 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2268 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2269 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2270 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2271 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2272 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2273 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2274 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2275 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2276 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2277 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2278 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2279 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2280 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2281 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2282 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2283 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2284 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2285 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2286 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2287 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2288 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2289 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2290 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2291 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2292 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2293 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2294 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2295 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2296 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2297 call void @llvm.dbg.value(metadata i16 5, metadata !19, metadata !DIExpression()), !dbg !2298 store i16 6, ptr %agg.result, !dbg !2399 %l_303.sroa.2.0..sroa_idx1 = getelementptr inbounds %struct.S0, ptr %agg.result, i16 0, i32 1, !dbg !23100 store i16 0, ptr %l_303.sroa.2.0..sroa_idx1, !dbg !23101 br label %return, !dbg !24102 103if.end: ; preds = %entry104 store i16 5, ptr %agg.result, !dbg !25105 %f138 = getelementptr inbounds %struct.S0, ptr %agg.result, i16 0, i32 1, !dbg !25106 store i16 0, ptr %f138, !dbg !25107 store i16 0, ptr @g_173, !dbg !27108 br label %return, !dbg !28109 110return: ; preds = %if.end, %if.then111 ret void, !dbg !29112}113 114; Function Attrs: nounwind readnone speculatable115declare void @llvm.dbg.value(metadata, metadata, metadata) #1116 117attributes #0 = { noinline norecurse nounwind }118attributes #1 = { nounwind readnone speculatable }119 120!llvm.dbg.cu = !{!2}121!llvm.module.flags = !{!7, !8, !9}122!llvm.ident = !{!10}123 124!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())125!1 = distinct !DIGlobalVariable(name: "g_173", scope: !2, file: !3, line: 7, type: !6, isLocal: false, isDefinition: true)126!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 7.0.0 (x)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)127!3 = !DIFile(filename: "csmith11794002068761.c", directory: "")128!4 = !{}129!5 = !{!0}130!6 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)131!7 = !{i32 2, !"Dwarf Version", i32 4}132!8 = !{i32 2, !"Debug Info Version", i32 3}133!9 = !{i32 1, !"wchar_size", i32 1}134!10 = !{!"clang version 7.0.0 (x)"}135!11 = distinct !DISubprogram(name: "func_34", scope: !3, file: !3, line: 16, type: !12, isLocal: false, isDefinition: true, scopeLine: 16, isOptimized: false, unit: !2, retainedNodes: !4)136!12 = !DISubroutineType(types: !13)137!13 = !{!14}138!14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !3, line: 2, size: 32, elements: !15)139!15 = !{!16, !17}140!16 = !DIDerivedType(tag: DW_TAG_member, name: "f0", scope: !14, file: !3, line: 3, baseType: !6, size: 16)141!17 = !DIDerivedType(tag: DW_TAG_member, name: "f1", scope: !14, file: !3, line: 4, baseType: !6, size: 16, offset: 16)142!18 = !DILocation(line: 18, column: 7, scope: !11)143!19 = !DILocalVariable(name: "left", scope: !20, file: !3, line: 23, type: !6)144!20 = distinct !DILexicalBlock(scope: !21, file: !3, line: 18, column: 14)145!21 = distinct !DILexicalBlock(scope: !11, file: !3, line: 18, column: 7)146!22 = !DILocation(line: 23, column: 9, scope: !20)147!23 = !DILocation(line: 26, column: 12, scope: !20)148!24 = !DILocation(line: 26, column: 5, scope: !20)149!25 = !DILocation(line: 29, column: 23, scope: !26)150!26 = distinct !DILexicalBlock(scope: !11, file: !3, line: 28, column: 3)151!27 = !DILocation(line: 30, column: 11, scope: !26)152!28 = !DILocation(line: 31, column: 5, scope: !26)153!29 = !DILocation(line: 33, column: 1, scope: !11)154