Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

incomatible type errors when compiling on Arm #66

Open
bedroge opened this issue Mar 14, 2024 · 2 comments
Open

incomatible type errors when compiling on Arm #66

bedroge opened this issue Mar 14, 2024 · 2 comments

Comments

@bedroge
Copy link

bedroge commented Mar 14, 2024

I'm trying to install dbarts with R 4.2.2 (and GCC 12.2.0, using EasyBuild) on an AWS Arm-based VM, but on both Neoverse N1 and V1 CPUs I'm getting the following errors:

partition_neon.c: In function vmovemask_u8:
partition_neon.c:16:3: note: use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subparts
   16 |   uint8x16_t vmask = vandq_u8(input, vdupq_n_u8(0x80));
      |   ^~~~~~~~~~
partition_neon.c:16:31: error: incompatible type for argument 1 of vandq_u8
   16 |   uint8x16_t vmask = vandq_u8(input, vdupq_n_u8(0x80));
      |                               ^~~~~
      |                               |
      |                               uint16x8_t
In file included from ../include/misc/intrinsic.h:9,
                 from partition_neon.c:8:
/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_v1/software/GCCcore/12.2.0/lib/gcc/aarch64-unknown-linux-gnu/12.2.0/include/arm_neon.h:1120:22: note: expected uint8x16_t but argument is of type uint16x8_t
 1120 | vandq_u8 (uint8x16_t __a, uint8x16_t __b)
      |           ~~~~~~~~~~~^~~
partition_neon.c:19:27: error: incompatible type for argument 2 of vshlq_u8
   19 |   vmask = vshlq_u8(vmask, vshift);
      |                           ^~~~~~
      |                           |
      |                           uint8x16_t
/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_v1/software/GCCcore/12.2.0/lib/gcc/aarch64-unknown-linux-gnu/12.2.0/include/arm_neon.h:23830:37: note: expected int8x16_t but argument is of type uint8x16_t
23830 | vshlq_u8 (uint8x16_t __a, int8x16_t __b)
      |                           ~~~~~~~~~~^~~
In file included from partition_neon.c:29:
partition_body.c: In function misc_partitionRange_neon:
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:173:30: note: in expansion of macro movemask
  173 |     lh_mask = (unsigned int) movemask(lh_comp);
      |                              ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:175:30: note: in expansion of macro movemask
  175 |     rh_mask = (unsigned int) movemask(rh_comp);
      |                              ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:181:34: note: in expansion of macro movemask
  181 |         lh_mask = (unsigned int) movemask(lh_comp);
      |                                  ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:187:34: note: in expansion of macro movemask
  187 |         rh_mask = (unsigned int) movemask(rh_comp);
      |                                  ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
In file included from partition_neon.c:37:
partition_body.c: In function misc_partitionIndices_neon:
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:255:30: note: in expansion of macro movemask
  255 |     lh_mask = (unsigned int) movemask(lh_comp);
      |                              ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:257:30: note: in expansion of macro movemask
  257 |     rh_mask = (unsigned int) movemask(rh_comp);
      |                              ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:263:34: note: in expansion of macro movemask
  263 |         lh_mask = (unsigned int) movemask(lh_comp);
      |                                  ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
partition_body.c:147:38: error: incompatible type for argument 1 of vmovemask_u8
  147 | #  define movemask(_X_) vmovemask_u8(vreinterpretq_u8_u16(_X_))
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      |
      |                                      uint8x16_t
partition_body.c:269:34: note: in expansion of macro movemask
  269 |         rh_mask = (unsigned int) movemask(rh_comp);
      |                                  ^~~~~~~~
partition_neon.c:12:29: note: expected uint16x8_t but argument is of type uint8x16_t
   12 | int vmovemask_u8(uint16x8_t input)
      |                  ~~~~~~~~~~~^~~~~
make[1]: *** [Makefile:163: partition_neon.o] Error 1
make[1]: Leaving directory '/tmp/bot/easybuild/build/R/4.2.2/foss-2022b/dbarts/dbarts/src/misc'
make: *** [Makevars:51: sublibs] Error 1
ERROR: compilation failed for package dbarts

Do you know how to fix this?

@bedroge
Copy link
Author

bedroge commented Mar 26, 2024

Adding -flax-vector-conversions, as suggested in the error message, does work. Is that indeed the recommended way to compile the package on Arm?

@boegel
Copy link

boegel commented Mar 26, 2024

Adding -flax-vector-conversions, as suggested in the error message, does work. Is that indeed the recommended way to compile the package on Arm?

@bedroge Top answer at https://stackoverflow.com/questions/67311569/what-does-flax-vector-conversions-exactly-mean-for-arm-compiler seems to confirm that using this option is fine for legacy code (as is the case here)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants