Home | History | Annotate | Download | only in X86
      1 # RUN: llc -run-pass=block-placement %s -o - | FileCheck %s
      2 
      3 --- |
      4   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
      5   target triple = "x86_64-unknown-linux-gnu"
      6   
      7   define void @_Z3fn1v() !dbg !6 {
      8   entry:
      9     %d = alloca i8, align 1
     10     br i1 1, label %for.cond.cleanup, label %for.body
     11   
     12   for.cond.cleanup:
     13     ret void
     14   
     15   for.body:
     16     br i1 1, label %for.cond.cleanup, label %for.body.1
     17   
     18   for.body.1:
     19     br i1 1, label %for.cond.cleanup, label %for.body.2
     20   
     21   for.body.2:
     22     br i1 1, label %for.cond.cleanup, label %for.body.3
     23   
     24   for.body.3:
     25     br i1 1, label %for.cond.cleanup, label %for.body.4
     26   
     27   for.body.4:
     28     br i1 1, label %for.cond.cleanup, label %for.body.5
     29   
     30   for.body.5:
     31     br i1 1, label %for.cond.cleanup, label %for.body.6
     32   
     33   for.body.6:
     34     br i1 1, label %for.cond.cleanup, label %for.body.7
     35   
     36   for.body.7:
     37     br i1 1, label %for.cond.cleanup, label %for.body.8
     38   
     39   for.body.8:
     40     br i1 1, label %for.cond.cleanup, label %for.body.9
     41   
     42   for.body.9:
     43     br i1 1, label %for.cond.cleanup, label %for.body.10
     44   
     45   for.body.10:
     46     br i1 1, label %for.cond.cleanup, label %for.body.11
     47   
     48   for.body.11:
     49     %d.0.d.0..12 = load volatile i8, i8* %d, align 1
     50     call void @llvm.dbg.value(metadata i8 %d.0.d.0..12, metadata !16, metadata !DIExpression()), !dbg !19
     51     br label %for.cond.cleanup
     52   }
     53   
     54   declare void @llvm.dbg.value(metadata, metadata, metadata)
     55   
     56   !llvm.dbg.cu = !{!0}
     57   !llvm.module.flags = !{!3, !4, !5}
     58   
     59   !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)
     60   !1 = !DIFile(filename: "repro.cpp", directory: "/home/mdavis/bugs/bz-189869")
     61   !2 = !{}
     62   !3 = !{i32 2, !"Dwarf Version", i32 4}
     63   !4 = !{i32 2, !"Debug Info Version", i32 3}
     64   !5 = !{i32 1, !"wchar_size", i32 4}
     65   !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)
     66   !7 = !DIFile(filename: "./repro.cpp", directory: "/home/mdavis/bugs/bz-189869")
     67   !8 = !DISubroutineType(types: !9)
     68   !9 = !{}
     69   !15 = !{!16}
     70   !16 = !DILocalVariable(name: "d", scope: !6, file: !7, line: 6, type: !17)
     71   !17 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !18)
     72   !18 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
     73   !19 = !DILocation(line: 6, column: 17, scope: !6)
     74 
     75 ...
     76 ---
     77 # CHECK: name: _Z3fn1v
     78 # CHECK: bb.10.for.body.9
     79 # CHECK: renamable $al
     80 # CHECK-NEXT: TEST8rr killed renamable $al
     81 # CHECK-NEXT: JNE_1
     82 # CHECK-NOT: $al = IMPLICIT_DEF
     83 # CHECK: bb.12.for.body.10
     84 
     85 name:            _Z3fn1v
     86 alignment:       4
     87 tracksRegLiveness: true
     88 constants:       
     89 body:             |
     90   bb.0.entry:
     91     successors: %bb.1, %bb.4
     92     liveins: $rdi, $rbp, $r15, $r14, $r13, $r12, $rbx
     93   
     94     renamable $al = MOV8ri 1
     95     TEST8rr renamable $al, renamable $al, implicit-def $eflags
     96     JNE_1 %bb.4, implicit killed $eflags
     97   
     98   bb.1.for.cond.cleanup:
     99     successors: %bb.3, %bb.2
    100     liveins: $ecx, $rdi
    101   
    102     renamable $eax = MOV32rm $rsp, 1, $noreg, -16, $noreg 
    103     CMP32rm killed renamable $eax, $rip, 1, $noreg, $noreg, $noreg, implicit-def $eflags 
    104     JBE_1 %bb.3, implicit $eflags
    105   
    106   bb.2:
    107     successors: %bb.3
    108     liveins: $ebp, $ebx, $edx, $esi, $rdi, $r8d, $r9d, $r10d, $r11d, $r12d, $r13d, $r14d, $r15d
    109   
    110   bb.3.for.cond.cleanup:
    111     liveins: $rdi, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, $xmm9, $xmm13, $xmm14
    112     RETQ
    113   
    114   bb.4.for.body:
    115     successors: %bb.1, %bb.5
    116     liveins: $al, $rdi
    117   
    118     renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags
    119     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    120     JNE_1 %bb.1, implicit $eflags
    121   
    122   bb.5.for.body.1:
    123     successors: %bb.1, %bb.6
    124     liveins: $ecx, $rdi
    125   
    126     renamable $al = MOV8ri 1
    127     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    128     JNE_1 %bb.1, implicit $eflags
    129   
    130   bb.6.for.body.2:
    131     successors: %bb.1, %bb.7
    132     liveins: $ecx, $eflags, $rdi
    133   
    134     JNE_1 %bb.1, implicit $eflags
    135   
    136   bb.7.for.body.3:
    137     successors: %bb.1, %bb.8
    138     liveins: $ecx, $rdi
    139   
    140     renamable $al = MOV8ri 1
    141     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    142     JNE_1 %bb.1, implicit $eflags
    143   
    144   bb.8.for.body.4:
    145     successors: %bb.1, %bb.9
    146     liveins: $ecx, $eflags, $rdi
    147   
    148     JNE_1 %bb.1, implicit $eflags
    149   
    150   bb.9.for.body.5:
    151     successors: %bb.1, %bb.10
    152     liveins: $ecx, $rdi
    153   
    154     renamable $al = MOV8ri 1
    155     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    156     JNE_1 %bb.1, implicit $eflags
    157   
    158   bb.10.for.body.6:
    159     successors: %bb.1, %bb.11
    160     liveins: $ecx, $eflags, $rdi
    161   
    162     JNE_1 %bb.1, implicit $eflags
    163   
    164   bb.11.for.body.7:
    165     successors: %bb.1, %bb.12
    166     liveins: $ecx, $rdi
    167   
    168     renamable $al = MOV8ri 1
    169     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    170     JNE_1 %bb.1, implicit $eflags
    171   
    172   bb.12.for.body.8:
    173     successors: %bb.1, %bb.13
    174     liveins: $ecx, $eflags, $rdi
    175   
    176     JNE_1 %bb.1, implicit $eflags
    177   
    178   bb.13.for.body.9:
    179     successors: %bb.14, %bb.15
    180     liveins: $rdi
    181   
    182     renamable $al = MOV8ri 1
    183     TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
    184     JE_1 %bb.15, implicit $eflags
    185   
    186   bb.14:
    187     successors: %bb.1
    188     liveins: $rdi
    189   
    190     renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags
    191     JMP_1 %bb.1
    192   
    193   bb.15.for.body.10:
    194     successors: %bb.16, %bb.17
    195     liveins: $eflags, $rdi
    196   
    197     JE_1 %bb.17, implicit killed $eflags
    198   
    199   bb.16:
    200     successors: %bb.1
    201     liveins: $rdi
    202   
    203     JMP_1 %bb.1
    204   
    205   bb.17.for.body.11:
    206     successors: %bb.1
    207     liveins: $rdi
    208   
    209     dead renamable $al = MOV8rm $rsp, 1, $noreg, -121, $noreg 
    210     DBG_VALUE debug-use $al, debug-use $noreg, !16, !DIExpression(), debug-location !19
    211     renamable $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def dead $eflags
    212     JMP_1 %bb.1
    213 ...
    214