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 |