| Index: test/NaCl/Bitcode/forward-ref-decl.ll
|
| diff --git a/test/NaCl/Bitcode/forward-ref-decl.ll b/test/NaCl/Bitcode/forward-ref-decl.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ac02c850d72e335945e7ae462ca60e6d0921f5d4
|
| --- /dev/null
|
| +++ b/test/NaCl/Bitcode/forward-ref-decl.ll
|
| @@ -0,0 +1,59 @@
|
| +; RUN: llvm-as < %s | pnacl-freeze | pnacl-bcanalyzer -dump-records \
|
| +; RUN: | FileCheck %s
|
| +
|
| +; Test that FORWARDTYPEREF declarations are emitted in the correct
|
| +; places. These are emitted for forward value references inside
|
| +; functions.
|
| +
|
| +define external void @_start(i32 %arg) {
|
| +; CHECK: <FUNCTION_BLOCK
|
| +
|
| + br label %bb1
|
| +; CHECK: <INST_BR
|
| +
|
| +bb2:
|
| + ; This instruction contains two forward references, because %x and
|
| + ; %y are defined later in the function.
|
| + add i32 %forward1, %forward2
|
| +; CHECK-NEXT: <FORWARDTYPEREF
|
| +; CHECK-NEXT: <FORWARDTYPEREF
|
| +; CHECK-NEXT: <INST_BINOP
|
| +
|
| + ; The FORWARDTYPEREF declaration should only be emitted once per
|
| + ; value, so the following references will not emit more of them.
|
| + add i32 %forward1, %forward2
|
| +; CHECK-NEXT: <INST_BINOP
|
| +
|
| + ; Test another case of a forward reference.
|
| + call void @_start(i32 %forward3)
|
| +; CHECK-NEXT: <FORWARDTYPEREF
|
| +; CHECK-NEXT: <INST_CALL
|
| +
|
| + ; Test that FORWARDTYPEREF is generated for phi nodes (since phi
|
| + ; node operands are a special case in the writer).
|
| + br label %bb3
|
| +bb3:
|
| + phi i32 [ %forward4, %bb2 ]
|
| +; CHECK-NEXT: <INST_BR
|
| +; CHECK-NEXT: <FORWARDTYPEREF
|
| +; CHECK-NEXT: <INST_PHI
|
| +
|
| + ; Test that FORWARDTYPEREF is generated for switch instructions
|
| + ; (since switch condition operands are a special case in the
|
| + ; writer).
|
| + switch i32 %forward5, label %bb4 [i32 0, label %bb4]
|
| +bb4:
|
| +; CHECK-NEXT: <FORWARDTYPEREF
|
| +; CHECK-NEXT: <INST_SWITCH
|
| +
|
| + ret void
|
| +; CHECK-NEXT: <INST_RET/>
|
| +
|
| +bb1:
|
| + %forward1 = add i32 %arg, 100
|
| + %forward2 = add i32 %arg, 200
|
| + %forward3 = add i32 %arg, 300
|
| + %forward4 = add i32 %arg, 400
|
| + %forward5 = add i32 %arg, 500
|
| + br label %bb2
|
| +}
|
|
|