1550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// REQUIRES: arm-registered-target 2550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: %clang_cc1 -triple thumbv7-apple-darwin \ 3550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -target-abi apcs-gnu \ 4550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -target-cpu cortex-a8 \ 5550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -mfloat-abi soft \ 6550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -target-feature +soft-float-abi \ 7550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -ffreestanding \ 8550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// RUN: -emit-llvm -w -o - %s | FileCheck %s 9550a9d823a939366a9f776b58f18883acd905a93Bob Wilson 10550a9d823a939366a9f776b58f18883acd905a93Bob Wilson#include <arm_neon.h> 11550a9d823a939366a9f776b58f18883acd905a93Bob Wilson 12550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// Radar 11998303: Avoid using i64 types for vld1q_lane and vst1q_lane Neon 13550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// intrinsics with <2 x i64> vectors to avoid poor code for i64 in the backend. 14550a9d823a939366a9f776b58f18883acd905a93Bob Wilsonvoid t1(uint64_t *src, uint8_t *dst) { 15550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: @t1 16550a9d823a939366a9f776b58f18883acd905a93Bob Wilson uint64x2_t q = vld1q_u64(src); 17550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: call <2 x i64> @llvm.arm.neon.vld1.v2i64 18550a9d823a939366a9f776b58f18883acd905a93Bob Wilson vst1q_lane_u64(dst, q, 1); 19550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: bitcast <16 x i8> %{{.*}} to <2 x i64> 20550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: shufflevector <2 x i64> 21550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: call void @llvm.arm.neon.vst1.v1i64 22550a9d823a939366a9f776b58f18883acd905a93Bob Wilson} 23550a9d823a939366a9f776b58f18883acd905a93Bob Wilson 24550a9d823a939366a9f776b58f18883acd905a93Bob Wilsonvoid t2(uint64_t *src1, uint8_t *src2, uint64x2_t *dst) { 25550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: @t2 26550a9d823a939366a9f776b58f18883acd905a93Bob Wilson uint64x2_t q = vld1q_u64(src1); 27550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: call <2 x i64> @llvm.arm.neon.vld1.v2i64 28550a9d823a939366a9f776b58f18883acd905a93Bob Wilson q = vld1q_lane_u64(src2, q, 0); 29550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: shufflevector <2 x i64> 30550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: call <1 x i64> @llvm.arm.neon.vld1.v1i64 31550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: shufflevector <1 x i64> 32550a9d823a939366a9f776b58f18883acd905a93Bob Wilson *dst = q; 33550a9d823a939366a9f776b58f18883acd905a93Bob Wilson// CHECK: store <2 x i64> 34550a9d823a939366a9f776b58f18883acd905a93Bob Wilson} 35