aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@mips.com>2013-01-04 20:06:01 +0000
committerAkira Hatanaka <ahatanaka@mips.com>2013-01-04 20:06:01 +0000
commite13f441e002b95bb64d883d173f6aff9615556fd (patch)
tree2ae1d23ab64c4af7cf55510a89c89ad60fae3b32
parent1ebe5fce8ed51ab7e3908458bc5e2f0f24e0b21b (diff)
[mips] MipsTargetLowering::getSetCCResultType should return a vector type if
vectors are being compared. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171517 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Mips/MipsISelLowering.cpp4
-rw-r--r--test/CodeGen/Mips/vector-setcc.ll16
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/Target/Mips/MipsISelLowering.cpp b/lib/Target/Mips/MipsISelLowering.cpp
index af7498b0e9..a309040576 100644
--- a/lib/Target/Mips/MipsISelLowering.cpp
+++ b/lib/Target/Mips/MipsISelLowering.cpp
@@ -520,7 +520,9 @@ MipsTargetLowering::allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const {
}
EVT MipsTargetLowering::getSetCCResultType(EVT VT) const {
- return MVT::i32;
+ if (!VT.isVector())
+ return MVT::i32;
+ return VT.changeVectorElementTypeToInteger();
}
// SelectMadd -
diff --git a/test/CodeGen/Mips/vector-setcc.ll b/test/CodeGen/Mips/vector-setcc.ll
new file mode 100644
index 0000000000..aeff4918c8
--- /dev/null
+++ b/test/CodeGen/Mips/vector-setcc.ll
@@ -0,0 +1,16 @@
+; RUN: llc -march=mipsel < %s
+
+@a = common global <4 x i32> zeroinitializer, align 16
+@b = common global <4 x i32> zeroinitializer, align 16
+@g0 = common global <4 x i32> zeroinitializer, align 16
+
+define void @foo0() nounwind {
+entry:
+ %0 = load <4 x i32>* @a, align 16
+ %1 = load <4 x i32>* @b, align 16
+ %cmp = icmp slt <4 x i32> %0, %1
+ %sext = sext <4 x i1> %cmp to <4 x i32>
+ store <4 x i32> %sext, <4 x i32>* @g0, align 16
+ ret void
+}
+