summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Hexagon
diff options
context:
space:
mode:
authorRon Lieberman <ronl@codeaurora.org>2017-10-02 00:16:15 +0000
committerRon Lieberman <ronl@codeaurora.org>2017-10-02 00:16:15 +0000
commitf90493d220acae49407a6142c9ddd6841c11fc2b (patch)
tree0038b8a7e2ee0b989ad403a4c6b7e9b5904456c5 /llvm/lib/Target/Hexagon
parent6e025a3ecc92c818bc7efd8db2d8a960adb0322e (diff)
downloadbcm5719-llvm-f90493d220acae49407a6142c9ddd6841c11fc2b.tar.gz
bcm5719-llvm-f90493d220acae49407a6142c9ddd6841c11fc2b.zip
[Hexagon] Patch to Extract i1 element from vector of i1
This patch extracts 1 element from vector consisting of elements of size 1 bit at given index. llvm-svn: 314641
Diffstat (limited to 'llvm/lib/Target/Hexagon')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonISelLowering.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
index fcde4224a00..0d2b27f089e 100644
--- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
@@ -2750,7 +2750,13 @@ HexagonTargetLowering::LowerEXTRACT_VECTOR(SDValue Op,
MVT SVT = VecVT.getSimpleVT();
uint64_t W = CW->getZExtValue();
- if (W == 32) {
+ if (W == 1) {
+ MVT LocVT = MVT::getIntegerVT(SVT.getSizeInBits());
+ SDValue VecCast = DAG.getNode(ISD::BITCAST, dl, LocVT, Vec);
+ SDValue Shifted = DAG.getNode(ISD::SRA, dl, LocVT, VecCast, Offset);
+ return DAG.getNode(ISD::AND, dl, LocVT, Shifted,
+ DAG.getConstant(1, dl, LocVT));
+ } else if (W == 32) {
// Translate this node into EXTRACT_SUBREG.
unsigned Subreg = (X == 0) ? Hexagon::isub_lo : 0;
OpenPOWER on IntegriCloud