Recommit ARM-NEON: make type modifiers orthogonal and allow multiple modifiers.
authorTim Northover <t.p.northover@gmail.com>
Fri, 11 Oct 2019 12:46:47 +0000 (13:46 +0100)
committerTim Northover <t.p.northover@gmail.com>
Tue, 26 Nov 2019 09:21:47 +0000 (09:21 +0000)
commit78ad22e0cc6390fcd44b2b7b5132f1b960ff975d
tree14954d79ac2285a3bfa510543ad06f2d1fe0d0a3
parenta2601a4116f6024b45fc6fbbbb53777d2f6a3cd3
Recommit ARM-NEON: make type modifiers orthogonal and allow multiple modifiers.

The modifier system used to mutate types on NEON intrinsic definitions had a
separate letter for all kinds of transformations that might be needed, and we
were quite quickly running out of letters to use. This patch converts to a much
smaller set of orthogonal modifiers that can be applied together to achieve the
desired effect.

When merging with downstream it is likely to cause a conflict with any local
modifications to the .td files. There is a new script in
utils/convert_arm_neon.py that was used to convert all .td definitions and I
would suggest running it on the last downstream version of those files before
this commit rather than resolving conflicts manually.

The original version broke vcreate_* because it became a macro and didn't
apply the normal integer promotion rules before bitcasting to a vector.
This adds a temporary.
clang/include/clang/Basic/arm_fp16.td
clang/include/clang/Basic/arm_neon.td
clang/include/clang/Basic/arm_neon_incl.td
clang/test/CodeGen/aarch64-neon-intrinsics.c
clang/test/CodeGen/arm_neon_intrinsics.c
clang/utils/TableGen/NeonEmitter.cpp
clang/utils/convert_arm_neon.py [new file with mode: 0644]