[LegalizeTypes] Don't use PromoteTargetBoolean in WidenVecOp_SETCC.
authorCraig Topper <craig.topper@intel.com>
Wed, 16 Oct 2019 03:29:24 +0000 (03:29 +0000)
committerCraig Topper <craig.topper@intel.com>
Wed, 16 Oct 2019 03:29:24 +0000 (03:29 +0000)
Similar to r374970, but I don't have a test for this.

PromoteTargetBoolean is intended to be use for legalizing an
operand that needs to be promoted. It picks its type based on
the return from getSetccResultType and is intended to be used
when we have freedom to pick the new type. But the return type
we need for WidenVecOp_SETCC is completely determined by the
type of the input node.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374972 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp

index 2f8fa97535c7c179617cd2b08a4cb3448088eea5..3763e886cef29c182a3125ecf2090ec360fcd8a3 100644 (file)
@@ -4574,7 +4574,10 @@ SDValue DAGTypeLegalizer::WidenVecOp_SETCC(SDNode *N) {
       ISD::EXTRACT_SUBVECTOR, dl, ResVT, WideSETCC,
       DAG.getConstant(0, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
 
-  return PromoteTargetBoolean(CC, VT);
+  EVT OpVT = N->getOperand(0).getValueType();
+  ISD::NodeType ExtendCode =
+      TargetLowering::getExtendForContent(TLI.getBooleanContents(OpVT));
+  return DAG.getNode(ExtendCode, dl, VT, CC);
 }
 
 SDValue DAGTypeLegalizer::WidenVecOp_VECREDUCE(SDNode *N) {