diff --git a/llvm/include/llvm/CodeGen/ISDOpcodes.h b/llvm/include/llvm/CodeGen/ISDOpcodes.h index b3a2ced70e628..cdaa916548c25 100644 --- a/llvm/include/llvm/CodeGen/ISDOpcodes.h +++ b/llvm/include/llvm/CodeGen/ISDOpcodes.h @@ -655,8 +655,8 @@ enum NodeType { /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a /// scalar value into element 0 of the resultant vector type. The top - /// elements 1 to N-1 of the N-element vector are undefined. The type - /// of the operand must match the vector element type, except when they + /// elements 1 to N-1 of the N-element vector are poison. The type of + /// the operand must match the vector element type, except when they /// are integer types. In this case the operand is allowed to be wider /// than the vector element type, and is implicitly truncated to it. SCALAR_TO_VECTOR, diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 6284ded3be922..c7790404c0de1 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -496,7 +496,7 @@ SDValue DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) { SDValue Result = DAG.getLoad( ISD::UNINDEXED, N->getExtensionType(), N->getValueType(0).getVectorElementType(), SDLoc(N), N->getChain(), - N->getBasePtr(), DAG.getUNDEF(N->getBasePtr().getValueType()), + N->getBasePtr(), DAG.getPOISON(N->getBasePtr().getValueType()), N->getPointerInfo(), N->getMemoryVT().getVectorElementType(), N->getBaseAlign(), N->getMemOperand()->getFlags(), N->getAAInfo()); @@ -2186,7 +2186,7 @@ void DAGTypeLegalizer::SplitVecRes_ScalarOp(SDNode *N, SDValue &Lo, std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(N->getValueType(0)); Lo = DAG.getNode(N->getOpcode(), dl, LoVT, N->getOperand(0)); if (N->getOpcode() == ISD::SCALAR_TO_VECTOR) { - Hi = DAG.getUNDEF(HiVT); + Hi = DAG.getPOISON(HiVT); } else { assert(N->getOpcode() == ISD::SPLAT_VECTOR && "Unexpected opcode"); Hi = Lo; @@ -2213,7 +2213,7 @@ void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo, ISD::LoadExtType ExtType = LD->getExtensionType(); SDValue Ch = LD->getChain(); SDValue Ptr = LD->getBasePtr(); - SDValue Offset = DAG.getUNDEF(Ptr.getValueType()); + SDValue Offset = DAG.getPOISON(Ptr.getValueType()); EVT MemoryVT = LD->getMemoryVT(); MachineMemOperand::Flags MMOFlags = LD->getMemOperand()->getFlags(); AAMDNodes AAInfo = LD->getAAInfo(); @@ -2363,7 +2363,7 @@ void DAGTypeLegalizer::SplitVecRes_VP_LOAD_FF(VPLoadFFSDNode *LD, SDValue &Lo, Lo = DAG.getLoadFFVP(LoVT, dl, Ch, Ptr, MaskLo, EVLLo, MMO); // Fill the upper half with poison. - Hi = DAG.getUNDEF(HiVT); + Hi = DAG.getPOISON(HiVT); ReplaceValueWith(SDValue(LD, 1), Lo.getValue(1)); ReplaceValueWith(SDValue(LD, 2), Lo.getValue(2)); @@ -3344,7 +3344,7 @@ void DAGTypeLegalizer::SplitVecRes_VP_REVERSE(SDNode *N, SDValue &Lo, SDValue TrueMask = DAG.getBoolConstant(true, DL, Mask.getValueType(), VT); SDValue Store = DAG.getStridedStoreVP(DAG.getEntryNode(), DL, Val, StorePtr, - DAG.getUNDEF(PtrVT), Stride, TrueMask, + DAG.getPOISON(PtrVT), Stride, TrueMask, EVL, MemVT, StoreMMO, ISD::UNINDEXED); SDValue Load = DAG.getLoadVP(VT, DL, Store, StackPtr, Mask, EVL, LoadMMO); @@ -3387,14 +3387,16 @@ void DAGTypeLegalizer::SplitVecRes_VP_SPLICE(SDNode *N, SDValue &Lo, SDValue StackPtr2 = TLI.getVectorElementPointer(DAG, StackPtr, VT, EVL1); + SDValue PoisonPtr = DAG.getPOISON(PtrVT); + SDValue TrueMask = DAG.getBoolConstant(true, DL, Mask.getValueType(), VT); - SDValue StoreV1 = DAG.getStoreVP(DAG.getEntryNode(), DL, V1, StackPtr, - DAG.getUNDEF(PtrVT), TrueMask, EVL1, - V1.getValueType(), StoreMMO, ISD::UNINDEXED); + SDValue StoreV1 = + DAG.getStoreVP(DAG.getEntryNode(), DL, V1, StackPtr, PoisonPtr, TrueMask, + EVL1, V1.getValueType(), StoreMMO, ISD::UNINDEXED); SDValue StoreV2 = - DAG.getStoreVP(StoreV1, DL, V2, StackPtr2, DAG.getUNDEF(PtrVT), TrueMask, - EVL2, V2.getValueType(), StoreMMO, ISD::UNINDEXED); + DAG.getStoreVP(StoreV1, DL, V2, StackPtr2, PoisonPtr, TrueMask, EVL2, + V2.getValueType(), StoreMMO, ISD::UNINDEXED); SDValue Load; if (Imm >= 0) {