llvm-project/clang/utils/TableGen
Simon Tatham c32af4447f [ARM,MVE] Add the vmovnbq,vmovntq intrinsic family.
Summary:
These are in some sense the inverse of vmovl[bt]q: they take a vector
of n wide elements and truncate each to half its width. So they only
write half a vector's worth of output data, and therefore they also
take an 'inactive' parameter to provide the other half of the data in
the output vector. So vmovnb overwrites the even lanes of 'inactive'
with the narrowed values from the main input, and vmovnt overwrites
the odd lanes.

LLVM had existing codegen which generates these MVE instructions in
response to IR that takes two vectors of wide elements, or two vectors
of narrow ones. But in this case, we have one vector of each. So my
clang codegen strategy is to narrow the input vector of wide elements
by simply reinterpreting it as the output type, and then we have two
narrow vectors and can represent the operation as a vector shuffle
that interleaves lanes from both of them.

Even so, not all the cases I needed ended up being selected as a
single MVE instruction, so I've added a couple more patterns that spot
combinations of the 'MVEvmovn' and 'ARMvrev32' SDNodes which can be
generated as a VMOVN instruction with operands swapped.

This commit adds the unpredicated forms only.

Reviewers: dmgreen, miyuki, MarkMurrayARM, ostannard

Reviewed By: dmgreen

Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D74337
2020-02-18 09:34:50 +00:00
..
ASTTableGen.cpp Add the ability to use property-based serialization for "cased" types. 2019-12-16 13:33:59 -05:00
ASTTableGen.h Add the ability for properties to be conditional on other properties. 2019-12-16 13:34:00 -05:00
CMakeLists.txt Abstract serialization: TableGen "basic" reader/writer CRTP 2019-12-14 00:16:48 -05:00
ClangASTNodesEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ClangASTPropertiesEmitter.cpp Forward {read,write}SomeEnumType to {read,write}Enum instead of 2019-12-16 13:34:00 -05:00
ClangAttrEmitter.cpp [FIX] Remove pointer in attribute to eliminate leaks (see D71830) 2020-02-15 18:09:54 -06:00
ClangCommentCommandInfoEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ClangCommentHTMLNamedCharacterReferenceEmitter.cpp Fix one round of implicit conversions found by g++5. 2020-01-29 01:52:48 +01:00
ClangCommentHTMLTagsEmitter.cpp Fix one round of implicit conversions found by g++5. 2020-01-29 01:52:48 +01:00
ClangDataCollectorsEmitter.cpp Use scope qualifiers in Clang's tblgen backends to get useful 2019-10-01 23:12:57 +00:00
ClangDiagnosticsEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ClangOpcodesEmitter.cpp Use scope qualifiers in Clang's tblgen backends to get useful 2019-10-01 23:12:57 +00:00
ClangOpenCLBuiltinEmitter.cpp [OpenCL] Reduce size of builtin function tables 2020-02-06 15:08:32 +00:00
ClangOptionDocEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ClangSACheckersEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ClangTypeNodesEmitter.cpp Enable better node-hierarchy metaprogramming; NFC. 2019-12-14 00:16:47 -05:00
MveEmitter.cpp [ARM,MVE] Add the vmovnbq,vmovntq intrinsic family. 2020-02-18 09:34:50 +00:00
NeonEmitter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
TableGen.cpp Abstract serialization: TableGen the (de)serialization code for Types. 2019-12-14 00:17:01 -05:00
TableGenBackends.h Abstract serialization: TableGen "basic" reader/writer CRTP 2019-12-14 00:16:48 -05:00