Home | History | Annotate | Download | only in reader_tests
      1 ; Test use forward type references in function blocks.
      2 
      3 ; RUN: %p2i -i %s --insts | FileCheck %s
      4 ; RUN: llvm-as < %s | pnacl-freeze | pnacl-bcdis -no-records \
      5 ; RUN:              | FileCheck --check-prefix=DUMP %s
      6 ; RUN:   %p2i -i %s --args -notranslate -timing | \
      7 ; RUN:   FileCheck --check-prefix=NOIR %s
      8 
      9 define internal void @LoopCarriedDep() {
     10 b0:
     11   %v0 = add i32 1, 2
     12   br label %b1
     13 b1:
     14   %v1 = phi i32 [%v0, %b0], [%v2, %b1]
     15   %v2 = add i32 %v1, 1
     16   br label %b1
     17 }
     18 
     19 ; CHECK:      define internal void @LoopCarriedDep() {
     20 ; CHECK-NEXT: b0:
     21 ; CHECK-NEXT:   %v0 = add i32 1, 2
     22 ; CHECK-NEXT:   br label %b1
     23 ; CHECK-NEXT: b1:
     24 ; CHECK-NEXT:   %v1 = phi i32 [ %v0, %b0 ], [ %v2, %b1 ]
     25 ; CHECK-NEXT:   %v2 = add i32 %v1, 1
     26 ; CHECK-NEXT:   br label %b1
     27 ; CHECK-NEXT: }
     28 
     29 ; Snippet of bitcode objdump with forward type reference (see "declare").
     30 ; DUMP:        function void @f0() {  // BlockID = 12
     31 ; DUMP-NEXT:     blocks 2;
     32 ; DUMP-NEXT:     constants {  // BlockID = 11
     33 ; DUMP-NEXT:       i32: <@a0>
     34 ; DUMP-NEXT:         %c0 = i32 1; <@a1>
     35 ; DUMP-NEXT:         %c1 = i32 2; <@a1>
     36 ; DUMP-NEXT:       }
     37 ; DUMP-NEXT:   %b0:
     38 ; DUMP-NEXT:     %v0 = add i32 %c0, %c1; <@a1>
     39 ; DUMP-NEXT:     br label %b1;
     40 ; DUMP-NEXT:   %b1:
     41 ; DUMP-NEXT:     declare i32 %v2; <@a6>
     42 ; DUMP-NEXT:     %v1 = phi i32 [%v0, %b0], [%v2, %b1];
     43 ; DUMP-NEXT:     %v2 = add i32 %v1, %c0; <@a1>
     44 ; DUMP-NEXT:     br label %b1;
     45 ; DUMP-NEXT:   }
     46 
     47 define internal void @BackBranch(i32 %p0) {
     48 b0:
     49   br label %b4
     50 b1:
     51   %v0 = add i32 %p0, %v3
     52   br label %b6
     53 b2:
     54   %v1 = add i32 %p0, %v4
     55   br label %b6
     56 b3:
     57   %v2 = add i32 %p0, %v3 ; No forward declare, already done!
     58   br label %b6
     59 b4:
     60   %v3 = add i32 %p0, %p0
     61   br i1 1, label %b1, label %b5
     62 b5:
     63   %v4 = add i32 %v3, %p0
     64   br i1 1, label %b2, label %b3
     65 b6:
     66   ret void
     67 }
     68 
     69 ; CHECK:      define internal void @BackBranch(i32 %p0) {
     70 ; CHECK-NEXT: b0:
     71 ; CHECK-NEXT:   br label %b4
     72 ; CHECK-NEXT: b1:
     73 ; CHECK-NEXT:   %v0 = add i32 %p0, %v3
     74 ; CHECK-NEXT:   br label %b6
     75 ; CHECK-NEXT: b4:
     76 ; CHECK-NEXT:   %v3 = add i32 %p0, %p0
     77 ; CHECK-NEXT:   br label %b1
     78 ; CHECK-NEXT: b6:
     79 ; CHECK-NEXT:   ret void
     80 ; CHECK-NEXT: }
     81 
     82 ; Snippet of bitcode objdump with forward type references (see "declare").
     83 ; DUMP:        function void @f1(i32 %p0) {  // BlockID = 12
     84 ; DUMP-NEXT:     blocks 7;
     85 ; DUMP-NEXT:     constants {  // BlockID = 11
     86 ; DUMP-NEXT:       i1: <@a0>
     87 ; DUMP-NEXT:         %c0 = i1 1; <@a1>
     88 ; DUMP-NEXT:       }
     89 ; DUMP-NEXT:   %b0:
     90 ; DUMP-NEXT:     br label %b4;
     91 ; DUMP-NEXT:   %b1:
     92 ; DUMP-NEXT:     declare i32 %v3; <@a6>
     93 ; DUMP-NEXT:     %v0 = add i32 %p0, %v3; <@a1>
     94 ; DUMP-NEXT:     br label %b6;
     95 ; DUMP-NEXT:   %b2:
     96 ; DUMP-NEXT:     declare i32 %v4; <@a6>
     97 ; DUMP-NEXT:     %v1 = add i32 %p0, %v4; <@a1>
     98 ; DUMP-NEXT:     br label %b6;
     99 ; DUMP-NEXT:   %b3:
    100 ; DUMP-NEXT:     %v2 = add i32 %p0, %v3; <@a1>
    101 ; DUMP-NEXT:     br label %b6;
    102 ; DUMP-NEXT:   %b4:
    103 ; DUMP-NEXT:     %v3 = add i32 %p0, %p0; <@a1>
    104 ; DUMP-NEXT:     br i1 %c0, label %b1, label %b5;
    105 ; DUMP-NEXT:   %b5:
    106 ; DUMP-NEXT:     %v4 = add i32 %v3, %p0; <@a1>
    107 ; DUMP-NEXT:     br i1 %c0, label %b2, label %b3;
    108 ; DUMP-NEXT:   %b6:
    109 ; DUMP-NEXT:     ret void; <@a3>
    110 ; DUMP-NEXT:   }
    111 
    112 ; NOIR: Total across all functions
    113