| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 ; Show that we know how to translate insertelement and extractelement. | 
|  | 2 | 
|  | 3 ; REQUIRES: allow_dump | 
|  | 4 | 
|  | 5 ; Compile using standalone assembler. | 
|  | 6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \ | 
|  | 7 ; RUN:   | FileCheck %s --check-prefix=ASM | 
|  | 8 | 
|  | 9 ; Show bytes in assembled standalone code. | 
|  | 10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ | 
|  | 11 ; RUN:   --args -Om1 \ | 
|  | 12 ; RUN:   | FileCheck %s --check-prefix=DIS | 
|  | 13 | 
|  | 14 ; Compile using integrated assembler. | 
|  | 15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \ | 
|  | 16 ; RUN:   | FileCheck %s --check-prefix=IASM | 
|  | 17 | 
|  | 18 ; Show bytes in assembled integrated code. | 
|  | 19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ | 
|  | 20 ; RUN:   --args -Om1 \ | 
|  | 21 ; RUN:   | FileCheck %s --check-prefix=DIS | 
|  | 22 | 
|  | 23 define internal i32 @extract1_v4i32(<4 x i32> %src) { | 
|  | 24 ; ASM-LABEL: extract1_v4i32: | 
|  | 25 ; DIS-LABEL: 00000000 <extract1_v4i32>: | 
|  | 26 ; IASM-LABEL: extract1_v4i32: | 
|  | 27 | 
|  | 28   %1 = extractelement <4 x i32> %src, i32 1 | 
|  | 29 | 
|  | 30 ; ASM: vmov.32  r0, d0[1] | 
|  | 31 ; DIS:   10:       ee300b10 | 
|  | 32 | 
|  | 33   ret i32 %1 | 
|  | 34 } | 
|  | 35 | 
|  | 36 define internal i32 @extract2_v4i32(<4 x i32> %src) { | 
|  | 37 ; ASM-LABEL: extract2_v4i32: | 
|  | 38 ; DIS-LABEL: 00000030 <extract2_v4i32>: | 
|  | 39 ; IASM-LABEL: extract2_v4i32: | 
|  | 40 | 
|  | 41   %1 = extractelement <4 x i32> %src, i32 2 | 
|  | 42 | 
|  | 43 ; ASM: vmov.32  r0, d1[0] | 
|  | 44 ; DIS:   40:       ee110b10 | 
|  | 45 | 
|  | 46   ret i32 %1 | 
|  | 47 } | 
|  | 48 | 
|  | 49 define internal i32 @extract3_v8i16(<8 x i16> %src) { | 
|  | 50 ; ASM-LABEL: extract3_v8i16: | 
|  | 51 ; DIS-LABEL: 00000060 <extract3_v8i16>: | 
|  | 52 ; IASM-LABEL: extract3_v8i16: | 
|  | 53 | 
|  | 54   %1 = extractelement <8 x i16> %src, i32 3 | 
|  | 55 | 
|  | 56 ; ASM: vmov.s16 r0, d0[3] | 
|  | 57 ; DIS:   70:       ee300b70 | 
|  | 58   %2 = sext i16 %1 to i32 | 
|  | 59   ret i32 %2 | 
|  | 60 } | 
|  | 61 | 
|  | 62 define internal i32 @extract4_v8i16(<8 x i16> %src) { | 
|  | 63 ; ASM-LABEL: extract4_v8i16: | 
|  | 64 ; DIS-LABEL: 00000090 <extract4_v8i16>: | 
|  | 65 ; IASM-LABEL: extract4_v8i16: | 
|  | 66 | 
|  | 67   %1 = extractelement <8 x i16> %src, i32 4 | 
|  | 68 | 
|  | 69 ; ASM: vmov.s16 r0, d1[0] | 
|  | 70 ; DIS:   a0:       ee110b30 | 
|  | 71 | 
|  | 72   %2 = sext i16 %1 to i32 | 
|  | 73   ret i32 %2 | 
|  | 74 } | 
|  | 75 | 
|  | 76 define internal i32 @extract7_v4i8(<16 x i8> %src) { | 
|  | 77 ; ASM-LABEL: extract7_v4i8: | 
|  | 78 ; DIS-LABEL: 000000c0 <extract7_v4i8>: | 
|  | 79 ; IASM-LABEL: extract7_v4i8: | 
|  | 80 | 
|  | 81   %1 = extractelement <16 x i8> %src, i32 7 | 
|  | 82 | 
|  | 83 ; ASM: vmov.s8  r0, d0[7] | 
|  | 84 ; DIS:   d0:       ee700b70 | 
|  | 85 | 
|  | 86   %2 = sext i8 %1 to i32 | 
|  | 87   ret i32 %2 | 
|  | 88 } | 
|  | 89 | 
|  | 90 define internal i32 @extract8_v16i8(<16 x i8> %src) { | 
|  | 91 ; ASM-LABEL: extract8_v16i8: | 
|  | 92 ; DIS-LABEL: 000000f0 <extract8_v16i8>: | 
|  | 93 ; IASM-LABEL: extract8_v16i8: | 
|  | 94 | 
|  | 95   %1 = extractelement <16 x i8> %src, i32 8 | 
|  | 96 | 
|  | 97 ; ASM: vmov.s8  r0, d1[0] | 
|  | 98 ; DIS:   100:       ee510b10 | 
|  | 99 | 
|  | 100   %2 = sext i8 %1 to i32 | 
|  | 101   ret i32 %2 | 
|  | 102 } | 
|  | 103 | 
|  | 104 define internal float @extract1_v4float(<4 x float> %src) { | 
|  | 105 ; ASM-LABEL: extract1_v4float: | 
|  | 106 ; DIS-LABEL: 00000120 <extract1_v4float>: | 
|  | 107 ; IASM-LABEL: extract1_v4float: | 
|  | 108 | 
|  | 109   %1 = extractelement <4 x float> %src, i32 1 | 
|  | 110 | 
|  | 111 ; ASM: vmov.f32 s0, s1 | 
|  | 112 ; DIS:   130:       eeb00a60 | 
|  | 113 | 
|  | 114   ret float %1 | 
|  | 115 } | 
|  | 116 | 
|  | 117 define internal float @extract2_v4float(<4 x float> %src) { | 
|  | 118 ; ASM-LABEL: extract2_v4float: | 
|  | 119 ; DIS-LABEL: 00000150 <extract2_v4float>: | 
|  | 120 ; IASM-LABEL: extract2_v4float: | 
|  | 121 | 
|  | 122   %1 = extractelement <4 x float> %src, i32 2 | 
|  | 123 | 
|  | 124 ; ASM: vmov.f32 s0, s2 | 
|  | 125 ; DIS:   160:       eeb00a41 | 
|  | 126 | 
|  | 127   ret float %1 | 
|  | 128 } | 
|  | 129 | 
|  | 130 define internal <4 x i32> @insert1_v4i32(<4 x i32> %src, i32 %s) { | 
|  | 131 ; ASM-LABEL: insert1_v4i32: | 
|  | 132 ; DIS-LABEL: 00000180 <insert1_v4i32>: | 
|  | 133 ; IASM-LABEL: insert1_v4i32: | 
|  | 134 | 
|  | 135   %1 = insertelement <4 x i32> %src, i32 %s, i32 1 | 
|  | 136 | 
|  | 137 ; ASM: vmov.32  d0[1], r0 | 
|  | 138 ; DIS:   198:       ee200b10 | 
|  | 139 | 
|  | 140   ret <4 x i32> %1 | 
|  | 141 } | 
|  | 142 | 
|  | 143 define internal <4 x i32> @insert2_v4i32(<4 x i32> %src, i32 %s) { | 
|  | 144 ; ASM-LABEL: insert2_v4i32: | 
|  | 145 ; DIS-LABEL: 000001b0 <insert2_v4i32>: | 
|  | 146 ; IASM-LABEL: insert2_v4i32: | 
|  | 147 | 
|  | 148   %1 = insertelement <4 x i32> %src, i32 %s, i32 2 | 
|  | 149 | 
|  | 150 ; ASM: vmov.32  d1[0], r0 | 
|  | 151 ; DIS:   1c8:       ee010b10 | 
|  | 152 | 
|  | 153   ret <4 x i32> %1 | 
|  | 154 } | 
|  | 155 | 
|  | 156 define internal <8 x i16> @insert3_v8i16(<8 x i16> %src, i32 %s) { | 
|  | 157 ; ASM-LABEL: insert3_v8i16: | 
|  | 158 ; DIS-LABEL: 000001e0 <insert3_v8i16>: | 
|  | 159 ; IASM-LABEL: insert3_v8i16: | 
|  | 160 | 
|  | 161   %s2 = trunc i32 %s to i16 | 
|  | 162   %1 = insertelement <8 x i16> %src, i16 %s2, i32 3 | 
|  | 163 | 
|  | 164 ; ASM: vmov.16  d0[3], r0 | 
|  | 165 ; DIS:   200:       ee200b70 | 
|  | 166   ret <8 x i16> %1 | 
|  | 167 } | 
|  | 168 | 
|  | 169 define internal <8 x i16> @insert4_v8i16(<8 x i16> %src, i32 %s) { | 
|  | 170 ; ASM-LABEL: insert4_v8i16: | 
|  | 171 ; DIS-LABEL: 00000220 <insert4_v8i16>: | 
|  | 172 ; IASM-LABEL: insert4_v8i16: | 
|  | 173 | 
|  | 174   %s2 = trunc i32 %s to i16 | 
|  | 175   %1 = insertelement <8 x i16> %src, i16 %s2, i32 4 | 
|  | 176 | 
|  | 177 ; ASM: vmov.16  d1[0], r0 | 
|  | 178 ; DIS:   240:       ee010b30 | 
|  | 179   ret <8 x i16> %1 | 
|  | 180 } | 
|  | 181 | 
|  | 182 define internal <16 x i8> @insert7_v4i8(<16 x i8> %src, i32 %s) { | 
|  | 183 ; ASM-LABEL: insert7_v4i8: | 
|  | 184 ; DIS-LABEL: 00000260 <insert7_v4i8>: | 
|  | 185 ; IASM-LABEL: insert7_v4i8: | 
|  | 186 | 
|  | 187   %s2 = trunc i32 %s to i8 | 
|  | 188   %1 = insertelement <16 x i8> %src, i8 %s2, i32 7 | 
|  | 189 | 
|  | 190 ; ASM: vmov.8   d0[7], r0 | 
|  | 191 ; DIS:   280:       ee600b70 | 
|  | 192 | 
|  | 193   ret <16 x i8> %1 | 
|  | 194 } | 
|  | 195 | 
|  | 196 define internal <16 x i8> @insert8_v16i8(<16 x i8> %src, i32 %s) { | 
|  | 197 ; ASM-LABEL: insert8_v16i8: | 
|  | 198 ; DIS-LABEL: 000002a0 <insert8_v16i8>: | 
|  | 199 ; IASM-LABEL: insert8_v16i8: | 
|  | 200 | 
|  | 201   %s2 = trunc i32 %s to i8 | 
|  | 202   %1 = insertelement <16 x i8> %src, i8 %s2, i32 8 | 
|  | 203 | 
|  | 204 ; ASM: vmov.8   d1[0], r0 | 
|  | 205 ; DIS:   2c0:       ee410b10 | 
|  | 206 | 
|  | 207   ret <16 x i8> %1 | 
|  | 208 } | 
|  | 209 | 
|  | 210 define internal <4 x float> @insert1_v4float(<4 x float> %src, float %s) { | 
|  | 211 ; ASM-LABEL: insert1_v4float: | 
|  | 212 ; DIS-LABEL: 000002e0 <insert1_v4float>: | 
|  | 213 ; IASM-LABEL: insert1_v4float: | 
|  | 214 | 
|  | 215   %1 = insertelement <4 x float> %src, float %s, i32 1 | 
|  | 216 | 
|  | 217 ; ASM: vmov.f32 s1, s4 | 
|  | 218 ; DIS:   2f8:       eef00a42 | 
|  | 219 | 
|  | 220   ret <4 x float> %1 | 
|  | 221 } | 
|  | 222 | 
|  | 223 define internal <4 x float> @insert2_v4float(<4 x float> %src, float %s) { | 
|  | 224 ; ASM-LABEL: insert2_v4float: | 
|  | 225 ; DIS-LABEL: 00000310 <insert2_v4float>: | 
|  | 226 ; IASM-LABEL: insert2_v4float: | 
|  | 227 | 
|  | 228   %1 = insertelement <4 x float> %src, float %s, i32 2 | 
|  | 229 | 
|  | 230 ; ASM: vmov.f32 s2, s4 | 
|  | 231 ; DIS:   328:       eeb01a42 | 
|  | 232 | 
|  | 233   ret <4 x float> %1 | 
|  | 234 } | 
| OLD | NEW | 
|---|