OLD | NEW |
(Empty) | |
| 1 ; Tests insertelement and extractelement vector instructions report |
| 2 ; errors when malformed. Note: We can only test literal indexing since |
| 3 ; llvm-as will not allow other bad forms of these instructions. |
| 4 |
| 5 ; RUN: llvm-as < %s | pnacl-freeze \ |
| 6 ; RUN: | not %llvm2ice -notranslate -build-on-read \ |
| 7 ; RUN: -allow-pnacl-reader-error-recovery | FileCheck %s |
| 8 |
| 9 define void @ExtractV4xi1(<4 x i1> %v, i32 %i) { |
| 10 %e0 = extractelement <4 x i1> %v, i32 %i |
| 11 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 12 %e1 = extractelement <4 x i1> %v, i32 4 |
| 13 ; CHECK: Error: {{.*}} not in range |
| 14 %e2 = extractelement <4 x i1> %v, i32 9 |
| 15 ; CHECK: Error: {{.*}} not in range |
| 16 ret void |
| 17 } |
| 18 |
| 19 define void @ExtractV8xi1(<8 x i1> %v, i32 %i) { |
| 20 %e0 = extractelement <8 x i1> %v, i32 %i |
| 21 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 22 %e1 = extractelement <8 x i1> %v, i32 8; |
| 23 ; CHECK: Error: {{.*}} not in range |
| 24 %e2 = extractelement <8 x i1> %v, i32 9; |
| 25 ; CHECK: Error: {{.*}} not in range |
| 26 ret void |
| 27 } |
| 28 |
| 29 define void @ExtractV16xi1(<16 x i1> %v, i32 %i) { |
| 30 %e0 = extractelement <16 x i1> %v, i32 %i |
| 31 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 32 %e1 = extractelement <16 x i1> %v, i32 16 |
| 33 ; CHECK: Error: {{.*}} not in range |
| 34 %e2 = extractelement <16 x i1> %v, i32 24 |
| 35 ; CHECK: Error: {{.*}} not in range |
| 36 ret void |
| 37 } |
| 38 |
| 39 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { |
| 40 %e0 = extractelement <16 x i8> %v, i32 %i |
| 41 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 42 %e1 = extractelement <16 x i8> %v, i32 16 |
| 43 ; CHECK: Error: {{.*}} not in range |
| 44 %e2 = extractelement <16 x i8> %v, i32 71 |
| 45 ; CHECK: Error: {{.*}} not in range |
| 46 ret void |
| 47 } |
| 48 |
| 49 define void @ExtractV8xi16(<8 x i16> %v, i32 %i) { |
| 50 %e0 = extractelement <8 x i16> %v, i32 %i |
| 51 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 52 %e1 = extractelement <8 x i16> %v, i32 8 |
| 53 ; CHECK: Error: {{.*}} not in range |
| 54 %e2 = extractelement <8 x i16> %v, i32 15 |
| 55 ; CHECK: Error: {{.*}} not in range |
| 56 ret void |
| 57 } |
| 58 |
| 59 define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) { |
| 60 %e0 = extractelement <4 x i32> %v, i32 %i |
| 61 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 62 %e1 = extractelement <4 x i32> %v, i32 4 |
| 63 ; CHECK: Error: {{.*}} not in range |
| 64 %e2 = extractelement <4 x i32> %v, i32 17 |
| 65 ; CHECK: Error: {{.*}} not in range |
| 66 ret i32 %e0 |
| 67 } |
| 68 |
| 69 define float @ExtractV4xfloat(<4 x float> %v, i32 %i) { |
| 70 %e0 = extractelement <4 x float> %v, i32 %i |
| 71 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 72 %e1 = extractelement <4 x float> %v, i32 4 |
| 73 ; CHECK: Error: {{.*}} not in range |
| 74 %e2 = extractelement <4 x float> %v, i32 4 |
| 75 ; CHECK: Error: {{.*}} not in range |
| 76 ret float %e2 |
| 77 } |
| 78 |
| 79 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %i) { |
| 80 %r0 = insertelement <4 x i1> %v, i1 1, i32 %i |
| 81 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 82 %r1 = insertelement <4 x i1> %v, i1 1, i32 4 |
| 83 ; CHECK: Error: {{.*}} not in range |
| 84 %r2 = insertelement <4 x i1> %v, i1 1, i32 7 |
| 85 ; CHECK: Error: {{.*}} not in range |
| 86 ret <4 x i1> %r2 |
| 87 } |
| 88 |
| 89 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %i) { |
| 90 %r0 = insertelement <8 x i1> %v, i1 0, i32 %i |
| 91 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 92 %r1 = insertelement <8 x i1> %v, i1 0, i32 8 |
| 93 ; CHECK: Error: {{.*}} not in range |
| 94 %r2 = insertelement <8 x i1> %v, i1 0, i32 88 |
| 95 ; CHECK: Error: {{.*}} not in range |
| 96 ret <8 x i1> %r2 |
| 97 } |
| 98 |
| 99 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %i) { |
| 100 %r = insertelement <16 x i1> %v, i1 1, i32 %i |
| 101 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 102 ret <16 x i1> %r |
| 103 %r1 = insertelement <16 x i1> %v, i1 1, i32 16 |
| 104 ; CHECK: Error: {{.*}} not in range |
| 105 %r2 = insertelement <16 x i1> %v, i1 1, i32 31 |
| 106 ; CHECK: Error: {{.*}} not in range |
| 107 ret <16 x i1> %r2 |
| 108 } |
| 109 |
| 110 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %i) { |
| 111 %r0 = insertelement <16 x i8> %v, i8 34, i32 %i |
| 112 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 113 %r1 = insertelement <16 x i8> %v, i8 34, i32 16 |
| 114 ; CHECK: Error: {{.*}} not in range |
| 115 %r2 = insertelement <16 x i8> %v, i8 34, i32 19 |
| 116 ; CHECK: Error: {{.*}} not in range |
| 117 ret <16 x i8> %r0 |
| 118 } |
| 119 |
| 120 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %i) { |
| 121 %r0 = insertelement <8 x i16> %v, i16 289, i32 %i |
| 122 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 123 %r1 = insertelement <8 x i16> %v, i16 289, i32 8 |
| 124 ; CHECK: Error: {{.*}} not in range |
| 125 %r2 = insertelement <8 x i16> %v, i16 289, i32 19 |
| 126 ; CHECK: Error: {{.*}} not in range |
| 127 ret <8 x i16> %r1 |
| 128 } |
| 129 |
| 130 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %i) { |
| 131 %r0 = insertelement <4 x i32> %v, i32 54545454, i32 %i |
| 132 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 133 %r1 = insertelement <4 x i32> %v, i32 54545454, i32 4 |
| 134 ; CHECK: Error: {{.*}} not in range |
| 135 %r2 = insertelement <4 x i32> %v, i32 54545454, i32 9 |
| 136 ; CHECK: Error: {{.*}} not in range |
| 137 ret <4 x i32> %r2 |
| 138 } |
| 139 |
| 140 define <4 x float> @InsertV4xfloat(<4 x float> %v, i32 %i) { |
| 141 %r0 = insertelement <4 x float> %v, float 3.0, i32 %i |
| 142 ; CHECK: Error: {{.*}} not {{.*}} constant |
| 143 %r1 = insertelement <4 x float> %v, float 3.0, i32 4 |
| 144 ; CHECK: Error: {{.*}} not in range |
| 145 %r2 = insertelement <4 x float> %v, float 3.0, i32 44 |
| 146 ; CHECK: Error: {{.*}} not in range |
| 147 ret <4 x float> %r2 |
| 148 } |
OLD | NEW |