Index: test/NaCl/Bitcode/pnacl-bcdis/select.ll |
diff --git a/test/NaCl/Bitcode/pnacl-bcdis/select.ll b/test/NaCl/Bitcode/pnacl-bcdis/select.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c77d3ba3098256bb25827050fb18bb8b9e09bdf |
--- /dev/null |
+++ b/test/NaCl/Bitcode/pnacl-bcdis/select.ll |
@@ -0,0 +1,118 @@ |
+; Test the select instruction. |
+ |
+; RUN: llvm-as < %s | pnacl-freeze | pnacl-bccompress --remove-abbreviations \ |
+; RUN: | pnacl-bcdis | FileCheck %s |
+ |
+; Test selecting integer types. |
+define void @TestIntTypes() { |
+ |
+; CHECK: | | %b0: |
+ |
+ %v0 = select i1 0, i1 0, i1 0 |
+ %v1 = select i1 %v0, i8 1, i8 1 |
+ %v2 = select i1 %v0, i16 2, i16 2 |
+ %v3 = select i1 %v0, i32 3, i32 3 |
+ %v4 = select i1 %v0, i64 4, i64 4 |
+ |
+; CHECK-NEXT: {{.*}}| 3: <29, 5, 5, 5> | %v0 = select i1 %c0, i1 %c0, |
+; CHECK-NEXT: | | i1 %c0; |
+; CHECK-NEXT: {{.*}}| 3: <29, 4, 4, 1> | %v1 = select i1 %v0, i8 %c2, |
+; CHECK-NEXT: | | i8 %c2; |
+; CHECK-NEXT: {{.*}}| 3: <29, 4, 4, 2> | %v2 = select i1 %v0, i16 %c3, |
+; CHECK-NEXT: | | i16 %c3; |
+; CHECK-NEXT: {{.*}}| 3: <29, 7, 7, 3> | %v3 = select i1 %v0, i32 %c1, |
+; CHECK-NEXT: | | i32 %c1; |
+; CHECK-NEXT: {{.*}}| 3: <29, 5, 5, 4> | %v4 = select i1 %v0, i64 %c4, |
+; CHECK-NEXT: | | i64 %c4; |
+ |
+ ; Verify computed results of right size. |
+ %v5 = and i1 %v0, %v0 |
+ %v6 = add i8 %v1, %v1 |
+ %v7 = add i16 %v2, %v2 |
+ %v8 = add i32 %v3, %v3 |
+ %v9 = add i64 %v4, %v4 |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <2, 5, 5, 10> | %v5 = and i1 %v0, %v0; |
+; CHECK-NEXT: {{.*}}| 3: <2, 5, 5, 0> | %v6 = add i8 %v1, %v1; |
+; CHECK-NEXT: {{.*}}| 3: <2, 5, 5, 0> | %v7 = add i16 %v2, %v2; |
+; CHECK-NEXT: {{.*}}| 3: <2, 5, 5, 0> | %v8 = add i32 %v3, %v3; |
+; CHECK-NEXT: {{.*}}| 3: <2, 5, 5, 0> | %v9 = add i64 %v4, %v4; |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |
+ |
+; Test selecting floating types. |
+define void @TestFloatTypes(float %p0, double %p1) { |
+ |
+; CHECK: | | %b0: |
+ |
+ %v0 = select i1 0, float %p0, float %p0 |
+ %v1 = select i1 0, double %p1, double %p1 |
+ |
+; CHECK-NEXT: {{.*}}| 3: <29, 3, 3, 1> | %v0 = select i1 %c0, float %p0, |
+; CHECK-NEXT: | | float %p0; |
+; CHECK-NEXT: {{.*}}| 3: <29, 3, 3, 2> | %v1 = select i1 %c0, double %p1, |
+; CHECK-NEXT: | | double %p1; |
+ |
+ ; Verify computed results are of right size. |
+ %v2 = fadd float %v0, %v0 |
+ %v3 = fadd double %v1, %v1 |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <2, 2, 2, 0> | %v2 = fadd float %v0, %v0; |
+; CHECK-NEXT: {{.*}}| 3: <2, 2, 2, 0> | %v3 = fadd double %v1, %v1; |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |
+ |
+; Test select on integer vectors |
+define void @TestVecIntTypes(i32 %p0, <16 x i8> %p1, <8 x i16> %p2, <4 x i32> %p3) { |
+ |
+ %v0 = trunc i32 %p0 to i1; |
+ %v1 = select i1 %v0, <16 x i8> %p1, <16 x i8> %p1 |
+ %v2 = select i1 %v0, <8 x i16> %p2, <8 x i16> %p2 |
+ %v3 = select i1 %v0, <4 x i32> %p3, <4 x i32> %p3 |
+ |
+; CHECK: {{.*}}| {{.*}} | {{.*}} trunc |
+ |
+; CHECK-NEXT: {{.*}}| 3: <29, 4, 4, 1> | %v1 = select i1 %v0, <16 x i8> %p1, |
+; CHECK-NEXT: | | <16 x i8> %p1; |
+; CHECK-NEXT: {{.*}}| 3: <29, 4, 4, 2> | %v2 = select i1 %v0, <8 x i16> %p2, |
+; CHECK-NEXT: | | <8 x i16> %p2; |
+; CHECK-NEXT: {{.*}}| 3: <29, 4, 4, 3> | %v3 = select i1 %v0, <4 x i32> %p3, |
+; CHECK-NEXT: | | <4 x i32> %p3; |
+ |
+ ; Verify computed results are of right type. |
+ %v4 = and <16 x i8> %v1, %v1 |
+ %v5 = add <8 x i16> %v2, %v2 |
+ %v6 = add <4 x i32> %v3, %v3 |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <2, 3, 3, 10> | %v4 = and <16 x i8> %v1, %v1; |
+; CHECK-NEXT: {{.*}}| 3: <2, 3, 3, 0> | %v5 = add <8 x i16> %v2, %v2; |
+; CHECK-NEXT: {{.*}}| 3: <2, 3, 3, 0> | %v6 = add <4 x i32> %v3, %v3; |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |
+ |
+ |
+; Test select on floating vectors |
+define void @TestVecFloatTypes(i32 %p0, <4 x float> %p1) { |
+ |
+ %v0 = trunc i32 %p0 to i1; |
+ %v1 = select i1 %v0, <4 x float> %p1, <4 x float> %p1 |
+ |
+; CHECK: {{.*}}| {{.*}} | {{.*}} trunc |
+; CHECK-NEXT: {{.*}}| 3: <29, 2, 2, 1> | %v1 = select i1 %v0, |
+; CHECK-NEXT: | | <4 x float> %p1, |
+; CHECK-NEXT: | | <4 x float> %p1; |
+ |
+ ; Verify computed results are of right type. |
+ %v2 = fadd <4 x float> %v1, %v1 |
+ ret void |
+ |
+; CHECK-NEXT: {{.*}}| 3: <2, 1, 1, 0> | %v2 = fadd <4 x float> %v1, %v1; |
+; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
+ |
+} |