| OLD | NEW |
| 1 ; Tests insertelement and extractelement vector instructions. | 1 ; Tests insertelement and extractelement vector instructions. |
| 2 | 2 |
| 3 ; RUN: %p2i -i %s --insts | FileCheck %s | 3 ; RUN: %p2i -i %s --insts | FileCheck %s |
| 4 | 4 ; RUN: %l2i -i %s --insts | %ifl FileCheck %s |
| 5 ; TODO(kschimpf): Change index arguments to valid constant indices once | 5 ; RUN: %lc2i -i %s --insts | %iflc FileCheck %s |
| 6 ; we can handle constants. | 6 |
| 7 | 7 define void @ExtractV4xi1(<4 x i1> %v) { |
| 8 define void @ExtractV4xi1(<4 x i1> %v, i32 %i) { | 8 entry: |
| 9 entry: | 9 %e0 = extractelement <4 x i1> %v, i32 0 |
| 10 %e = extractelement <4 x i1> %v, i32 %i | 10 %e1 = extractelement <4 x i1> %v, i32 1 |
| 11 ret void | 11 %e2 = extractelement <4 x i1> %v, i32 2 |
| 12 } | 12 %e3 = extractelement <4 x i1> %v, i32 3 |
| 13 | 13 ret void |
| 14 ; CHECK: define void @ExtractV4xi1(<4 x i1> %v, i32 %i) { | 14 } |
| 15 ; CHECK-NEXT: entry: | 15 |
| 16 ; CHECK-NEXT: %e = extractelement <4 x i1> %v, i32 %i | 16 ; CHECK: define void @ExtractV4xi1(<4 x i1> %v) { |
| 17 ; CHECK-NEXT: ret void | 17 ; CHECK-NEXT: entry: |
| 18 ; CHECK-NEXT: } | 18 ; CHECK-NEXT: %e0 = extractelement <4 x i1> %v, i32 0 |
| 19 | 19 ; CHECK-NEXT: %e1 = extractelement <4 x i1> %v, i32 1 |
| 20 define void @ExtractV8xi1(<8 x i1> %v, i32 %i) { | 20 ; CHECK-NEXT: %e2 = extractelement <4 x i1> %v, i32 2 |
| 21 entry: | 21 ; CHECK-NEXT: %e3 = extractelement <4 x i1> %v, i32 3 |
| 22 %e = extractelement <8 x i1> %v, i32 %i | 22 ; CHECK-NEXT: ret void |
| 23 ret void | 23 ; CHECK-NEXT: } |
| 24 } | 24 |
| 25 | 25 define void @ExtractV8xi1(<8 x i1> %v) { |
| 26 ; CHECK-NEXT: define void @ExtractV8xi1(<8 x i1> %v, i32 %i) { | 26 entry: |
| 27 ; CHECK-NEXT: entry: | 27 %e0 = extractelement <8 x i1> %v, i32 0 |
| 28 ; CHECK-NEXT: %e = extractelement <8 x i1> %v, i32 %i | 28 %e1 = extractelement <8 x i1> %v, i32 1 |
| 29 ; CHECK-NEXT: ret void | 29 %e2 = extractelement <8 x i1> %v, i32 2 |
| 30 ; CHECK-NEXT: } | 30 %e3 = extractelement <8 x i1> %v, i32 3 |
| 31 | 31 %e4 = extractelement <8 x i1> %v, i32 4 |
| 32 define void @ExtractV16xi1(<16 x i1> %v, i32 %i) { | 32 %e5 = extractelement <8 x i1> %v, i32 5 |
| 33 entry: | 33 %e6 = extractelement <8 x i1> %v, i32 6 |
| 34 %e = extractelement <16 x i1> %v, i32 %i | 34 %e7 = extractelement <8 x i1> %v, i32 7 |
| 35 ret void | 35 ret void |
| 36 } | 36 } |
| 37 | 37 |
| 38 ; CHECK-NEXT: define void @ExtractV16xi1(<16 x i1> %v, i32 %i) { | 38 ; CHECK-NEXT: define void @ExtractV8xi1(<8 x i1> %v) { |
| 39 ; CHECK-NEXT: entry: | 39 ; CHECK-NEXT: entry: |
| 40 ; CHECK-NEXT: %e = extractelement <16 x i1> %v, i32 %i | 40 ; CHECK-NEXT: %e0 = extractelement <8 x i1> %v, i32 0 |
| 41 ; CHECK-NEXT: %e1 = extractelement <8 x i1> %v, i32 1 |
| 42 ; CHECK-NEXT: %e2 = extractelement <8 x i1> %v, i32 2 |
| 43 ; CHECK-NEXT: %e3 = extractelement <8 x i1> %v, i32 3 |
| 44 ; CHECK-NEXT: %e4 = extractelement <8 x i1> %v, i32 4 |
| 45 ; CHECK-NEXT: %e5 = extractelement <8 x i1> %v, i32 5 |
| 46 ; CHECK-NEXT: %e6 = extractelement <8 x i1> %v, i32 6 |
| 47 ; CHECK-NEXT: %e7 = extractelement <8 x i1> %v, i32 7 |
| 48 ; CHECK-NEXT: ret void |
| 49 ; CHECK-NEXT: } |
| 50 |
| 51 define void @ExtractV16xi1(<16 x i1> %v) { |
| 52 entry: |
| 53 %e0 = extractelement <16 x i1> %v, i32 0 |
| 54 %e1 = extractelement <16 x i1> %v, i32 1 |
| 55 %e2 = extractelement <16 x i1> %v, i32 2 |
| 56 %e3 = extractelement <16 x i1> %v, i32 3 |
| 57 %e4 = extractelement <16 x i1> %v, i32 4 |
| 58 %e5 = extractelement <16 x i1> %v, i32 5 |
| 59 %e6 = extractelement <16 x i1> %v, i32 6 |
| 60 %e7 = extractelement <16 x i1> %v, i32 7 |
| 61 %e8 = extractelement <16 x i1> %v, i32 8 |
| 62 %e9 = extractelement <16 x i1> %v, i32 9 |
| 63 %e10 = extractelement <16 x i1> %v, i32 10 |
| 64 %e11 = extractelement <16 x i1> %v, i32 11 |
| 65 %e12 = extractelement <16 x i1> %v, i32 12 |
| 66 %e13 = extractelement <16 x i1> %v, i32 13 |
| 67 %e14 = extractelement <16 x i1> %v, i32 14 |
| 68 %e15 = extractelement <16 x i1> %v, i32 15 |
| 69 ret void |
| 70 } |
| 71 |
| 72 ; CHECK-NEXT: define void @ExtractV16xi1(<16 x i1> %v) { |
| 73 ; CHECK-NEXT: entry: |
| 74 ; CHECK-NEXT: %e0 = extractelement <16 x i1> %v, i32 0 |
| 75 ; CHECK-NEXT: %e1 = extractelement <16 x i1> %v, i32 1 |
| 76 ; CHECK-NEXT: %e2 = extractelement <16 x i1> %v, i32 2 |
| 77 ; CHECK-NEXT: %e3 = extractelement <16 x i1> %v, i32 3 |
| 78 ; CHECK-NEXT: %e4 = extractelement <16 x i1> %v, i32 4 |
| 79 ; CHECK-NEXT: %e5 = extractelement <16 x i1> %v, i32 5 |
| 80 ; CHECK-NEXT: %e6 = extractelement <16 x i1> %v, i32 6 |
| 81 ; CHECK-NEXT: %e7 = extractelement <16 x i1> %v, i32 7 |
| 82 ; CHECK-NEXT: %e8 = extractelement <16 x i1> %v, i32 8 |
| 83 ; CHECK-NEXT: %e9 = extractelement <16 x i1> %v, i32 9 |
| 84 ; CHECK-NEXT: %e10 = extractelement <16 x i1> %v, i32 10 |
| 85 ; CHECK-NEXT: %e11 = extractelement <16 x i1> %v, i32 11 |
| 86 ; CHECK-NEXT: %e12 = extractelement <16 x i1> %v, i32 12 |
| 87 ; CHECK-NEXT: %e13 = extractelement <16 x i1> %v, i32 13 |
| 88 ; CHECK-NEXT: %e14 = extractelement <16 x i1> %v, i32 14 |
| 89 ; CHECK-NEXT: %e15 = extractelement <16 x i1> %v, i32 15 |
| 41 ; CHECK-NEXT: ret void | 90 ; CHECK-NEXT: ret void |
| 42 ; CHECK-NEXT: } | 91 ; CHECK-NEXT: } |
| 43 | 92 |
| 44 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { | 93 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { |
| 45 entry: | 94 entry: |
| 46 %e = extractelement <16 x i8> %v, i32 %i | 95 %e0 = extractelement <16 x i8> %v, i32 0 |
| 96 %e1 = extractelement <16 x i8> %v, i32 1 |
| 97 %e2 = extractelement <16 x i8> %v, i32 2 |
| 98 %e3 = extractelement <16 x i8> %v, i32 3 |
| 99 %e4 = extractelement <16 x i8> %v, i32 4 |
| 100 %e5 = extractelement <16 x i8> %v, i32 5 |
| 101 %e6 = extractelement <16 x i8> %v, i32 6 |
| 102 %e7 = extractelement <16 x i8> %v, i32 7 |
| 103 %e8 = extractelement <16 x i8> %v, i32 8 |
| 104 %e9 = extractelement <16 x i8> %v, i32 9 |
| 105 %e10 = extractelement <16 x i8> %v, i32 10 |
| 106 %e11 = extractelement <16 x i8> %v, i32 11 |
| 107 %e12 = extractelement <16 x i8> %v, i32 12 |
| 108 %e13 = extractelement <16 x i8> %v, i32 13 |
| 109 %e14 = extractelement <16 x i8> %v, i32 14 |
| 110 %e15 = extractelement <16 x i8> %v, i32 15 |
| 47 ret void | 111 ret void |
| 48 } | 112 } |
| 49 | 113 |
| 50 ; CHECK-NEXT: define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { | 114 ; CHECK-NEXT: define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { |
| 51 ; CHECK-NEXT: entry: | 115 ; CHECK-NEXT: entry: |
| 52 ; CHECK-NEXT: %e = extractelement <16 x i8> %v, i32 %i | 116 ; CHECK-NEXT: %e0 = extractelement <16 x i8> %v, i32 0 |
| 53 ; CHECK-NEXT: ret void | 117 ; CHECK-NEXT: %e1 = extractelement <16 x i8> %v, i32 1 |
| 54 ; CHECK-NEXT: } | 118 ; CHECK-NEXT: %e2 = extractelement <16 x i8> %v, i32 2 |
| 55 | 119 ; CHECK-NEXT: %e3 = extractelement <16 x i8> %v, i32 3 |
| 56 define void @ExtractV8xi16(<8 x i16> %v, i32 %i) { | 120 ; CHECK-NEXT: %e4 = extractelement <16 x i8> %v, i32 4 |
| 57 entry: | 121 ; CHECK-NEXT: %e5 = extractelement <16 x i8> %v, i32 5 |
| 58 %e = extractelement <8 x i16> %v, i32 %i | 122 ; CHECK-NEXT: %e6 = extractelement <16 x i8> %v, i32 6 |
| 59 ret void | 123 ; CHECK-NEXT: %e7 = extractelement <16 x i8> %v, i32 7 |
| 60 } | 124 ; CHECK-NEXT: %e8 = extractelement <16 x i8> %v, i32 8 |
| 61 | 125 ; CHECK-NEXT: %e9 = extractelement <16 x i8> %v, i32 9 |
| 62 ; CHECK-NEXT: define void @ExtractV8xi16(<8 x i16> %v, i32 %i) { | 126 ; CHECK-NEXT: %e10 = extractelement <16 x i8> %v, i32 10 |
| 63 ; CHECK-NEXT: entry: | 127 ; CHECK-NEXT: %e11 = extractelement <16 x i8> %v, i32 11 |
| 64 ; CHECK-NEXT: %e = extractelement <8 x i16> %v, i32 %i | 128 ; CHECK-NEXT: %e12 = extractelement <16 x i8> %v, i32 12 |
| 65 ; CHECK-NEXT: ret void | 129 ; CHECK-NEXT: %e13 = extractelement <16 x i8> %v, i32 13 |
| 66 ; CHECK-NEXT: } | 130 ; CHECK-NEXT: %e14 = extractelement <16 x i8> %v, i32 14 |
| 67 | 131 ; CHECK-NEXT: %e15 = extractelement <16 x i8> %v, i32 15 |
| 68 define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) { | 132 ; CHECK-NEXT: ret void |
| 69 entry: | 133 ; CHECK-NEXT: } |
| 70 %e = extractelement <4 x i32> %v, i32 %i | 134 |
| 71 ret i32 %e | 135 define void @ExtractV8xi16(<8 x i16> %v) { |
| 72 } | 136 entry: |
| 73 | 137 %e0 = extractelement <8 x i16> %v, i32 0 |
| 74 ; CHECK-NEXT: define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) { | 138 %e1 = extractelement <8 x i16> %v, i32 1 |
| 75 ; CHECK-NEXT: entry: | 139 %e2 = extractelement <8 x i16> %v, i32 2 |
| 76 ; CHECK-NEXT: %e = extractelement <4 x i32> %v, i32 %i | 140 %e3 = extractelement <8 x i16> %v, i32 3 |
| 77 ; CHECK-NEXT: ret i32 %e | 141 %e4 = extractelement <8 x i16> %v, i32 4 |
| 78 ; CHECK-NEXT: } | 142 %e5 = extractelement <8 x i16> %v, i32 5 |
| 79 | 143 %e6 = extractelement <8 x i16> %v, i32 6 |
| 80 define float @ExtractV4xfloat(<4 x float> %v, i32 %i) { | 144 %e7 = extractelement <8 x i16> %v, i32 7 |
| 81 entry: | 145 ret void |
| 82 %e = extractelement <4 x float> %v, i32 %i | 146 } |
| 83 ret float %e | 147 |
| 84 } | 148 ; CHECK-NEXT: define void @ExtractV8xi16(<8 x i16> %v) { |
| 85 | 149 ; CHECK-NEXT: entry: |
| 86 ; CHECK-NEXT: define float @ExtractV4xfloat(<4 x float> %v, i32 %i) { | 150 ; CHECK-NEXT: %e0 = extractelement <8 x i16> %v, i32 0 |
| 87 ; CHECK-NEXT: entry: | 151 ; CHECK-NEXT: %e1 = extractelement <8 x i16> %v, i32 1 |
| 88 ; CHECK-NEXT: %e = extractelement <4 x float> %v, i32 %i | 152 ; CHECK-NEXT: %e2 = extractelement <8 x i16> %v, i32 2 |
| 89 ; CHECK-NEXT: ret float %e | 153 ; CHECK-NEXT: %e3 = extractelement <8 x i16> %v, i32 3 |
| 90 ; CHECK-NEXT: } | 154 ; CHECK-NEXT: %e4 = extractelement <8 x i16> %v, i32 4 |
| 91 | 155 ; CHECK-NEXT: %e5 = extractelement <8 x i16> %v, i32 5 |
| 92 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %pe, i32 %i) { | 156 ; CHECK-NEXT: %e6 = extractelement <8 x i16> %v, i32 6 |
| 157 ; CHECK-NEXT: %e7 = extractelement <8 x i16> %v, i32 7 |
| 158 ; CHECK-NEXT: ret void |
| 159 ; CHECK-NEXT: } |
| 160 |
| 161 define i32 @ExtractV4xi32(<4 x i32> %v) { |
| 162 entry: |
| 163 %e0 = extractelement <4 x i32> %v, i32 0 |
| 164 %e1 = extractelement <4 x i32> %v, i32 1 |
| 165 %e2 = extractelement <4 x i32> %v, i32 2 |
| 166 %e3 = extractelement <4 x i32> %v, i32 3 |
| 167 ret i32 %e0 |
| 168 } |
| 169 |
| 170 ; CHECK-NEXT: define i32 @ExtractV4xi32(<4 x i32> %v) { |
| 171 ; CHECK-NEXT: entry: |
| 172 ; CHECK-NEXT: %e0 = extractelement <4 x i32> %v, i32 0 |
| 173 ; CHECK-NEXT: %e1 = extractelement <4 x i32> %v, i32 1 |
| 174 ; CHECK-NEXT: %e2 = extractelement <4 x i32> %v, i32 2 |
| 175 ; CHECK-NEXT: %e3 = extractelement <4 x i32> %v, i32 3 |
| 176 ; CHECK-NEXT: ret i32 %e0 |
| 177 ; CHECK-NEXT: } |
| 178 |
| 179 define float @ExtractV4xfloat(<4 x float> %v) { |
| 180 entry: |
| 181 %e0 = extractelement <4 x float> %v, i32 0 |
| 182 %e1 = extractelement <4 x float> %v, i32 1 |
| 183 %e2 = extractelement <4 x float> %v, i32 2 |
| 184 %e3 = extractelement <4 x float> %v, i32 3 |
| 185 ret float %e0 |
| 186 } |
| 187 |
| 188 ; CHECK-NEXT: define float @ExtractV4xfloat(<4 x float> %v) { |
| 189 ; CHECK-NEXT: entry: |
| 190 ; CHECK-NEXT: %e0 = extractelement <4 x float> %v, i32 0 |
| 191 ; CHECK-NEXT: %e1 = extractelement <4 x float> %v, i32 1 |
| 192 ; CHECK-NEXT: %e2 = extractelement <4 x float> %v, i32 2 |
| 193 ; CHECK-NEXT: %e3 = extractelement <4 x float> %v, i32 3 |
| 194 ; CHECK-NEXT: ret float %e0 |
| 195 ; CHECK-NEXT: } |
| 196 |
| 197 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %pe) { |
| 93 entry: | 198 entry: |
| 94 %e = trunc i32 %pe to i1 | 199 %e = trunc i32 %pe to i1 |
| 95 %r = insertelement <4 x i1> %v, i1 %e, i32 %i | 200 %r0 = insertelement <4 x i1> %v, i1 %e, i32 0 |
| 96 ret <4 x i1> %r | 201 %r1 = insertelement <4 x i1> %v, i1 %e, i32 1 |
| 97 } | 202 %r2 = insertelement <4 x i1> %v, i1 %e, i32 2 |
| 98 | 203 %r3 = insertelement <4 x i1> %v, i1 %e, i32 3 |
| 99 ; CHECK-NEXT: define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %pe, i32 %i) { | 204 ret <4 x i1> %r3 |
| 205 } |
| 206 |
| 207 ; CHECK-NEXT: define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %pe) { |
| 100 ; CHECK-NEXT: entry: | 208 ; CHECK-NEXT: entry: |
| 101 ; CHECK-NEXT: %e = trunc i32 %pe to i1 | 209 ; CHECK-NEXT: %e = trunc i32 %pe to i1 |
| 102 ; CHECK-NEXT: %r = insertelement <4 x i1> %v, i1 %e, i32 %i | 210 ; CHECK-NEXT: %r0 = insertelement <4 x i1> %v, i1 %e, i32 0 |
| 103 ; CHECK-NEXT: ret <4 x i1> %r | 211 ; CHECK-NEXT: %r1 = insertelement <4 x i1> %v, i1 %e, i32 1 |
| 104 ; CHECK-NEXT: } | 212 ; CHECK-NEXT: %r2 = insertelement <4 x i1> %v, i1 %e, i32 2 |
| 105 | 213 ; CHECK-NEXT: %r3 = insertelement <4 x i1> %v, i1 %e, i32 3 |
| 106 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %pe, i32 %i) { | 214 ; CHECK-NEXT: ret <4 x i1> %r3 |
| 215 ; CHECK-NEXT: } |
| 216 |
| 217 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %pe) { |
| 107 entry: | 218 entry: |
| 108 %e = trunc i32 %pe to i1 | 219 %e = trunc i32 %pe to i1 |
| 109 %r = insertelement <8 x i1> %v, i1 %e, i32 %i | 220 %r0 = insertelement <8 x i1> %v, i1 %e, i32 0 |
| 110 ret <8 x i1> %r | 221 %r1 = insertelement <8 x i1> %v, i1 %e, i32 1 |
| 111 } | 222 %r2 = insertelement <8 x i1> %v, i1 %e, i32 2 |
| 112 | 223 %r3 = insertelement <8 x i1> %v, i1 %e, i32 3 |
| 113 ; CHECK-NEXT: define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %pe, i32 %i) { | 224 %r4 = insertelement <8 x i1> %v, i1 %e, i32 4 |
| 225 %r5 = insertelement <8 x i1> %v, i1 %e, i32 5 |
| 226 %r6 = insertelement <8 x i1> %v, i1 %e, i32 6 |
| 227 %r7 = insertelement <8 x i1> %v, i1 %e, i32 7 |
| 228 ret <8 x i1> %r7 |
| 229 } |
| 230 |
| 231 ; CHECK-NEXT: define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %pe) { |
| 114 ; CHECK-NEXT: entry: | 232 ; CHECK-NEXT: entry: |
| 115 ; CHECK-NEXT: %e = trunc i32 %pe to i1 | 233 ; CHECK-NEXT: %e = trunc i32 %pe to i1 |
| 116 ; CHECK-NEXT: %r = insertelement <8 x i1> %v, i1 %e, i32 %i | 234 ; CHECK-NEXT: %r0 = insertelement <8 x i1> %v, i1 %e, i32 0 |
| 117 ; CHECK-NEXT: ret <8 x i1> %r | 235 ; CHECK-NEXT: %r1 = insertelement <8 x i1> %v, i1 %e, i32 1 |
| 118 ; CHECK-NEXT: } | 236 ; CHECK-NEXT: %r2 = insertelement <8 x i1> %v, i1 %e, i32 2 |
| 119 | 237 ; CHECK-NEXT: %r3 = insertelement <8 x i1> %v, i1 %e, i32 3 |
| 120 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %pe, i32 %i) { | 238 ; CHECK-NEXT: %r4 = insertelement <8 x i1> %v, i1 %e, i32 4 |
| 239 ; CHECK-NEXT: %r5 = insertelement <8 x i1> %v, i1 %e, i32 5 |
| 240 ; CHECK-NEXT: %r6 = insertelement <8 x i1> %v, i1 %e, i32 6 |
| 241 ; CHECK-NEXT: %r7 = insertelement <8 x i1> %v, i1 %e, i32 7 |
| 242 ; CHECK-NEXT: ret <8 x i1> %r7 |
| 243 ; CHECK-NEXT: } |
| 244 |
| 245 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %pe) { |
| 121 entry: | 246 entry: |
| 122 %e = trunc i32 %pe to i1 | 247 %e = trunc i32 %pe to i1 |
| 123 %r = insertelement <16 x i1> %v, i1 %e, i32 %i | 248 %r0 = insertelement <16 x i1> %v, i1 %e, i32 0 |
| 124 ret <16 x i1> %r | 249 %r1 = insertelement <16 x i1> %v, i1 %e, i32 1 |
| 125 } | 250 %r2 = insertelement <16 x i1> %v, i1 %e, i32 2 |
| 126 | 251 %r3 = insertelement <16 x i1> %v, i1 %e, i32 3 |
| 127 ; CHECK-NEXT: define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %pe, i32 %i) { | 252 %r4 = insertelement <16 x i1> %v, i1 %e, i32 4 |
| 253 %r5 = insertelement <16 x i1> %v, i1 %e, i32 5 |
| 254 %r6 = insertelement <16 x i1> %v, i1 %e, i32 6 |
| 255 %r7 = insertelement <16 x i1> %v, i1 %e, i32 7 |
| 256 %r8 = insertelement <16 x i1> %v, i1 %e, i32 8 |
| 257 %r9 = insertelement <16 x i1> %v, i1 %e, i32 9 |
| 258 %r10 = insertelement <16 x i1> %v, i1 %e, i32 10 |
| 259 %r11 = insertelement <16 x i1> %v, i1 %e, i32 11 |
| 260 %r12 = insertelement <16 x i1> %v, i1 %e, i32 12 |
| 261 %r13 = insertelement <16 x i1> %v, i1 %e, i32 13 |
| 262 %r14 = insertelement <16 x i1> %v, i1 %e, i32 14 |
| 263 %r15 = insertelement <16 x i1> %v, i1 %e, i32 15 |
| 264 ret <16 x i1> %r15 |
| 265 } |
| 266 |
| 267 ; CHECK-NEXT: define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %pe) { |
| 128 ; CHECK-NEXT: entry: | 268 ; CHECK-NEXT: entry: |
| 129 ; CHECK-NEXT: %e = trunc i32 %pe to i1 | 269 ; CHECK-NEXT: %e = trunc i32 %pe to i1 |
| 130 ; CHECK-NEXT: %r = insertelement <16 x i1> %v, i1 %e, i32 %i | 270 ; CHECK-NEXT: %r0 = insertelement <16 x i1> %v, i1 %e, i32 0 |
| 131 ; CHECK-NEXT: ret <16 x i1> %r | 271 ; CHECK-NEXT: %r1 = insertelement <16 x i1> %v, i1 %e, i32 1 |
| 132 ; CHECK-NEXT: } | 272 ; CHECK-NEXT: %r2 = insertelement <16 x i1> %v, i1 %e, i32 2 |
| 133 | 273 ; CHECK-NEXT: %r3 = insertelement <16 x i1> %v, i1 %e, i32 3 |
| 134 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %pe, i32 %i) { | 274 ; CHECK-NEXT: %r4 = insertelement <16 x i1> %v, i1 %e, i32 4 |
| 275 ; CHECK-NEXT: %r5 = insertelement <16 x i1> %v, i1 %e, i32 5 |
| 276 ; CHECK-NEXT: %r6 = insertelement <16 x i1> %v, i1 %e, i32 6 |
| 277 ; CHECK-NEXT: %r7 = insertelement <16 x i1> %v, i1 %e, i32 7 |
| 278 ; CHECK-NEXT: %r8 = insertelement <16 x i1> %v, i1 %e, i32 8 |
| 279 ; CHECK-NEXT: %r9 = insertelement <16 x i1> %v, i1 %e, i32 9 |
| 280 ; CHECK-NEXT: %r10 = insertelement <16 x i1> %v, i1 %e, i32 10 |
| 281 ; CHECK-NEXT: %r11 = insertelement <16 x i1> %v, i1 %e, i32 11 |
| 282 ; CHECK-NEXT: %r12 = insertelement <16 x i1> %v, i1 %e, i32 12 |
| 283 ; CHECK-NEXT: %r13 = insertelement <16 x i1> %v, i1 %e, i32 13 |
| 284 ; CHECK-NEXT: %r14 = insertelement <16 x i1> %v, i1 %e, i32 14 |
| 285 ; CHECK-NEXT: %r15 = insertelement <16 x i1> %v, i1 %e, i32 15 |
| 286 ; CHECK-NEXT: ret <16 x i1> %r15 |
| 287 ; CHECK-NEXT: } |
| 288 |
| 289 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %pe) { |
| 135 entry: | 290 entry: |
| 136 %e = trunc i32 %pe to i8 | 291 %e = trunc i32 %pe to i8 |
| 137 %r = insertelement <16 x i8> %v, i8 %e, i32 %i | 292 %r0 = insertelement <16 x i8> %v, i8 %e, i32 0 |
| 138 ret <16 x i8> %r | 293 %r1 = insertelement <16 x i8> %v, i8 %e, i32 1 |
| 139 } | 294 %r2 = insertelement <16 x i8> %v, i8 %e, i32 2 |
| 140 | 295 %r3 = insertelement <16 x i8> %v, i8 %e, i32 3 |
| 141 ; CHECK-NEXT: define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %pe, i32 %i) { | 296 %r4 = insertelement <16 x i8> %v, i8 %e, i32 4 |
| 297 %r5 = insertelement <16 x i8> %v, i8 %e, i32 5 |
| 298 %r6 = insertelement <16 x i8> %v, i8 %e, i32 6 |
| 299 %r7 = insertelement <16 x i8> %v, i8 %e, i32 7 |
| 300 ret <16 x i8> %r7 |
| 301 } |
| 302 |
| 303 ; CHECK-NEXT: define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %pe) { |
| 142 ; CHECK-NEXT: entry: | 304 ; CHECK-NEXT: entry: |
| 143 ; CHECK-NEXT: %e = trunc i32 %pe to i8 | 305 ; CHECK-NEXT: %e = trunc i32 %pe to i8 |
| 144 ; CHECK-NEXT: %r = insertelement <16 x i8> %v, i8 %e, i32 %i | 306 ; CHECK-NEXT: %r0 = insertelement <16 x i8> %v, i8 %e, i32 0 |
| 145 ; CHECK-NEXT: ret <16 x i8> %r | 307 ; CHECK-NEXT: %r1 = insertelement <16 x i8> %v, i8 %e, i32 1 |
| 146 ; CHECK-NEXT: } | 308 ; CHECK-NEXT: %r2 = insertelement <16 x i8> %v, i8 %e, i32 2 |
| 147 | 309 ; CHECK-NEXT: %r3 = insertelement <16 x i8> %v, i8 %e, i32 3 |
| 148 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %pe, i32 %i) { | 310 ; CHECK-NEXT: %r4 = insertelement <16 x i8> %v, i8 %e, i32 4 |
| 311 ; CHECK-NEXT: %r5 = insertelement <16 x i8> %v, i8 %e, i32 5 |
| 312 ; CHECK-NEXT: %r6 = insertelement <16 x i8> %v, i8 %e, i32 6 |
| 313 ; CHECK-NEXT: %r7 = insertelement <16 x i8> %v, i8 %e, i32 7 |
| 314 ; CHECK-NEXT: ret <16 x i8> %r7 |
| 315 ; CHECK-NEXT: } |
| 316 |
| 317 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %pe) { |
| 149 entry: | 318 entry: |
| 150 %e = trunc i32 %pe to i16 | 319 %e = trunc i32 %pe to i16 |
| 151 %r = insertelement <8 x i16> %v, i16 %e, i32 %i | 320 %r0 = insertelement <8 x i16> %v, i16 %e, i32 0 |
| 152 ret <8 x i16> %r | 321 %r1 = insertelement <8 x i16> %v, i16 %e, i32 1 |
| 153 } | 322 %r2 = insertelement <8 x i16> %v, i16 %e, i32 2 |
| 154 | 323 %r3 = insertelement <8 x i16> %v, i16 %e, i32 3 |
| 155 ; CHECK-NEXT: define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %pe, i32 %i) { | 324 %r4 = insertelement <8 x i16> %v, i16 %e, i32 4 |
| 325 %r5 = insertelement <8 x i16> %v, i16 %e, i32 5 |
| 326 %r6 = insertelement <8 x i16> %v, i16 %e, i32 6 |
| 327 %r7 = insertelement <8 x i16> %v, i16 %e, i32 7 |
| 328 ret <8 x i16> %r7 |
| 329 } |
| 330 |
| 331 ; CHECK-NEXT: define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %pe) { |
| 156 ; CHECK-NEXT: entry: | 332 ; CHECK-NEXT: entry: |
| 157 ; CHECK-NEXT: %e = trunc i32 %pe to i16 | 333 ; CHECK-NEXT: %e = trunc i32 %pe to i16 |
| 158 ; CHECK-NEXT: %r = insertelement <8 x i16> %v, i16 %e, i32 %i | 334 ; CHECK-NEXT: %r0 = insertelement <8 x i16> %v, i16 %e, i32 0 |
| 159 ; CHECK-NEXT: ret <8 x i16> %r | 335 ; CHECK-NEXT: %r1 = insertelement <8 x i16> %v, i16 %e, i32 1 |
| 160 ; CHECK-NEXT: } | 336 ; CHECK-NEXT: %r2 = insertelement <8 x i16> %v, i16 %e, i32 2 |
| 161 | 337 ; CHECK-NEXT: %r3 = insertelement <8 x i16> %v, i16 %e, i32 3 |
| 162 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %e, i32 %i) { | 338 ; CHECK-NEXT: %r4 = insertelement <8 x i16> %v, i16 %e, i32 4 |
| 163 entry: | 339 ; CHECK-NEXT: %r5 = insertelement <8 x i16> %v, i16 %e, i32 5 |
| 164 %r = insertelement <4 x i32> %v, i32 %e, i32 %i | 340 ; CHECK-NEXT: %r6 = insertelement <8 x i16> %v, i16 %e, i32 6 |
| 165 ret <4 x i32> %r | 341 ; CHECK-NEXT: %r7 = insertelement <8 x i16> %v, i16 %e, i32 7 |
| 166 } | 342 ; CHECK-NEXT: ret <8 x i16> %r7 |
| 167 | 343 ; CHECK-NEXT: } |
| 168 ; CHECK-NEXT: define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %e, i32 %i) { | 344 |
| 169 ; CHECK-NEXT: entry: | 345 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %e) { |
| 170 ; CHECK-NEXT: %r = insertelement <4 x i32> %v, i32 %e, i32 %i | 346 entry: |
| 171 ; CHECK-NEXT: ret <4 x i32> %r | 347 %r0 = insertelement <4 x i32> %v, i32 %e, i32 0 |
| 172 ; CHECK-NEXT: } | 348 %r1 = insertelement <4 x i32> %v, i32 %e, i32 1 |
| 173 | 349 %r2 = insertelement <4 x i32> %v, i32 %e, i32 2 |
| 174 define <4 x float> @InsertV4xfloat(<4 x float> %v, float %e, i32 %i) { | 350 %r3 = insertelement <4 x i32> %v, i32 %e, i32 3 |
| 175 entry: | 351 ret <4 x i32> %r3 |
| 176 %r = insertelement <4 x float> %v, float %e, i32 %i | 352 } |
| 177 ret <4 x float> %r | 353 |
| 178 } | 354 ; CHECK-NEXT: define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %e) { |
| 179 | 355 ; CHECK-NEXT: entry: |
| 180 ; CHECK-NEXT: define <4 x float> @InsertV4xfloat(<4 x float> %v, float %e, i32 %
i) { | 356 ; CHECK-NEXT: %r0 = insertelement <4 x i32> %v, i32 %e, i32 0 |
| 181 ; CHECK-NEXT: entry: | 357 ; CHECK-NEXT: %r1 = insertelement <4 x i32> %v, i32 %e, i32 1 |
| 182 ; CHECK-NEXT: %r = insertelement <4 x float> %v, float %e, i32 %i | 358 ; CHECK-NEXT: %r2 = insertelement <4 x i32> %v, i32 %e, i32 2 |
| 183 ; CHECK-NEXT: ret <4 x float> %r | 359 ; CHECK-NEXT: %r3 = insertelement <4 x i32> %v, i32 %e, i32 3 |
| 184 ; CHECK-NEXT: } | 360 ; CHECK-NEXT: ret <4 x i32> %r3 |
| 361 ; CHECK-NEXT: } |
| 362 |
| 363 define <4 x float> @InsertV4xfloat(<4 x float> %v, float %e) { |
| 364 entry: |
| 365 %r0 = insertelement <4 x float> %v, float %e, i32 0 |
| 366 %r1 = insertelement <4 x float> %v, float %e, i32 1 |
| 367 %r2 = insertelement <4 x float> %v, float %e, i32 2 |
| 368 %r3 = insertelement <4 x float> %v, float %e, i32 3 |
| 369 ret <4 x float> %r3 |
| 370 } |
| 371 |
| 372 ; CHECK-NEXT: define <4 x float> @InsertV4xfloat(<4 x float> %v, float %e) { |
| 373 ; CHECK-NEXT: entry: |
| 374 ; CHECK-NEXT: %r0 = insertelement <4 x float> %v, float %e, i32 0 |
| 375 ; CHECK-NEXT: %r1 = insertelement <4 x float> %v, float %e, i32 1 |
| 376 ; CHECK-NEXT: %r2 = insertelement <4 x float> %v, float %e, i32 2 |
| 377 ; CHECK-NEXT: %r3 = insertelement <4 x float> %v, float %e, i32 3 |
| 378 ; CHECK-NEXT: ret <4 x float> %r3 |
| 379 ; CHECK-NEXT: } |
| OLD | NEW |