[PATCH] Fix vselect when getSetCCResultType returns a different type from the operands
Matt Arsenault
Matthew.Arsenault at amd.com
Tue May 7 12:46:07 PDT 2013
You're right. That was catching a problem in the original wrong version.
Now it's much simpler and just unrolls when the sizes don't match.
Hi nadav,
http://llvm-reviews.chandlerc.com/D743
CHANGE SINCE LAST DIFF
http://llvm-reviews.chandlerc.com/D743?vs=1866&id=1869#toc
Files:
lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
Index: lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -652,13 +652,14 @@
SDValue VectorLegalizer::ExpandVSELECT(SDValue Op) {
// Implement VSELECT in terms of XOR, AND, OR
// on platforms which do not support blend natively.
- EVT VT = Op.getOperand(0).getValueType();
DebugLoc DL = Op.getDebugLoc();
SDValue Mask = Op.getOperand(0);
SDValue Op1 = Op.getOperand(1);
SDValue Op2 = Op.getOperand(2);
+ EVT VT = Mask.getValueType();
+
// If we can't even use the basic vector operations of
// AND,OR,XOR, we will have to scalarize the op.
// Notice that the operation may be 'promoted' which means that it is
@@ -673,8 +674,15 @@
TargetLowering::ZeroOrNegativeOneBooleanContent)
return DAG.UnrollVectorOp(Op.getNode());
- assert(VT.getSizeInBits() == Op1.getValueType().getSizeInBits()
- && "Invalid mask size");
+ // If the mask and the type do not match and Select is legal,
+ // go ahead and unroll the vector op.
+ // This occurs when getSetCCResultType returns something that
+ // is different than the operand types. For example,
+ // v4i8 = select v4i32, v4i8, v4i8.
+ if (VT.getSizeInBits() != Op1.getValueType().getSizeInBits()) {
+ return DAG.UnrollVectorOp(Op.getNode());
+ }
+
// Bitcast the operands to be the same type as the mask.
// This is needed when we select between FP types because
// the mask is a vector of integers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D743.3.patch
Type: text/x-patch
Size: 1588 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130507/4ad3dc49/attachment.bin>
More information about the llvm-commits
mailing list