OLD | NEW |
---|---|
1 ; RUN: not pnacl-abicheck < %s | FileCheck %s | 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s |
2 | 2 |
3 ; Most arithmetic operations are not very useful on i1, so use of i1 | 3 ; Most arithmetic operations are not very useful on i1, so use of i1 |
4 ; is restricted to a subset of operations. | 4 ; is restricted to a subset of operations. |
5 | 5 |
6 | 6 |
7 ; i1 is allowed on these bitwise operations because: | 7 ; i1 is allowed on these bitwise operations because: |
8 ; * These operations never overflow. | 8 ; * These operations never overflow. |
9 ; * They do get generated in practice for combining conditions. | 9 ; * They do get generated in practice for combining conditions. |
10 define internal void @allowed_cases() { | 10 define internal void @allowed_cases() { |
(...skipping 15 matching lines...) Expand all Loading... | |
26 ret void | 26 ret void |
27 } | 27 } |
28 ; CHECK-NOT: disallowed | 28 ; CHECK-NOT: disallowed |
29 | 29 |
30 | 30 |
31 define internal void @rejected_cases(i32 %ptr) { | 31 define internal void @rejected_cases(i32 %ptr) { |
32 ; Loads and stores of i1 are disallowed. This is done by rejecting | 32 ; Loads and stores of i1 are disallowed. This is done by rejecting |
33 ; i1* as a pointer type. | 33 ; i1* as a pointer type. |
34 %ptr.p = inttoptr i32 %ptr to i1* | 34 %ptr.p = inttoptr i32 %ptr to i1* |
35 ; CHECK: disallowed: bad result type: i1* %ptr.p = inttoptr | 35 ; CHECK: disallowed: bad result type: i1* %ptr.p = inttoptr |
36 %vptr.p = inttoptr i32 %ptr to <4 x i1>* | |
37 ; CHECK: disallowed: bad result type: <4 x i1>* %vptr.p = inttoptr | |
jvoung (off chromium)
2014/06/10 16:28:32
I thought <N x i1> pointer were still disallowed?
JF
2014/06/10 18:26:29
Good catch. I started off by removing it, then for
| |
38 load i1* %ptr.p, align 1 | 36 load i1* %ptr.p, align 1 |
39 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load i1* | 37 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load i1* |
40 load <4 x i1>* %vptr.p, align 4 | |
41 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load <4 x i1>* | |
42 | 38 |
43 ; i1 arithmetic is of dubious usefulness, so it is rejected. | 39 ; i1 arithmetic is of dubious usefulness, so it is rejected. |
44 add i1 0, 0 | 40 add i1 0, 0 |
45 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} add i1 | 41 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} add i1 |
46 sub i1 0, 0 | 42 sub i1 0, 0 |
47 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sub i1 | 43 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} sub i1 |
48 mul i1 0, 0 | 44 mul i1 0, 0 |
49 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} mul i1 | 45 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} mul i1 |
50 udiv i1 0, 0 | 46 udiv i1 0, 0 |
51 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} udiv i1 | 47 ; CHECK-NEXT: disallowed: arithmetic on i1: {{.*}} udiv i1 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
145 ; CHECK-NEXT: disallowed: alloca array size is not i32 | 141 ; CHECK-NEXT: disallowed: alloca array size is not i32 |
146 | 142 |
147 ; Switch on i1 is not useful. "br" should be used instead. | 143 ; Switch on i1 is not useful. "br" should be used instead. |
148 switch i1 0, label %next [i1 0, label %next] | 144 switch i1 0, label %next [i1 0, label %next] |
149 ; CHECK-NEXT: disallowed: switch on i1 | 145 ; CHECK-NEXT: disallowed: switch on i1 |
150 next: | 146 next: |
151 | 147 |
152 ret void | 148 ret void |
153 } | 149 } |
154 ; CHECK-NOT: disallowed | 150 ; CHECK-NOT: disallowed |
OLD | NEW |