Index: test/NaCl/PNaClABI/abi-i1-operations.ll |
diff --git a/test/NaCl/PNaClABI/abi-i1-operations.ll b/test/NaCl/PNaClABI/abi-i1-operations.ll |
index 18fdab6930ac4d23be498905b99330da17eae1ce..21707298e325d6b1d0308503550e31d4bd483a09 100644 |
--- a/test/NaCl/PNaClABI/abi-i1-operations.ll |
+++ b/test/NaCl/PNaClABI/abi-i1-operations.ll |
@@ -11,6 +11,18 @@ define internal void @allowed_cases() { |
%and = and i1 0, 0 |
%or = or i1 0, 0 |
%xor = xor i1 0, 0 |
+ |
+ %v4and = and <4 x i1> undef, undef |
+ %v4or = or <4 x i1> undef, undef |
+ %v4xor = xor <4 x i1> undef, undef |
+ |
+ %v8and = and <8 x i1> undef, undef |
+ %v8or = or <8 x i1> undef, undef |
+ %v8xor = xor <8 x i1> undef, undef |
+ |
+ %v16and = and <16 x i1> undef, undef |
+ %v16or = or <16 x i1> undef, undef |
+ %v16xor = xor <16 x i1> undef, undef |
ret void |
} |
; CHECK-NOT: disallowed |
@@ -20,37 +32,113 @@ define internal void @rejected_cases(i32 %ptr) { |
; Loads and stores of i1 are disallowed. This is done by rejecting |
; i1* as a pointer type. |
%ptr.p = inttoptr i32 %ptr to i1* |
-; CHECK: disallowed: bad result type: %ptr.p = inttoptr |
+; CHECK: disallowed: bad result type: i1* %ptr.p = inttoptr |
+ %vptr.p = inttoptr i32 %ptr to <4 x i1>* |
+; CHECK: disallowed: bad result type: <4 x i1>* %vptr.p = inttoptr |
load i1* %ptr.p, align 1 |
; CHECK-NEXT: disallowed: bad pointer: {{.*}} load i1* |
+ load <4 x i1>* %vptr.p, align 4 |
+; CHECK-NEXT: disallowed: bad pointer: {{.*}} load <4 x i1>* |
; i1 arithmetic is of dubious usefulness, so it is rejected. |
add i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} add |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} add i1 |
sub i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sub |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sub i1 |
mul i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} mul |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} mul i1 |
udiv i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} udiv |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} udiv i1 |
sdiv i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sdiv |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sdiv i1 |
urem i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} urem |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} urem i1 |
srem i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} srem |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} srem i1 |
shl i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} shl |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} shl i1 |
lshr i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} lshr |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} lshr i1 |
ashr i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} ashr |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} ashr i1 |
+ add <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} add <4 x i1> |
+ sub <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sub <4 x i1> |
+ mul <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} mul <4 x i1> |
+ udiv <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} udiv <4 x i1> |
+ sdiv <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sdiv <4 x i1> |
+ urem <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} urem <4 x i1> |
+ srem <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} srem <4 x i1> |
+ shl <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} shl <4 x i1> |
+ lshr <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} lshr <4 x i1> |
+ ashr <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} ashr <4 x i1> |
+ add <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} add <8 x i1> |
+ sub <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sub <8 x i1> |
+ mul <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} mul <8 x i1> |
+ udiv <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} udiv <8 x i1> |
+ sdiv <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sdiv <8 x i1> |
+ urem <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} urem <8 x i1> |
+ srem <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} srem <8 x i1> |
+ shl <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} shl <8 x i1> |
+ lshr <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} lshr <8 x i1> |
+ ashr <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} ashr <8 x i1> |
+ add <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} add <16 x i1> |
+ sub <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sub <16 x i1> |
+ mul <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} mul <16 x i1> |
+ udiv <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} udiv <16 x i1> |
+ sdiv <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} sdiv <16 x i1> |
+ urem <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} urem <16 x i1> |
+ srem <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} srem <16 x i1> |
+ shl <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} shl <16 x i1> |
+ lshr <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} lshr <16 x i1> |
+ ashr <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} ashr <16 x i1> |
; The same applies to i1 comparisons. |
icmp eq i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} icmp eq |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} icmp eq i1 |
icmp ult i1 0, 0 |
-; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} icmp ult |
+; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} icmp ult i1 |
+ icmp eq <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp eq <4 x i1> |
+ icmp ult <4 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp ult <4 x i1> |
+ icmp eq <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp eq <8 x i1> |
+ icmp ult <8 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp ult <8 x i1> |
+ icmp eq <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp eq <16 x i1> |
+ icmp ult <16 x i1> undef, undef |
+; CHECK-NEXT: disallowed: arithmetic on vector of i1: {{.*}} icmp ult <16 x i1> |
; There should be no implicit zero-extension in alloca. |
alloca i8, i1 1 |