summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-08-08 13:52:45 +0000
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-08-08 13:52:45 +0000
commit979dcb6f09f5209489ac6ddc472d4aa7b2d2851a (patch)
treeb5c20164d0590cda129eed04c722919d743f9f3a /llvm/lib/Target/PowerPC
parent75b84fc5cee90696878caf995c77491043cf342e (diff)
downloadbcm5719-llvm-979dcb6f09f5209489ac6ddc472d4aa7b2d2851a.tar.gz
bcm5719-llvm-979dcb6f09f5209489ac6ddc472d4aa7b2d2851a.zip
[PowerPC] Don't crash on larger splats achieved through 1-byte splats
We've implemented a 1-byte splat using XXSPLTISB on P9. However, LLVM will produce a 1-byte splat even for wider element BUILD_VECTOR nodes. This patch prevents crashing in that situation. Differential Revision: https://reviews.llvm.org/D35650 llvm-svn: 310358
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelLowering.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 2c0936b1c64..204bdcc329c 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -7650,6 +7650,15 @@ SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op,
return DAG.getBitcast(Op.getValueType(), NewBV);
return NewBV;
}
+
+ // BuildVectorSDNode::isConstantSplat() is actually pretty smart. It'll
+ // detect that constant splats like v8i16: 0xABAB are really just splats
+ // of a 1-byte constant. In this case, we need to convert the node to a
+ // splat of v16i8 and a bitcast.
+ if (Op.getValueType() != MVT::v16i8)
+ return DAG.getBitcast(Op.getValueType(),
+ DAG.getConstant(SplatBits, dl, MVT::v16i8));
+
return Op;
}
OpenPOWER on IntegriCloud