1 ; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - | FileCheck %s 2 3 define <8 x i8> @vqshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 4 ;CHECK-LABEL: vqshls8: 5 ;CHECK: vqshl.s8 6 %tmp1 = load <8 x i8>* %A 7 %tmp2 = load <8 x i8>* %B 8 %tmp3 = call <8 x i8> @llvm.arm.neon.vqshifts.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2) 9 ret <8 x i8> %tmp3 10 } 11 12 define <4 x i16> @vqshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 13 ;CHECK-LABEL: vqshls16: 14 ;CHECK: vqshl.s16 15 %tmp1 = load <4 x i16>* %A 16 %tmp2 = load <4 x i16>* %B 17 %tmp3 = call <4 x i16> @llvm.arm.neon.vqshifts.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2) 18 ret <4 x i16> %tmp3 19 } 20 21 define <2 x i32> @vqshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 22 ;CHECK-LABEL: vqshls32: 23 ;CHECK: vqshl.s32 24 %tmp1 = load <2 x i32>* %A 25 %tmp2 = load <2 x i32>* %B 26 %tmp3 = call <2 x i32> @llvm.arm.neon.vqshifts.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2) 27 ret <2 x i32> %tmp3 28 } 29 30 define <1 x i64> @vqshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 31 ;CHECK-LABEL: vqshls64: 32 ;CHECK: vqshl.s64 33 %tmp1 = load <1 x i64>* %A 34 %tmp2 = load <1 x i64>* %B 35 %tmp3 = call <1 x i64> @llvm.arm.neon.vqshifts.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2) 36 ret <1 x i64> %tmp3 37 } 38 39 define <8 x i8> @vqshlu8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 40 ;CHECK-LABEL: vqshlu8: 41 ;CHECK: vqshl.u8 42 %tmp1 = load <8 x i8>* %A 43 %tmp2 = load <8 x i8>* %B 44 %tmp3 = call <8 x i8> @llvm.arm.neon.vqshiftu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2) 45 ret <8 x i8> %tmp3 46 } 47 48 define <4 x i16> @vqshlu16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 49 ;CHECK-LABEL: vqshlu16: 50 ;CHECK: vqshl.u16 51 %tmp1 = load <4 x i16>* %A 52 %tmp2 = load <4 x i16>* %B 53 %tmp3 = call <4 x i16> @llvm.arm.neon.vqshiftu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2) 54 ret <4 x i16> %tmp3 55 } 56 57 define <2 x i32> @vqshlu32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 58 ;CHECK-LABEL: vqshlu32: 59 ;CHECK: vqshl.u32 60 %tmp1 = load <2 x i32>* %A 61 %tmp2 = load <2 x i32>* %B 62 %tmp3 = call <2 x i32> @llvm.arm.neon.vqshiftu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2) 63 ret <2 x i32> %tmp3 64 } 65 66 define <1 x i64> @vqshlu64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 67 ;CHECK-LABEL: vqshlu64: 68 ;CHECK: vqshl.u64 69 %tmp1 = load <1 x i64>* %A 70 %tmp2 = load <1 x i64>* %B 71 %tmp3 = call <1 x i64> @llvm.arm.neon.vqshiftu.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2) 72 ret <1 x i64> %tmp3 73 } 74 75 define <16 x i8> @vqshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 76 ;CHECK-LABEL: vqshlQs8: 77 ;CHECK: vqshl.s8 78 %tmp1 = load <16 x i8>* %A 79 %tmp2 = load <16 x i8>* %B 80 %tmp3 = call <16 x i8> @llvm.arm.neon.vqshifts.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2) 81 ret <16 x i8> %tmp3 82 } 83 84 define <8 x i16> @vqshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 85 ;CHECK-LABEL: vqshlQs16: 86 ;CHECK: vqshl.s16 87 %tmp1 = load <8 x i16>* %A 88 %tmp2 = load <8 x i16>* %B 89 %tmp3 = call <8 x i16> @llvm.arm.neon.vqshifts.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2) 90 ret <8 x i16> %tmp3 91 } 92 93 define <4 x i32> @vqshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 94 ;CHECK-LABEL: vqshlQs32: 95 ;CHECK: vqshl.s32 96 %tmp1 = load <4 x i32>* %A 97 %tmp2 = load <4 x i32>* %B 98 %tmp3 = call <4 x i32> @llvm.arm.neon.vqshifts.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2) 99 ret <4 x i32> %tmp3 100 } 101 102 define <2 x i64> @vqshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 103 ;CHECK-LABEL: vqshlQs64: 104 ;CHECK: vqshl.s64 105 %tmp1 = load <2 x i64>* %A 106 %tmp2 = load <2 x i64>* %B 107 %tmp3 = call <2 x i64> @llvm.arm.neon.vqshifts.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2) 108 ret <2 x i64> %tmp3 109 } 110 111 define <16 x i8> @vqshlQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 112 ;CHECK-LABEL: vqshlQu8: 113 ;CHECK: vqshl.u8 114 %tmp1 = load <16 x i8>* %A 115 %tmp2 = load <16 x i8>* %B 116 %tmp3 = call <16 x i8> @llvm.arm.neon.vqshiftu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2) 117 ret <16 x i8> %tmp3 118 } 119 120 define <8 x i16> @vqshlQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 121 ;CHECK-LABEL: vqshlQu16: 122 ;CHECK: vqshl.u16 123 %tmp1 = load <8 x i16>* %A 124 %tmp2 = load <8 x i16>* %B 125 %tmp3 = call <8 x i16> @llvm.arm.neon.vqshiftu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2) 126 ret <8 x i16> %tmp3 127 } 128 129 define <4 x i32> @vqshlQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 130 ;CHECK-LABEL: vqshlQu32: 131 ;CHECK: vqshl.u32 132 %tmp1 = load <4 x i32>* %A 133 %tmp2 = load <4 x i32>* %B 134 %tmp3 = call <4 x i32> @llvm.arm.neon.vqshiftu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2) 135 ret <4 x i32> %tmp3 136 } 137 138 define <2 x i64> @vqshlQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 139 ;CHECK-LABEL: vqshlQu64: 140 ;CHECK: vqshl.u64 141 %tmp1 = load <2 x i64>* %A 142 %tmp2 = load <2 x i64>* %B 143 %tmp3 = call <2 x i64> @llvm.arm.neon.vqshiftu.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2) 144 ret <2 x i64> %tmp3 145 } 146 147 define <8 x i8> @vqshls_n8(<8 x i8>* %A) nounwind { 148 ;CHECK-LABEL: vqshls_n8: 149 ;CHECK: vqshl.s8{{.*#7}} 150 %tmp1 = load <8 x i8>* %A 151 %tmp2 = call <8 x i8> @llvm.arm.neon.vqshifts.v8i8(<8 x i8> %tmp1, <8 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 152 ret <8 x i8> %tmp2 153 } 154 155 define <4 x i16> @vqshls_n16(<4 x i16>* %A) nounwind { 156 ;CHECK-LABEL: vqshls_n16: 157 ;CHECK: vqshl.s16{{.*#15}} 158 %tmp1 = load <4 x i16>* %A 159 %tmp2 = call <4 x i16> @llvm.arm.neon.vqshifts.v4i16(<4 x i16> %tmp1, <4 x i16> < i16 15, i16 15, i16 15, i16 15 >) 160 ret <4 x i16> %tmp2 161 } 162 163 define <2 x i32> @vqshls_n32(<2 x i32>* %A) nounwind { 164 ;CHECK-LABEL: vqshls_n32: 165 ;CHECK: vqshl.s32{{.*#31}} 166 %tmp1 = load <2 x i32>* %A 167 %tmp2 = call <2 x i32> @llvm.arm.neon.vqshifts.v2i32(<2 x i32> %tmp1, <2 x i32> < i32 31, i32 31 >) 168 ret <2 x i32> %tmp2 169 } 170 171 define <1 x i64> @vqshls_n64(<1 x i64>* %A) nounwind { 172 ;CHECK-LABEL: vqshls_n64: 173 ;CHECK: vqshl.s64{{.*#63}} 174 %tmp1 = load <1 x i64>* %A 175 %tmp2 = call <1 x i64> @llvm.arm.neon.vqshifts.v1i64(<1 x i64> %tmp1, <1 x i64> < i64 63 >) 176 ret <1 x i64> %tmp2 177 } 178 179 define <8 x i8> @vqshlu_n8(<8 x i8>* %A) nounwind { 180 ;CHECK-LABEL: vqshlu_n8: 181 ;CHECK: vqshl.u8{{.*#7}} 182 %tmp1 = load <8 x i8>* %A 183 %tmp2 = call <8 x i8> @llvm.arm.neon.vqshiftu.v8i8(<8 x i8> %tmp1, <8 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 184 ret <8 x i8> %tmp2 185 } 186 187 define <4 x i16> @vqshlu_n16(<4 x i16>* %A) nounwind { 188 ;CHECK-LABEL: vqshlu_n16: 189 ;CHECK: vqshl.u16{{.*#15}} 190 %tmp1 = load <4 x i16>* %A 191 %tmp2 = call <4 x i16> @llvm.arm.neon.vqshiftu.v4i16(<4 x i16> %tmp1, <4 x i16> < i16 15, i16 15, i16 15, i16 15 >) 192 ret <4 x i16> %tmp2 193 } 194 195 define <2 x i32> @vqshlu_n32(<2 x i32>* %A) nounwind { 196 ;CHECK-LABEL: vqshlu_n32: 197 ;CHECK: vqshl.u32{{.*#31}} 198 %tmp1 = load <2 x i32>* %A 199 %tmp2 = call <2 x i32> @llvm.arm.neon.vqshiftu.v2i32(<2 x i32> %tmp1, <2 x i32> < i32 31, i32 31 >) 200 ret <2 x i32> %tmp2 201 } 202 203 define <1 x i64> @vqshlu_n64(<1 x i64>* %A) nounwind { 204 ;CHECK-LABEL: vqshlu_n64: 205 ;CHECK: vqshl.u64{{.*#63}} 206 %tmp1 = load <1 x i64>* %A 207 %tmp2 = call <1 x i64> @llvm.arm.neon.vqshiftu.v1i64(<1 x i64> %tmp1, <1 x i64> < i64 63 >) 208 ret <1 x i64> %tmp2 209 } 210 211 define <8 x i8> @vqshlsu_n8(<8 x i8>* %A) nounwind { 212 ;CHECK-LABEL: vqshlsu_n8: 213 ;CHECK: vqshlu.s8 214 %tmp1 = load <8 x i8>* %A 215 %tmp2 = call <8 x i8> @llvm.arm.neon.vqshiftsu.v8i8(<8 x i8> %tmp1, <8 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 216 ret <8 x i8> %tmp2 217 } 218 219 define <4 x i16> @vqshlsu_n16(<4 x i16>* %A) nounwind { 220 ;CHECK-LABEL: vqshlsu_n16: 221 ;CHECK: vqshlu.s16 222 %tmp1 = load <4 x i16>* %A 223 %tmp2 = call <4 x i16> @llvm.arm.neon.vqshiftsu.v4i16(<4 x i16> %tmp1, <4 x i16> < i16 15, i16 15, i16 15, i16 15 >) 224 ret <4 x i16> %tmp2 225 } 226 227 define <2 x i32> @vqshlsu_n32(<2 x i32>* %A) nounwind { 228 ;CHECK-LABEL: vqshlsu_n32: 229 ;CHECK: vqshlu.s32 230 %tmp1 = load <2 x i32>* %A 231 %tmp2 = call <2 x i32> @llvm.arm.neon.vqshiftsu.v2i32(<2 x i32> %tmp1, <2 x i32> < i32 31, i32 31 >) 232 ret <2 x i32> %tmp2 233 } 234 235 define <1 x i64> @vqshlsu_n64(<1 x i64>* %A) nounwind { 236 ;CHECK-LABEL: vqshlsu_n64: 237 ;CHECK: vqshlu.s64 238 %tmp1 = load <1 x i64>* %A 239 %tmp2 = call <1 x i64> @llvm.arm.neon.vqshiftsu.v1i64(<1 x i64> %tmp1, <1 x i64> < i64 63 >) 240 ret <1 x i64> %tmp2 241 } 242 243 define <16 x i8> @vqshlQs_n8(<16 x i8>* %A) nounwind { 244 ;CHECK-LABEL: vqshlQs_n8: 245 ;CHECK: vqshl.s8{{.*#7}} 246 %tmp1 = load <16 x i8>* %A 247 %tmp2 = call <16 x i8> @llvm.arm.neon.vqshifts.v16i8(<16 x i8> %tmp1, <16 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 248 ret <16 x i8> %tmp2 249 } 250 251 define <8 x i16> @vqshlQs_n16(<8 x i16>* %A) nounwind { 252 ;CHECK-LABEL: vqshlQs_n16: 253 ;CHECK: vqshl.s16{{.*#15}} 254 %tmp1 = load <8 x i16>* %A 255 %tmp2 = call <8 x i16> @llvm.arm.neon.vqshifts.v8i16(<8 x i16> %tmp1, <8 x i16> < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >) 256 ret <8 x i16> %tmp2 257 } 258 259 define <4 x i32> @vqshlQs_n32(<4 x i32>* %A) nounwind { 260 ;CHECK-LABEL: vqshlQs_n32: 261 ;CHECK: vqshl.s32{{.*#31}} 262 %tmp1 = load <4 x i32>* %A 263 %tmp2 = call <4 x i32> @llvm.arm.neon.vqshifts.v4i32(<4 x i32> %tmp1, <4 x i32> < i32 31, i32 31, i32 31, i32 31 >) 264 ret <4 x i32> %tmp2 265 } 266 267 define <2 x i64> @vqshlQs_n64(<2 x i64>* %A) nounwind { 268 ;CHECK-LABEL: vqshlQs_n64: 269 ;CHECK: vqshl.s64{{.*#63}} 270 %tmp1 = load <2 x i64>* %A 271 %tmp2 = call <2 x i64> @llvm.arm.neon.vqshifts.v2i64(<2 x i64> %tmp1, <2 x i64> < i64 63, i64 63 >) 272 ret <2 x i64> %tmp2 273 } 274 275 define <16 x i8> @vqshlQu_n8(<16 x i8>* %A) nounwind { 276 ;CHECK-LABEL: vqshlQu_n8: 277 ;CHECK: vqshl.u8{{.*#7}} 278 %tmp1 = load <16 x i8>* %A 279 %tmp2 = call <16 x i8> @llvm.arm.neon.vqshiftu.v16i8(<16 x i8> %tmp1, <16 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 280 ret <16 x i8> %tmp2 281 } 282 283 define <8 x i16> @vqshlQu_n16(<8 x i16>* %A) nounwind { 284 ;CHECK-LABEL: vqshlQu_n16: 285 ;CHECK: vqshl.u16{{.*#15}} 286 %tmp1 = load <8 x i16>* %A 287 %tmp2 = call <8 x i16> @llvm.arm.neon.vqshiftu.v8i16(<8 x i16> %tmp1, <8 x i16> < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >) 288 ret <8 x i16> %tmp2 289 } 290 291 define <4 x i32> @vqshlQu_n32(<4 x i32>* %A) nounwind { 292 ;CHECK-LABEL: vqshlQu_n32: 293 ;CHECK: vqshl.u32{{.*#31}} 294 %tmp1 = load <4 x i32>* %A 295 %tmp2 = call <4 x i32> @llvm.arm.neon.vqshiftu.v4i32(<4 x i32> %tmp1, <4 x i32> < i32 31, i32 31, i32 31, i32 31 >) 296 ret <4 x i32> %tmp2 297 } 298 299 define <2 x i64> @vqshlQu_n64(<2 x i64>* %A) nounwind { 300 ;CHECK-LABEL: vqshlQu_n64: 301 ;CHECK: vqshl.u64{{.*#63}} 302 %tmp1 = load <2 x i64>* %A 303 %tmp2 = call <2 x i64> @llvm.arm.neon.vqshiftu.v2i64(<2 x i64> %tmp1, <2 x i64> < i64 63, i64 63 >) 304 ret <2 x i64> %tmp2 305 } 306 307 define <16 x i8> @vqshlQsu_n8(<16 x i8>* %A) nounwind { 308 ;CHECK-LABEL: vqshlQsu_n8: 309 ;CHECK: vqshlu.s8 310 %tmp1 = load <16 x i8>* %A 311 %tmp2 = call <16 x i8> @llvm.arm.neon.vqshiftsu.v16i8(<16 x i8> %tmp1, <16 x i8> < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >) 312 ret <16 x i8> %tmp2 313 } 314 315 define <8 x i16> @vqshlQsu_n16(<8 x i16>* %A) nounwind { 316 ;CHECK-LABEL: vqshlQsu_n16: 317 ;CHECK: vqshlu.s16 318 %tmp1 = load <8 x i16>* %A 319 %tmp2 = call <8 x i16> @llvm.arm.neon.vqshiftsu.v8i16(<8 x i16> %tmp1, <8 x i16> < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >) 320 ret <8 x i16> %tmp2 321 } 322 323 define <4 x i32> @vqshlQsu_n32(<4 x i32>* %A) nounwind { 324 ;CHECK-LABEL: vqshlQsu_n32: 325 ;CHECK: vqshlu.s32 326 %tmp1 = load <4 x i32>* %A 327 %tmp2 = call <4 x i32> @llvm.arm.neon.vqshiftsu.v4i32(<4 x i32> %tmp1, <4 x i32> < i32 31, i32 31, i32 31, i32 31 >) 328 ret <4 x i32> %tmp2 329 } 330 331 define <2 x i64> @vqshlQsu_n64(<2 x i64>* %A) nounwind { 332 ;CHECK-LABEL: vqshlQsu_n64: 333 ;CHECK: vqshlu.s64 334 %tmp1 = load <2 x i64>* %A 335 %tmp2 = call <2 x i64> @llvm.arm.neon.vqshiftsu.v2i64(<2 x i64> %tmp1, <2 x i64> < i64 63, i64 63 >) 336 ret <2 x i64> %tmp2 337 } 338 339 declare <8 x i8> @llvm.arm.neon.vqshifts.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 340 declare <4 x i16> @llvm.arm.neon.vqshifts.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 341 declare <2 x i32> @llvm.arm.neon.vqshifts.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 342 declare <1 x i64> @llvm.arm.neon.vqshifts.v1i64(<1 x i64>, <1 x i64>) nounwind readnone 343 344 declare <8 x i8> @llvm.arm.neon.vqshiftu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 345 declare <4 x i16> @llvm.arm.neon.vqshiftu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 346 declare <2 x i32> @llvm.arm.neon.vqshiftu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 347 declare <1 x i64> @llvm.arm.neon.vqshiftu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone 348 349 declare <8 x i8> @llvm.arm.neon.vqshiftsu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 350 declare <4 x i16> @llvm.arm.neon.vqshiftsu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 351 declare <2 x i32> @llvm.arm.neon.vqshiftsu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 352 declare <1 x i64> @llvm.arm.neon.vqshiftsu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone 353 354 declare <16 x i8> @llvm.arm.neon.vqshifts.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 355 declare <8 x i16> @llvm.arm.neon.vqshifts.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 356 declare <4 x i32> @llvm.arm.neon.vqshifts.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 357 declare <2 x i64> @llvm.arm.neon.vqshifts.v2i64(<2 x i64>, <2 x i64>) nounwind readnone 358 359 declare <16 x i8> @llvm.arm.neon.vqshiftu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 360 declare <8 x i16> @llvm.arm.neon.vqshiftu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 361 declare <4 x i32> @llvm.arm.neon.vqshiftu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 362 declare <2 x i64> @llvm.arm.neon.vqshiftu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone 363 364 declare <16 x i8> @llvm.arm.neon.vqshiftsu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 365 declare <8 x i16> @llvm.arm.neon.vqshiftsu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 366 declare <4 x i32> @llvm.arm.neon.vqshiftsu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 367 declare <2 x i64> @llvm.arm.neon.vqshiftsu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone 368 369 define <8 x i8> @vqrshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 370 ;CHECK-LABEL: vqrshls8: 371 ;CHECK: vqrshl.s8 372 %tmp1 = load <8 x i8>* %A 373 %tmp2 = load <8 x i8>* %B 374 %tmp3 = call <8 x i8> @llvm.arm.neon.vqrshifts.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2) 375 ret <8 x i8> %tmp3 376 } 377 378 define <4 x i16> @vqrshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 379 ;CHECK-LABEL: vqrshls16: 380 ;CHECK: vqrshl.s16 381 %tmp1 = load <4 x i16>* %A 382 %tmp2 = load <4 x i16>* %B 383 %tmp3 = call <4 x i16> @llvm.arm.neon.vqrshifts.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2) 384 ret <4 x i16> %tmp3 385 } 386 387 define <2 x i32> @vqrshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 388 ;CHECK-LABEL: vqrshls32: 389 ;CHECK: vqrshl.s32 390 %tmp1 = load <2 x i32>* %A 391 %tmp2 = load <2 x i32>* %B 392 %tmp3 = call <2 x i32> @llvm.arm.neon.vqrshifts.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2) 393 ret <2 x i32> %tmp3 394 } 395 396 define <1 x i64> @vqrshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 397 ;CHECK-LABEL: vqrshls64: 398 ;CHECK: vqrshl.s64 399 %tmp1 = load <1 x i64>* %A 400 %tmp2 = load <1 x i64>* %B 401 %tmp3 = call <1 x i64> @llvm.arm.neon.vqrshifts.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2) 402 ret <1 x i64> %tmp3 403 } 404 405 define <8 x i8> @vqrshlu8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 406 ;CHECK-LABEL: vqrshlu8: 407 ;CHECK: vqrshl.u8 408 %tmp1 = load <8 x i8>* %A 409 %tmp2 = load <8 x i8>* %B 410 %tmp3 = call <8 x i8> @llvm.arm.neon.vqrshiftu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2) 411 ret <8 x i8> %tmp3 412 } 413 414 define <4 x i16> @vqrshlu16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 415 ;CHECK-LABEL: vqrshlu16: 416 ;CHECK: vqrshl.u16 417 %tmp1 = load <4 x i16>* %A 418 %tmp2 = load <4 x i16>* %B 419 %tmp3 = call <4 x i16> @llvm.arm.neon.vqrshiftu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2) 420 ret <4 x i16> %tmp3 421 } 422 423 define <2 x i32> @vqrshlu32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 424 ;CHECK-LABEL: vqrshlu32: 425 ;CHECK: vqrshl.u32 426 %tmp1 = load <2 x i32>* %A 427 %tmp2 = load <2 x i32>* %B 428 %tmp3 = call <2 x i32> @llvm.arm.neon.vqrshiftu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2) 429 ret <2 x i32> %tmp3 430 } 431 432 define <1 x i64> @vqrshlu64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 433 ;CHECK-LABEL: vqrshlu64: 434 ;CHECK: vqrshl.u64 435 %tmp1 = load <1 x i64>* %A 436 %tmp2 = load <1 x i64>* %B 437 %tmp3 = call <1 x i64> @llvm.arm.neon.vqrshiftu.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2) 438 ret <1 x i64> %tmp3 439 } 440 441 define <16 x i8> @vqrshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 442 ;CHECK-LABEL: vqrshlQs8: 443 ;CHECK: vqrshl.s8 444 %tmp1 = load <16 x i8>* %A 445 %tmp2 = load <16 x i8>* %B 446 %tmp3 = call <16 x i8> @llvm.arm.neon.vqrshifts.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2) 447 ret <16 x i8> %tmp3 448 } 449 450 define <8 x i16> @vqrshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 451 ;CHECK-LABEL: vqrshlQs16: 452 ;CHECK: vqrshl.s16 453 %tmp1 = load <8 x i16>* %A 454 %tmp2 = load <8 x i16>* %B 455 %tmp3 = call <8 x i16> @llvm.arm.neon.vqrshifts.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2) 456 ret <8 x i16> %tmp3 457 } 458 459 define <4 x i32> @vqrshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 460 ;CHECK-LABEL: vqrshlQs32: 461 ;CHECK: vqrshl.s32 462 %tmp1 = load <4 x i32>* %A 463 %tmp2 = load <4 x i32>* %B 464 %tmp3 = call <4 x i32> @llvm.arm.neon.vqrshifts.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2) 465 ret <4 x i32> %tmp3 466 } 467 468 define <2 x i64> @vqrshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 469 ;CHECK-LABEL: vqrshlQs64: 470 ;CHECK: vqrshl.s64 471 %tmp1 = load <2 x i64>* %A 472 %tmp2 = load <2 x i64>* %B 473 %tmp3 = call <2 x i64> @llvm.arm.neon.vqrshifts.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2) 474 ret <2 x i64> %tmp3 475 } 476 477 define <16 x i8> @vqrshlQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 478 ;CHECK-LABEL: vqrshlQu8: 479 ;CHECK: vqrshl.u8 480 %tmp1 = load <16 x i8>* %A 481 %tmp2 = load <16 x i8>* %B 482 %tmp3 = call <16 x i8> @llvm.arm.neon.vqrshiftu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2) 483 ret <16 x i8> %tmp3 484 } 485 486 define <8 x i16> @vqrshlQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 487 ;CHECK-LABEL: vqrshlQu16: 488 ;CHECK: vqrshl.u16 489 %tmp1 = load <8 x i16>* %A 490 %tmp2 = load <8 x i16>* %B 491 %tmp3 = call <8 x i16> @llvm.arm.neon.vqrshiftu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2) 492 ret <8 x i16> %tmp3 493 } 494 495 define <4 x i32> @vqrshlQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 496 ;CHECK-LABEL: vqrshlQu32: 497 ;CHECK: vqrshl.u32 498 %tmp1 = load <4 x i32>* %A 499 %tmp2 = load <4 x i32>* %B 500 %tmp3 = call <4 x i32> @llvm.arm.neon.vqrshiftu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2) 501 ret <4 x i32> %tmp3 502 } 503 504 define <2 x i64> @vqrshlQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 505 ;CHECK-LABEL: vqrshlQu64: 506 ;CHECK: vqrshl.u64 507 %tmp1 = load <2 x i64>* %A 508 %tmp2 = load <2 x i64>* %B 509 %tmp3 = call <2 x i64> @llvm.arm.neon.vqrshiftu.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2) 510 ret <2 x i64> %tmp3 511 } 512 513 declare <8 x i8> @llvm.arm.neon.vqrshifts.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 514 declare <4 x i16> @llvm.arm.neon.vqrshifts.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 515 declare <2 x i32> @llvm.arm.neon.vqrshifts.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 516 declare <1 x i64> @llvm.arm.neon.vqrshifts.v1i64(<1 x i64>, <1 x i64>) nounwind readnone 517 518 declare <8 x i8> @llvm.arm.neon.vqrshiftu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 519 declare <4 x i16> @llvm.arm.neon.vqrshiftu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 520 declare <2 x i32> @llvm.arm.neon.vqrshiftu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 521 declare <1 x i64> @llvm.arm.neon.vqrshiftu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone 522 523 declare <16 x i8> @llvm.arm.neon.vqrshifts.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 524 declare <8 x i16> @llvm.arm.neon.vqrshifts.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 525 declare <4 x i32> @llvm.arm.neon.vqrshifts.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 526 declare <2 x i64> @llvm.arm.neon.vqrshifts.v2i64(<2 x i64>, <2 x i64>) nounwind readnone 527 528 declare <16 x i8> @llvm.arm.neon.vqrshiftu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 529 declare <8 x i16> @llvm.arm.neon.vqrshiftu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 530 declare <4 x i32> @llvm.arm.neon.vqrshiftu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 531 declare <2 x i64> @llvm.arm.neon.vqrshiftu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone 532