summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>2017-03-07 09:49:31 +0000
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>2017-03-07 09:49:31 +0000
commit1d33cd398880f662cbfbb3a28c2889a617015ee6 (patch)
tree384d27ca56f02103c27cb27bc60d9e240c87124f
parent24fb250cad9ecec134287661f024dcdcc4b50d89 (diff)
downloadbcm5719-llvm-1d33cd398880f662cbfbb3a28c2889a617015ee6.tar.gz
bcm5719-llvm-1d33cd398880f662cbfbb3a28c2889a617015ee6.zip
[SystemZ] Add check VT.isSimple() in canTreateAsByteVector()
Since BB-vectorizer can produce vectors of for example 3 elements, this check is needed. Review: Ulrich Weigand llvm-svn: 297136
-rw-r--r--llvm/lib/Target/SystemZ/SystemZISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/SystemZ/vectorizer-output-3xi32.ll10
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index afc9e60bdf2..6322098e1c3 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -4737,7 +4737,7 @@ const char *SystemZTargetLowering::getTargetNodeName(unsigned Opcode) const {
// Return true if VT is a vector whose elements are a whole number of bytes
// in width.
static bool canTreatAsByteVector(EVT VT) {
- return VT.isVector() && VT.getScalarSizeInBits() % 8 == 0;
+ return VT.isVector() && VT.getScalarSizeInBits() % 8 == 0 && VT.isSimple();
}
// Try to simplify an EXTRACT_VECTOR_ELT from a vector of type VecVT
diff --git a/llvm/test/CodeGen/SystemZ/vectorizer-output-3xi32.ll b/llvm/test/CodeGen/SystemZ/vectorizer-output-3xi32.ll
new file mode 100644
index 00000000000..3e7ba609592
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/vectorizer-output-3xi32.ll
@@ -0,0 +1,10 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13
+;
+; This tescase origininates from the BB-vectorizer output.
+
+define void @fun() {
+ %1 = zext <3 x i1> zeroinitializer to <3 x i32>
+ %2 = extractelement <3 x i32> %1, i32 2
+ store i32 %2, i32* undef, align 8
+ unreachable
+}
OpenPOWER on IntegriCloud