diff options
Diffstat (limited to 'test/CodeGen/arm64_vext.c')
-rw-r--r-- | test/CodeGen/arm64_vext.c | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/test/CodeGen/arm64_vext.c b/test/CodeGen/arm64_vext.c new file mode 100644 index 000000000000..6c3fe73399a1 --- /dev/null +++ b/test/CodeGen/arm64_vext.c @@ -0,0 +1,239 @@ +// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s + +// Test ARM64 extract intrinsics +// can use as back end test by adding a run line with +// -check-prefix=CHECK-CODEGEN on the FileCheck + +#include <arm_neon.h> + +void test_vext_s8() +{ + // CHECK: test_vext_s8 + int8x8_t xS8x8; + xS8x8 = vext_s8(xS8x8, xS8x8, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_s8: + // CHECK-CODEGEN: {{ext.8.*#1}} +} + +void test_vext_u8() +{ + // CHECK: test_vext_u8 + uint8x8_t xU8x8; + xU8x8 = vext_u8(xU8x8, xU8x8, 2); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_u8: + // CHECK-CODEGEN: {{ext.8.*#2}} +} + +void test_vext_p8() +{ + // CHECK: test_vext_p8 + poly8x8_t xP8x8; + xP8x8 = vext_p8(xP8x8, xP8x8, 3); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_p8: + // CHECK-CODEGEN: {{ext.8.*#3}} +} + +void test_vext_s16() +{ + // CHECK: test_vext_s16 + int16x4_t xS16x4; + xS16x4 = vext_s16(xS16x4, xS16x4, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_s16: + // CHECK-CODEGEN: {{ext.8.*#2}} +} + +void test_vext_u16() +{ + // CHECK: test_vext_u16 + uint16x4_t xU16x4; + xU16x4 = vext_u16(xU16x4, xU16x4, 2); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_u16: + // CHECK-CODEGEN: {{ext.8.*#4}} +} + +void test_vext_p16() +{ + // CHECK: test_vext_p16 + poly16x4_t xP16x4; + xP16x4 = vext_p16(xP16x4, xP16x4, 3); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_p16: + // CHECK-CODEGEN: {{ext.8.*#6}} +} + +void test_vext_s32() +{ + // CHECK: test_vext_s32 + int32x2_t xS32x2; + xS32x2 = vext_s32(xS32x2, xS32x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_s32: + // CHECK-CODEGEN: {{ext.8.*#4}} +} + +void test_vext_u32() +{ + // CHECK: test_vext_u32 + uint32x2_t xU32x2; + xU32x2 = vext_u32(xU32x2, xU32x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_u32: + // CHECK-CODEGEN: {{ext.8.*#4}} +} + +void test_vext_f32() +{ + // CHECK: test_vext_f32 + float32x2_t xF32x2; + xF32x2 = vext_f32(xF32x2, xF32x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_f32: + // CHECK-CODEGEN: {{ext.8.*#4}} +} + +void test_vext_s64() +{ + // CHECK: test_vext_s64 + int64x1_t xS64x1; + // FIXME don't use 1 as index or check for now, clang has a bug? + xS64x1 = vext_s64(xS64x1, xS64x1, /*1*/0); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_s64: + // CHECK_FIXME: {{ext.8.*#0}} +} + +void test_vext_u64() +{ + // CHECK: test_vext_u64 + uint64x1_t xU64x1; + // FIXME don't use 1 as index or check for now, clang has a bug? + xU64x1 = vext_u64(xU64x1, xU64x1, /*1*/0); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vext_u64: + // CHECK_FIXME: {{ext.8.*#0}} +} + +void test_vextq_s8() +{ + // CHECK: test_vextq_s8 + int8x16_t xS8x16; + xS8x16 = vextq_s8(xS8x16, xS8x16, 4); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_s8: + // CHECK-CODEGEN: {{ext.16.*#4}} +} + +void test_vextq_u8() +{ + // CHECK: test_vextq_u8 + uint8x16_t xU8x16; + xU8x16 = vextq_u8(xU8x16, xU8x16, 5); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_u8: + // CHECK-CODEGEN: {{ext.16.*#5}} +} + +void test_vextq_p8() +{ + // CHECK: test_vextq_p8 + poly8x16_t xP8x16; + xP8x16 = vextq_p8(xP8x16, xP8x16, 6); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_p8: + // CHECK-CODEGEN: {{ext.16.*#6}} +} + +void test_vextq_s16() +{ + // CHECK: test_vextq_s16 + int16x8_t xS16x8; + xS16x8 = vextq_s16(xS16x8, xS16x8, 7); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_s16: + // CHECK-CODEGEN: {{ext.16.*#14}} +} + +void test_vextq_u16() +{ + // CHECK: test_vextq_u16 + uint16x8_t xU16x8; + xU16x8 = vextq_u16(xU16x8, xU16x8, 4); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_u16: + // CHECK-CODEGEN: {{ext.16.*#8}} +} + +void test_vextq_p16() +{ + // CHECK: test_vextq_p16 + poly16x8_t xP16x8; + xP16x8 = vextq_p16(xP16x8, xP16x8, 5); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_p16: + // CHECK-CODEGEN: {{ext.16.*#10}} +} + +void test_vextq_s32() +{ + // CHECK: test_vextq_s32 + int32x4_t xS32x4; + xS32x4 = vextq_s32(xS32x4, xS32x4, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_s32: + // CHECK-CODEGEN: {{ext.16.*#4}} +} + +void test_vextq_u32() +{ + // CHECK: test_vextq_u32 + uint32x4_t xU32x4; + xU32x4 = vextq_u32(xU32x4, xU32x4, 2); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_u32: + // CHECK-CODEGEN: {{ext.16.*#8}} +} + +void test_vextq_f32() +{ + // CHECK: test_vextq_f32 + float32x4_t xF32x4; + xF32x4 = vextq_f32(xF32x4, xF32x4, 3); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_f32: + // CHECK-CODEGEN: {{ext.16.*#12}} +} + +void test_vextq_s64() +{ + // CHECK: test_vextq_s64 + int64x2_t xS64x2; + xS64x2 = vextq_s64(xS64x2, xS64x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_s64: + // CHECK-CODEGEN: {{ext.16.*#8}} +} + +void test_vextq_u64() +{ + // CHECK: test_vextq_u64 + uint64x2_t xU64x2; + xU64x2 = vextq_u64(xU64x2, xU64x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_u64: + // CHECK-CODEGEN: {{ext.16.*#8}} +} + +void test_vextq_f64() +{ + // CHECK: test_vextq_f64 + float64x2_t xF64x2; + xF64x2 = vextq_f64(xF64x2, xF64x2, 1); + // CHECK: shufflevector + // CHECK-CODEGEN: test_vextq_u64: + // CHECK-CODEGEN: {{ext.16.*#8}} +} |