[llvm] r190376 - Don't use getSetCCResultType for creating a vselect
Matt Arsenault
Matthew.Arsenault at amd.com
Mon Sep 9 17:41:56 PDT 2013
Author: arsenm
Date: Mon Sep 9 19:41:56 2013
New Revision: 190376
URL: http://llvm.org/viewvc/llvm-project?rev=190376&view=rev
Log:
Don't use getSetCCResultType for creating a vselect
The vselect mask isn't a setcc.
This breaks in the case when the result of getSetCCResultType
is larger than the vector operands
e.g. %tmp = select i1 %cmp <2 x i8> %a, <2 x i8> %b
when getSetCCResultType returns <2 x i32>, the assertion
that the (MaskTy.getSizeInBits() == Op1.getValueType().getSizeInBits())
is hit.
No test since I don't think I can hit this with any of the current
targets. The R600/SI implementation would break, since it returns a
vector of i1 for this, but it doesn't reach ExpandSELECT for other
reasons.
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp?rev=190376&r1=190375&r2=190376&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp Mon Sep 9 19:41:56 2013
@@ -599,8 +599,7 @@ SDValue VectorLegalizer::ExpandSELECT(SD
return DAG.UnrollVectorOp(Op.getNode());
// Generate a mask operand.
- EVT MaskTy = TLI.getSetCCResultType(*DAG.getContext(), VT);
- assert(MaskTy.isVector() && "Invalid CC type");
+ EVT MaskTy = VT.changeVectorElementTypeToInteger();
assert(MaskTy.getSizeInBits() == Op1.getValueType().getSizeInBits()
&& "Invalid mask size");
More information about the llvm-commits
mailing list