diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 29 |
1 files changed, 3 insertions, 26 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 27a0c51e3fd..dcf25c629d5 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -39226,32 +39226,9 @@ static SDValue combineScalarToVector(SDNode *N, SelectionDAG &DAG) { // TODO: SimplifyDemandedBits instead? if (VT == MVT::v1i1 && Src.getOpcode() == ISD::AND && Src.hasOneUse()) if (auto *C = dyn_cast<ConstantSDNode>(Src.getOperand(1))) - if (C->getAPIntValue().isOneValue()) { - SDValue Mask = Src.getOperand(0); - if (Mask.getOpcode() == ISD::TRUNCATE && - (Mask.getOperand(0).getValueType() == MVT::i8 || - Mask.getOperand(0).getValueType() == MVT::i32)) - Mask = Mask.getOperand(0); - return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), MVT::v1i1, Mask); - } - - // The result of AND may also be truncated. This occurs in code for lowered - // masked scalar intrinsics. - if (VT == MVT::v1i1 && Src.getOpcode() == ISD::TRUNCATE && Src.hasOneUse() && - Src.getOperand(0).getOpcode() == ISD::AND && - Src.getOperand(0).hasOneUse()) - if (auto *C = dyn_cast<ConstantSDNode>(Src.getOperand(0).getOperand(1))) - if (C->getAPIntValue().isOneValue()) { - SDValue Mask = Src.getOperand(0).getOperand(0); - if (Mask.getOpcode() == ISD::TRUNCATE && - (Mask.getOperand(0).getValueType() == MVT::i8 || - Mask.getOperand(0).getValueType() == MVT::i32)) - Mask = Mask.getOperand(0); - // Check if the initial value is of a legal type for scalar_to_vector. - if (Mask.getValueType() != MVT::i8 && Mask.getValueType() != MVT::i32) - return SDValue(); - return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), MVT::v1i1, Mask); - } + if (C->getAPIntValue().isOneValue()) + return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), MVT::v1i1, + Src.getOperand(0)); return SDValue(); } |