Index: test/NaCl/Bitcode/pnacl-bcdis/call.ll |
diff --git a/test/NaCl/Bitcode/pnacl-bcdis/call.ll b/test/NaCl/Bitcode/pnacl-bcdis/call.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..55f76677832be9f3b2335033b89e17edcb7d4ce8 |
--- /dev/null |
+++ b/test/NaCl/Bitcode/pnacl-bcdis/call.ll |
@@ -0,0 +1,90 @@ |
+; Test call instructions |
+ |
+; RUN: llvm-as < %s | pnacl-freeze | pnacl-bccompress --remove-abbreviations \ |
+; RUN: | pnacl-bcdis | FileCheck %s |
+ |
+; CHECK: {{.*}}| 3: <7, 32> | @t0 = i32; |
+; CHECK-NEXT: {{.*}}| 3: <2> | @t1 = void; |
+; CHECK-NEXT: {{.*}}| 3: <3> | @t2 = float; |
+ |
+ |
+; Test simple calls |
+define void @foo(i32 %p0) { |
+ |
+; CHECK: | | %b0: |
+ |
+ %v0 = call i32 @bar(i32 %p0, i32 1) |
+ |
+; CHECK-NEXT: {{.*}}| 3: <34, 0, 6, 2, 1> | %v0 = call i32 |
+; CHECK-NEXT: | | @f1(i32 %p0, i32 %c0); |
+ |
+ %v1 = call float @bam(i32 %p0) |
+ |
+; CHECK-NEXT: {{.*}}| 3: <34, 0, 6, 3> | %v1 = call float @f2(i32 %p0); |
+ |
+ call void @huh() |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <34, 0, 6> | call void @f3(); |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |
+ |
+define i32 @bar(i32 %p0, i32 %p1) { |
+ |
+; CHECK: | | %b0: |
+ |
+ %v0 = add i32 %p0, %p1 |
+ ret i32 %v0 |
+} |
+ |
+define float @bam(i32 %p0) { |
+ |
+; CHECK: | | %b0: |
+ |
+ %v0 = sitofp i32 %p0 to float |
+ ret float %v0 |
+} |
+ |
+define void @huh() { |
+ |
+; CHECK: | | %b0: |
+ |
+ ret void |
+} |
+ |
+ |
+; Test indirect calls |
+define void @IndirectTests(i32 %p0, i32 %p1) { |
+ |
+; CHECK: | | %b0: |
+ |
+ ; Simulates indirect call to @foo |
+ %v0 = inttoptr i32 %p0 to void (i32)* |
+ call void %v0(i32 %p1) |
+ |
+; CHECK-NEXT: {{.*}}| 3: <44, 0, 3, 1, 2> | call void %p0(i32 %p1); |
+ |
+ ; Simulates indirect call to @bar |
+ %v1 = inttoptr i32 %p0 to i32 (i32, i32)* |
+ %v2 = call i32 %v1(i32 %p1, i32 1) |
+ |
+; CHECK-NEXT: {{.*}}| 3: <44, 0, 3, 0, 2, 1> | %v0 = call i32 |
+; CHECK-NEXT: | | %p0(i32 %p1, i32 %c0); |
+ |
+ ; Simulates indirect call to @bam |
+ %v3 = inttoptr i32 %p0 to float (i32)* |
+ %v4 = call float %v3(i32 %p1) |
+ |
+; CHECK-NEXT: {{.*}}| 3: <44, 0, 4, 2, 3> | %v1 = call float %p0(i32 %p1); |
+ |
+ ; Simulates indirect call to @huh |
+ %v5 = inttoptr i32 %p0 to void ()* |
+ call void %v5() |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <44, 0, 5, 1> | call void %p0(); |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |
+ |