Chromium Code Reviews| 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 |