[llvm-commits] [test-suite] r113389 - in /test-suite/trunk/SingleSource/UnitTests/Vector/NEON: ./ Makefile simple.c

Daniel Dunbar daniel at zuster.org
Sat Oct 2 09:03:36 PDT 2010


On Wed, Sep 8, 2010 at 12:28 PM, Jim Grosbach <grosbach at apple.com> wrote:
>
> On Sep 8, 2010, at 12:21 PM, Daniel Dunbar wrote:
>
>> Author: ddunbar
>> Date: Wed Sep  8 14:21:08 2010
>> New Revision: 113389
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=113389&view=rev
>> Log:
>> Sketch a simple NEON test. Not wired into build yet, because we don't have a way to detect neonability, yet.
>>
>
> Detect it when? At compile time, we (should) have a pre-defined macro, __ARM_NEON__, which is defined to '1' when NEON is available, and is undefined otherwise.

Detect it in the Makefile level infrastructure, which is where we
decide whether to run tests or not. In this case, we don't want to
even try running it without NEON support.

Eventually solved by making LNT sniff the compiler and set appropriate options.

 - Daniel

>
>
>> Added:
>>    test-suite/trunk/SingleSource/UnitTests/Vector/NEON/
>>    test-suite/trunk/SingleSource/UnitTests/Vector/NEON/Makefile
>>    test-suite/trunk/SingleSource/UnitTests/Vector/NEON/simple.c
>>
>> Added: test-suite/trunk/SingleSource/UnitTests/Vector/NEON/Makefile
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/Vector/NEON/Makefile?rev=113389&view=auto
>> ==============================================================================
>> --- test-suite/trunk/SingleSource/UnitTests/Vector/NEON/Makefile (added)
>> +++ test-suite/trunk/SingleSource/UnitTests/Vector/NEON/Makefile Wed Sep  8 14:21:08 2010
>> @@ -0,0 +1,8 @@
>> +# SingleSource/UnitTests/Vector/NEON/Makefile
>> +
>> +DIRS =
>> +LEVEL = ../../../..
>> +
>> +include $(LEVEL)/SingleSource/Makefile.singlesrc
>> +
>> +CFLAGS += -std=c99
>>
>> Added: test-suite/trunk/SingleSource/UnitTests/Vector/NEON/simple.c
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/Vector/NEON/simple.c?rev=113389&view=auto
>> ==============================================================================
>> --- test-suite/trunk/SingleSource/UnitTests/Vector/NEON/simple.c (added)
>> +++ test-suite/trunk/SingleSource/UnitTests/Vector/NEON/simple.c Wed Sep  8 14:21:08 2010
>> @@ -0,0 +1,166 @@
>> +#include <stdio.h>
>> +#include <arm_neon.h>
>> +
>> +typedef int8x16_t v16i8;
>> +typedef int16x8_t v8i16;
>> +typedef int32x4_t v4i32;
>> +
>> +typedef int8x16x2_t v16i8x2;
>> +typedef int16x8x2_t v8i16x2;
>> +typedef int32x4x2_t v4i32x2;
>> +
>> +v16i8 init_v16i8(int8_t a0, int8_t a1, int8_t a2, int8_t a3,
>> +                 int8_t a4, int8_t a5, int8_t a6, int8_t a7,
>> +                 int8_t a8, int8_t a9, int8_t a10, int8_t a11,
>> +                 int8_t a12, int8_t a13, int8_t a14, int8_t a15) {
>> +  int8_t d[16];
>> +
>> +  d[0] = a0; d[1] = a1; d[2] = a2; d[3] = a3;
>> +  d[4] = a4; d[5] = a5; d[6] = a6; d[7] = a7;
>> +  d[8] = a8; d[9] = a9; d[10] = a10; d[11] = a11;
>> +  d[12] = a12; d[13] = a13; d[14] = a14; d[15] = a15;
>> +
>> +  return vld1q_s8(d);
>> +}
>> +
>> +v8i16 init_v8i16(int16_t a0, int16_t a1, int16_t a2, int16_t a3,
>> +                 int16_t a4, int16_t a5, int16_t a6, int16_t a7) {
>> +  int16_t d[8];
>> +
>> +  d[0] = a0; d[1] = a1; d[2] = a2; d[3] = a3;
>> +  d[4] = a4; d[5] = a5; d[6] = a6; d[7] = a7;
>> +
>> +  return vld1q_s16(d);
>> +}
>> +
>> +v4i32 init_v4i32(int32_t a0, int32_t a1, int32_t a2, int32_t a3) {
>> +  int32_t d[8];
>> +
>> +  d[0] = a0; d[1] = a1; d[2] = a2; d[3] = a3;
>> +
>> +  return vld1q_s32(d);
>> +}
>> +
>> +void print_v16i8(v16i8 a) {
>> +  int8_t d[16];
>> +  vst1q_s8(d, a);
>> +  printf("(%d, %d, %d, %d, %d, %d, %d, %d, "
>> +          "%d, %d, %d, %d, %d, %d, %d, %d)",
>> +          d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
>> +          d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
>> +}
>> +void print_v8i16(v8i16 a) {
>> +  int16_t d[8];
>> +  vst1q_s16(d, a);
>> +  printf("(%d, %d, %d, %d, %d, %d, %d, %d)",
>> +          d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]);
>> +}
>> +void print_v4i32(v4i32 a) {
>> +  int32_t d[4];
>> +  vst1q_s32(d, a);
>> +  printf("(%d, %d, %d, %d)", d[0], d[1], d[2], d[3]);
>> +}
>> +
>> +void test_basic() {
>> +  printf("%s\n", __FUNCTION__);
>> +
>> +  v16i8 a0_0 = vmovq_n_s8(1);
>> +  v16i8 a0_1 = init_v16i8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
>> +  v16i8 a0_2 = vaddq_s8(a0_0, a0_1);
>> +  printf("a0_0: ");
>> +  print_v16i8(a0_0);
>> +  printf("\n");
>> +  printf("a0_1: ");
>> +  print_v16i8(a0_1);
>> +  printf("\n");
>> +  printf("a0_2: ");
>> +  print_v16i8(a0_2);
>> +  printf("\n");
>> +
>> +  v8i16 a1_0 = vmovq_n_s16(1);
>> +  v8i16 a1_1 = init_v8i16(0, 1, 2, 3, 4, 5, 6, 7);
>> +  v8i16 a1_2 = vaddq_s16(a1_0, a1_1);
>> +  printf("a1_0: ");
>> +  print_v8i16(a1_0);
>> +  printf("\n");
>> +  printf("a1_1: ");
>> +  print_v8i16(a1_1);
>> +  printf("\n");
>> +  printf("a1_2: ");
>> +  print_v8i16(a1_2);
>> +  printf("\n");
>> +
>> +  v4i32 a2_0 = vmovq_n_s32(1);
>> +  v4i32 a2_1 = init_v4i32(0, 1, 2, 3);
>> +  v4i32 a2_2 = vaddq_s32(a2_0, a2_1);
>> +  printf("a2_0: ");
>> +  print_v4i32(a2_0);
>> +  printf("\n");
>> +  printf("a2_1: ");
>> +  print_v4i32(a2_1);
>> +  printf("\n");
>> +  printf("a2_2: ");
>> +  print_v4i32(a2_2);
>> +  printf("\n");
>> +}
>> +
>> +void test_zip() {
>> +  printf("%s\n", __FUNCTION__);
>> +
>> +  v16i8 a0_0 = init_v16i8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
>> +  v16i8 a0_1 = init_v16i8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
>> +  v16i8x2 a0_2 = vzipq_s8(a0_0, a0_1);
>> +  v16i8x2 a0_3 = vuzpq_s8(a0_2.val[0], a0_2.val[1]);
>> +  printf("a0_2.val[0]: ");
>> +  print_v16i8(a0_2.val[0]);
>> +  printf("\n");
>> +  printf("a0_2.val[1]: ");
>> +  print_v16i8(a0_2.val[1]);
>> +  printf("\n");
>> +  printf("a0_3.val[0]: ");
>> +  print_v16i8(a0_3.val[0]);
>> +  printf("\n");
>> +  printf("a0_3.val[1]: ");
>> +  print_v16i8(a0_3.val[1]);
>> +  printf("\n");
>> +
>> +  v8i16 a1_0 = init_v8i16(0, 1, 2, 3, 4, 5, 6, 7);
>> +  v8i16 a1_1 = init_v8i16(7, 6, 5, 4, 3, 2, 1, 0);
>> +  v8i16x2 a1_2 = vzipq_s16(a1_0, a1_1);
>> +  v8i16x2 a1_3 = vuzpq_s16(a1_2.val[0], a1_2.val[1]);
>> +  printf("a1_2.val[0]: ");
>> +  print_v8i16(a1_2.val[0]);
>> +  printf("\n");
>> +  printf("a1_2.val[1]: ");
>> +  print_v8i16(a1_2.val[1]);
>> +  printf("\n");
>> +  printf("a1_3.val[0]: ");
>> +  print_v8i16(a1_3.val[0]);
>> +  printf("\n");
>> +  printf("a1_3.val[1]: ");
>> +  print_v8i16(a1_3.val[1]);
>> +  printf("\n");
>> +
>> +  v4i32 a2_0 = init_v4i32(0, 1, 2, 3);
>> +  v4i32 a2_1 = init_v4i32(3, 2, 1, 0);
>> +  v4i32x2 a2_2 = vzipq_s32(a2_0, a2_1);
>> +  v4i32x2 a2_3 = vuzpq_s32(a2_2.val[0], a2_2.val[1]);
>> +  printf("a2_2.val[0]: ");
>> +  print_v4i32(a2_2.val[0]);
>> +  printf("\n");
>> +  printf("a2_2.val[1]: ");
>> +  print_v4i32(a2_2.val[1]);
>> +  printf("\n");
>> +  printf("a2_3.val[0]: ");
>> +  print_v4i32(a2_3.val[0]);
>> +  printf("\n");
>> +  printf("a2_3.val[1]: ");
>> +  print_v4i32(a2_3.val[1]);
>> +  printf("\n");
>> +}
>> +
>> +int main() {
>> +  test_basic();
>> +  test_zip();
>> +  return 0;
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>




More information about the llvm-commits mailing list