New user self-registration is currently disabled. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Bug 1191 - Clang/ARM transforms VMLA into VMUL+VADD under our feet!
Clang/ARM transforms VMLA into VMUL+VADD under our feet!
Status: RESOLVED FIXED
Product: Eigen
Classification: Unclassified
Component: Core - vectorization
3.3 (current stable)
ARM - NEON Android
: Normal Unknown
Assigned To: Nobody
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2016-04-04 20:38 UTC by Benoit Jacob
Modified: 2016-04-04 20:47 UTC (History)
4 users (show)



Attachments

Description Benoit Jacob 2016-04-04 20:38:11 UTC
See e.g. http://lists.llvm.org/pipermail/llvm-dev/2013-December/068806.html

For us this is a disaster, since this means that we can't trust EIGEN_HAS_SINGLE_INSTRUCTION_MADD. So we end up mis-shooting the number of registers, and spilling!

The work-around for this is going to be to reimplement the pmadd in inline assembly.
Comment 1 Benoit Jacob 2016-04-04 20:39:52 UTC
Notes:
 * this affects all known versions of Clang/ARM, but not Aarch64.
 * this depends on -mcpu= settings. Affected settings include -mcpu=cortex-a8 and -mcpu=cortex-a7. Since the former is the default on -march=armv7-a, that is a very common case.

Note You need to log in before you can comment on or make changes to this bug.