diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-05-16 21:00:24 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-05-16 21:00:24 +0000 |
| commit | e8a0ae7346793d5a6a3c79e7cb7bcfb3bbfb9e50 (patch) | |
| tree | 3bf63b3f93ec5210ea5ee59615a852d3ca9ac4e4 /llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp | |
| parent | 2e0f6c9b2141df80bef932ecbaae182d70c5a844 (diff) | |
| download | bcm5719-llvm-e8a0ae7346793d5a6a3c79e7cb7bcfb3bbfb9e50.tar.gz bcm5719-llvm-e8a0ae7346793d5a6a3c79e7cb7bcfb3bbfb9e50.zip | |
[Hexagon] Mark HVX vector predicate bitwise ops as legal, add patterns
llvm-svn: 332525
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp')
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp index 281cfcf9f89..b75a7f2bde9 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp @@ -116,16 +116,6 @@ HexagonTargetLowering::initializeHVXLowering() { } for (MVT T : LegalV) { - MVT BoolV = MVT::getVectorVT(MVT::i1, T.getVectorNumElements()); - setOperationAction(ISD::BUILD_VECTOR, BoolV, Custom); - setOperationAction(ISD::CONCAT_VECTORS, BoolV, Custom); - setOperationAction(ISD::INSERT_SUBVECTOR, BoolV, Custom); - setOperationAction(ISD::INSERT_VECTOR_ELT, BoolV, Custom); - setOperationAction(ISD::EXTRACT_SUBVECTOR, BoolV, Custom); - setOperationAction(ISD::EXTRACT_VECTOR_ELT, BoolV, Custom); - } - - for (MVT T : LegalV) { if (T == ByteV) continue; // Promote all shuffles to operate on vectors of bytes. @@ -174,9 +164,35 @@ HexagonTargetLowering::initializeHVXLowering() { // Promote all shuffles to operate on vectors of bytes. setPromoteTo(ISD::VECTOR_SHUFFLE, T, ByteW); } + } + // Boolean vectors. + + for (MVT T : LegalW) { + // Boolean types for vector pairs will overlap with the boolean + // types for single vectors, e.g. + // v64i8 -> v64i1 (single) + // v64i16 -> v64i1 (pair) + // Set these actions first, and allow the single actions to overwrite + // any duplicates. + MVT BoolW = MVT::getVectorVT(MVT::i1, T.getVectorNumElements()); + setOperationAction(ISD::SETCC, BoolW, Custom); + setOperationAction(ISD::AND, BoolW, Custom); + setOperationAction(ISD::OR, BoolW, Custom); + setOperationAction(ISD::XOR, BoolW, Custom); + } + + for (MVT T : LegalV) { MVT BoolV = MVT::getVectorVT(MVT::i1, T.getVectorNumElements()); - setOperationAction(ISD::SETCC, BoolV, Custom); + setOperationAction(ISD::BUILD_VECTOR, BoolV, Custom); + setOperationAction(ISD::CONCAT_VECTORS, BoolV, Custom); + setOperationAction(ISD::INSERT_SUBVECTOR, BoolV, Custom); + setOperationAction(ISD::INSERT_VECTOR_ELT, BoolV, Custom); + setOperationAction(ISD::EXTRACT_SUBVECTOR, BoolV, Custom); + setOperationAction(ISD::EXTRACT_VECTOR_ELT, BoolV, Custom); + setOperationAction(ISD::AND, BoolV, Legal); + setOperationAction(ISD::OR, BoolV, Legal); + setOperationAction(ISD::XOR, BoolV, Legal); } } |

