|  | # RUN: llc -run-pass=block-placement %s -o - | FileCheck %s | 
|  |  | 
|  | --- | | 
|  | target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | 
|  | target triple = "x86_64-unknown-linux-gnu" | 
|  |  | 
|  | define void @_Z3fn1v() !dbg !6 { | 
|  | entry: | 
|  | %d = alloca i8, align 1 | 
|  | br i1 1, label %for.cond.cleanup, label %for.body | 
|  |  | 
|  | for.cond.cleanup: | 
|  | ret void | 
|  |  | 
|  | for.body: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.1 | 
|  |  | 
|  | for.body.1: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.2 | 
|  |  | 
|  | for.body.2: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.3 | 
|  |  | 
|  | for.body.3: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.4 | 
|  |  | 
|  | for.body.4: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.5 | 
|  |  | 
|  | for.body.5: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.6 | 
|  |  | 
|  | for.body.6: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.7 | 
|  |  | 
|  | for.body.7: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.8 | 
|  |  | 
|  | for.body.8: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.9 | 
|  |  | 
|  | for.body.9: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.10 | 
|  |  | 
|  | for.body.10: | 
|  | br i1 1, label %for.cond.cleanup, label %for.body.11 | 
|  |  | 
|  | for.body.11: | 
|  | %d.0.d.0..12 = load volatile i8, i8* %d, align 1 | 
|  | call void @llvm.dbg.value(metadata i8 %d.0.d.0..12, metadata !16, metadata !DIExpression()), !dbg !19 | 
|  | br label %for.cond.cleanup | 
|  | } | 
|  |  | 
|  | declare void @llvm.dbg.value(metadata, metadata, metadata) | 
|  |  | 
|  | !llvm.dbg.cu = !{!0} | 
|  | !llvm.module.flags = !{!3, !4, !5} | 
|  |  | 
|  | !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 7.0.0 (trunk 326606)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !2) | 
|  | !1 = !DIFile(filename: "repro.cpp", directory: "/home/mdavis/bugs/bz-189869") | 
|  | !2 = !{} | 
|  | !3 = !{i32 2, !"Dwarf Version", i32 4} | 
|  | !4 = !{i32 2, !"Debug Info Version", i32 3} | 
|  | !5 = !{i32 1, !"wchar_size", i32 4} | 
|  | !6 = distinct !DISubprogram(name: "fn1", linkageName: "_Z3fn1v", scope: !7, file: !7, line: 4, type: !8, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !15) | 
|  | !7 = !DIFile(filename: "./repro.cpp", directory: "/home/mdavis/bugs/bz-189869") | 
|  | !8 = !DISubroutineType(types: !9) | 
|  | !9 = !{} | 
|  | !15 = !{!16} | 
|  | !16 = !DILocalVariable(name: "d", scope: !6, file: !7, line: 6, type: !17) | 
|  | !17 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !18) | 
|  | !18 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) | 
|  | !19 = !DILocation(line: 6, column: 17, scope: !6) | 
|  |  | 
|  | ... | 
|  | --- | 
|  | # CHECK: name: _Z3fn1v | 
|  | # CHECK: bb.10.for.body.9 | 
|  | # CHECK: renamable $al | 
|  | # CHECK-NEXT: TEST8rr killed renamable $al | 
|  | # CHECK-NEXT: JNE_1 | 
|  | # CHECK-NOT: $al = IMPLICIT_DEF | 
|  | # CHECK: bb.12.for.body.10 | 
|  |  | 
|  | name:            _Z3fn1v | 
|  | alignment:       4 | 
|  | tracksRegLiveness: true | 
|  | constants: | 
|  | body:             | | 
|  | bb.0.entry: | 
|  | successors: %bb.1, %bb.4 | 
|  | liveins: $rdi, $rbp, $r15, $r14, $r13, $r12, $rbx | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.4, implicit killed $eflags | 
|  |  | 
|  | bb.1.for.cond.cleanup: | 
|  | successors: %bb.3, %bb.2 | 
|  | liveins: $ecx, $rdi | 
|  |  | 
|  | renamable $eax = MOV32rm $rsp, 1, $noreg, -16, $noreg | 
|  | CMP32rm killed renamable $eax, $rip, 1, $noreg, $noreg, $noreg, implicit-def $eflags | 
|  | JBE_1 %bb.3, implicit $eflags | 
|  |  | 
|  | bb.2: | 
|  | successors: %bb.3 | 
|  | liveins: $ebp, $ebx, $edx, $esi, $rdi, $r8d, $r9d, $r10d, $r11d, $r12d, $r13d, $r14d, $r15d | 
|  |  | 
|  | bb.3.for.cond.cleanup: | 
|  | liveins: $rdi, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, $xmm9, $xmm13, $xmm14 | 
|  | RETQ | 
|  |  | 
|  | bb.4.for.body: | 
|  | successors: %bb.1, %bb.5 | 
|  | liveins: $al, $rdi | 
|  |  | 
|  | renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.5.for.body.1: | 
|  | successors: %bb.1, %bb.6 | 
|  | liveins: $ecx, $rdi | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.6.for.body.2: | 
|  | successors: %bb.1, %bb.7 | 
|  | liveins: $ecx, $eflags, $rdi | 
|  |  | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.7.for.body.3: | 
|  | successors: %bb.1, %bb.8 | 
|  | liveins: $ecx, $rdi | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.8.for.body.4: | 
|  | successors: %bb.1, %bb.9 | 
|  | liveins: $ecx, $eflags, $rdi | 
|  |  | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.9.for.body.5: | 
|  | successors: %bb.1, %bb.10 | 
|  | liveins: $ecx, $rdi | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.10.for.body.6: | 
|  | successors: %bb.1, %bb.11 | 
|  | liveins: $ecx, $eflags, $rdi | 
|  |  | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.11.for.body.7: | 
|  | successors: %bb.1, %bb.12 | 
|  | liveins: $ecx, $rdi | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.12.for.body.8: | 
|  | successors: %bb.1, %bb.13 | 
|  | liveins: $ecx, $eflags, $rdi | 
|  |  | 
|  | JNE_1 %bb.1, implicit $eflags | 
|  |  | 
|  | bb.13.for.body.9: | 
|  | successors: %bb.14, %bb.15 | 
|  | liveins: $rdi | 
|  |  | 
|  | renamable $al = MOV8ri 1 | 
|  | TEST8rr killed renamable $al, renamable $al, implicit-def $eflags | 
|  | JE_1 %bb.15, implicit $eflags | 
|  |  | 
|  | bb.14: | 
|  | successors: %bb.1 | 
|  | liveins: $rdi | 
|  |  | 
|  | renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags | 
|  | JMP_1 %bb.1 | 
|  |  | 
|  | bb.15.for.body.10: | 
|  | successors: %bb.16, %bb.17 | 
|  | liveins: $eflags, $rdi | 
|  |  | 
|  | JE_1 %bb.17, implicit killed $eflags | 
|  |  | 
|  | bb.16: | 
|  | successors: %bb.1 | 
|  | liveins: $rdi | 
|  |  | 
|  | JMP_1 %bb.1 | 
|  |  | 
|  | bb.17.for.body.11: | 
|  | successors: %bb.1 | 
|  | liveins: $rdi | 
|  |  | 
|  | dead renamable $al = MOV8rm $rsp, 1, $noreg, -121, $noreg | 
|  | DBG_VALUE debug-use $al, debug-use $noreg, !16, !DIExpression(), debug-location !19 | 
|  | renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags | 
|  | JMP_1 %bb.1 | 
|  | ... |