diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | 31 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 41 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 5 | 
3 files changed, 33 insertions, 44 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 33adf08f674..a03f825a9f0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -170,8 +170,7 @@ SDValue DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) {                                 DAG.getUNDEF(N->getBasePtr().getValueType()),                                 N->getSrcValue(), N->getSrcValueOffset(),                                 N->getMemoryVT().getVectorElementType(), -                               N->isVolatile(), N->getAlignment(), -                               N->getOriginalAlignment()); +                               N->isVolatile(), N->getOriginalAlignment());    // Legalized the chain result - switch anything that used the old chain to    // use the new one. @@ -361,8 +360,7 @@ SDValue DAGTypeLegalizer::ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo){    return DAG.getStore(N->getChain(), dl, GetScalarizedVector(N->getOperand(1)),                        N->getBasePtr(), N->getSrcValue(), N->getSrcValueOffset(), -                      N->isVolatile(), N->getAlignment(), -                      N->getOriginalAlignment()); +                      N->isVolatile(), N->getOriginalAlignment());  } @@ -716,23 +714,21 @@ void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,    const Value *SV = LD->getSrcValue();    int SVOffset = LD->getSrcValueOffset();    EVT MemoryVT = LD->getMemoryVT(); -  unsigned Alignment = LD->getAlignment(); -  unsigned OrigAlignment = LD->getOriginalAlignment(); +  unsigned Alignment = LD->getOriginalAlignment();    bool isVolatile = LD->isVolatile();    EVT LoMemVT, HiMemVT;    GetSplitDestVTs(MemoryVT, LoMemVT, HiMemVT);    Lo = DAG.getLoad(ISD::UNINDEXED, dl, ExtType, LoVT, Ch, Ptr, Offset, -                   SV, SVOffset, LoMemVT, isVolatile, Alignment, OrigAlignment); +                   SV, SVOffset, LoMemVT, isVolatile, Alignment);    unsigned IncrementSize = LoMemVT.getSizeInBits()/8;    Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,                      DAG.getIntPtrConstant(IncrementSize));    SVOffset += IncrementSize; -  Alignment = MinAlign(Alignment, IncrementSize);    Hi = DAG.getLoad(ISD::UNINDEXED, dl, ExtType, HiVT, Ch, Ptr, Offset, -                   SV, SVOffset, HiMemVT, isVolatile, Alignment, OrigAlignment); +                   SV, SVOffset, HiMemVT, isVolatile, Alignment);    // Build a factor node to remember that this load is independent of the    // other one. @@ -1081,8 +1077,7 @@ SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {    SDValue Ptr = N->getBasePtr();    int SVOffset = N->getSrcValueOffset();    EVT MemoryVT = N->getMemoryVT(); -  unsigned Alignment = N->getAlignment(); -  unsigned OrigAlignment = N->getOriginalAlignment(); +  unsigned Alignment = N->getOriginalAlignment();    bool isVol = N->isVolatile();    SDValue Lo, Hi;    GetSplitVector(N->getOperand(1), Lo, Hi); @@ -1097,21 +1092,19 @@ SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {                             LoMemVT, isVol, Alignment);    else      Lo = DAG.getStore(Ch, dl, Lo, Ptr, N->getSrcValue(), SVOffset, -                      isVol, Alignment, OrigAlignment); +                      isVol, Alignment);    // Increment the pointer to the other half.    Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,                      DAG.getIntPtrConstant(IncrementSize)); +  SVOffset += IncrementSize;    if (isTruncating) -    Hi = DAG.getTruncStore(Ch, dl, Hi, Ptr, -                           N->getSrcValue(), SVOffset+IncrementSize, -                           HiMemVT, -                           isVol, MinAlign(Alignment, IncrementSize)); +    Hi = DAG.getTruncStore(Ch, dl, Hi, Ptr, N->getSrcValue(), SVOffset, +                           HiMemVT, isVol, Alignment);    else -    Hi = DAG.getStore(Ch, dl, Hi, Ptr, N->getSrcValue(), SVOffset+IncrementSize, -                      isVol, MinAlign(Alignment, IncrementSize), -                      OrigAlignment); +    Hi = DAG.getStore(Ch, dl, Hi, Ptr, N->getSrcValue(), SVOffset, +                      isVol, Alignment);    return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);  } diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index fe45319339e..d0d45b5c77a 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -432,12 +432,14 @@ static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) {      const LoadSDNode *LD = cast<LoadSDNode>(N);      ID.AddInteger(LD->getMemoryVT().getRawBits());      ID.AddInteger(LD->getRawSubclassData()); +    ID.AddInteger(LD->getSrcValueOffset());      break;    }    case ISD::STORE: {      const StoreSDNode *ST = cast<StoreSDNode>(N);      ID.AddInteger(ST->getMemoryVT().getRawBits());      ID.AddInteger(ST->getRawSubclassData()); +    ID.AddInteger(ST->getSrcValueOffset());      break;    }    case ISD::ATOMIC_CMP_SWAP: @@ -3646,12 +3648,9 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, DebugLoc dl,                        ISD::LoadExtType ExtType, EVT VT, SDValue Chain,                        SDValue Ptr, SDValue Offset,                        const Value *SV, int SVOffset, EVT EVT, -                      bool isVolatile, unsigned Alignment, -                      unsigned OrigAlignment) { +                      bool isVolatile, unsigned Alignment) {    if (Alignment == 0)  // Ensure that codegen never sees alignment 0      Alignment = getEVTAlignment(VT); -  if (OrigAlignment == 0) -    OrigAlignment = Alignment;    if (VT == EVT) {      ExtType = ISD::NON_EXTLOAD; @@ -3682,12 +3681,13 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, DebugLoc dl,    AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);    ID.AddInteger(EVT.getRawBits());    ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, isVolatile, Alignment)); +  ID.AddInteger(SVOffset);    void *IP = 0;    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))      return SDValue(E, 0);    SDNode *N = NodeAllocator.Allocate<LoadSDNode>();    new (N) LoadSDNode(Ops, dl, VTs, AM, ExtType, EVT, SV, SVOffset, -                     Alignment, isVolatile, OrigAlignment); +                     Alignment, isVolatile);    CSEMap.InsertNode(N, IP);    AllNodes.push_back(N);    return SDValue(N, 0); @@ -3696,11 +3696,10 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, DebugLoc dl,  SDValue SelectionDAG::getLoad(EVT VT, DebugLoc dl,                                SDValue Chain, SDValue Ptr,                                const Value *SV, int SVOffset, -                              bool isVolatile, unsigned Alignment, -                              unsigned OrigAlignment) { +                              bool isVolatile, unsigned Alignment) {    SDValue Undef = getUNDEF(Ptr.getValueType());    return getLoad(ISD::UNINDEXED, dl, ISD::NON_EXTLOAD, VT, Chain, Ptr, Undef, -                 SV, SVOffset, VT, isVolatile, Alignment, OrigAlignment); +                 SV, SVOffset, VT, isVolatile, Alignment);  }  SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT, @@ -3727,14 +3726,11 @@ SelectionDAG::getIndexedLoad(SDValue OrigLoad, DebugLoc dl, SDValue Base,  SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,                                 SDValue Ptr, const Value *SV, int SVOffset, -                               bool isVolatile, unsigned Alignment, -                               unsigned OrigAlignment) { +                               bool isVolatile, unsigned Alignment) {    EVT VT = Val.getValueType();    if (Alignment == 0)  // Ensure that codegen never sees alignment 0      Alignment = getEVTAlignment(VT); -  if (OrigAlignment == 0) -    OrigAlignment = Alignment;    SDVTList VTs = getVTList(MVT::Other);    SDValue Undef = getUNDEF(Ptr.getValueType()); @@ -3744,12 +3740,13 @@ SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,    ID.AddInteger(VT.getRawBits());    ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED,                                       isVolatile, Alignment)); +  ID.AddInteger(SVOffset);    void *IP = 0;    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))      return SDValue(E, 0);    SDNode *N = NodeAllocator.Allocate<StoreSDNode>();    new (N) StoreSDNode(Ops, dl, VTs, ISD::UNINDEXED, false, -                      VT, SV, SVOffset, Alignment, isVolatile, OrigAlignment); +                      VT, SV, SVOffset, Alignment, isVolatile);    CSEMap.InsertNode(N, IP);    AllNodes.push_back(N);    return SDValue(N, 0); @@ -3779,6 +3776,7 @@ SDValue SelectionDAG::getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val,    ID.AddInteger(SVT.getRawBits());    ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED,                                       isVolatile, Alignment)); +  ID.AddInteger(SVOffset);    void *IP = 0;    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))      return SDValue(E, 0); @@ -4976,25 +4974,24 @@ GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, const GlobalValue *GA,  MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs, EVT memvt,                       const Value *srcValue, int SVO, unsigned alignment, -                     bool vol, unsigned origAlign) - : SDNode(Opc, dl, VTs), MemoryVT(memvt), SrcValue(srcValue), SVOffset(SVO), -   OrigAlign(origAlign) { +                     bool vol) + : SDNode(Opc, dl, VTs), MemoryVT(memvt), SrcValue(srcValue), SVOffset(SVO) {    SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, vol, alignment);    assert(isPowerOf2_32(alignment) && "Alignment is not a power of 2!"); -  assert(getAlignment() == alignment && "Alignment representation error!"); -  assert(isVolatile() == vol && "Volatile representation error!"); +  assert(getOriginalAlignment() == alignment && "Alignment encoding error!"); +  assert(isVolatile() == vol && "Volatile encoding error!");  }  MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs,                       const SDValue *Ops, unsigned NumOps, EVT memvt,                        const Value *srcValue, int SVO, unsigned alignment,  -                     bool vol, unsigned origAlign) +                     bool vol)     : SDNode(Opc, dl, VTs, Ops, NumOps), -     MemoryVT(memvt), SrcValue(srcValue), SVOffset(SVO), OrigAlign(origAlign) { +     MemoryVT(memvt), SrcValue(srcValue), SVOffset(SVO) {    SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, vol, alignment);    assert(isPowerOf2_32(alignment) && "Alignment is not a power of 2!"); -  assert(getAlignment() == alignment && "Alignment representation error!"); -  assert(isVolatile() == vol && "Volatile representation error!"); +  assert(getOriginalAlignment() == alignment && "Alignment encoding error!"); +  assert(isVolatile() == vol && "Volatile encoding error!");  }  /// getMemOperand - Return a MachineMemOperand object describing the memory diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 8b9a5a5459d..c946bdad5d3 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -2815,7 +2815,7 @@ void SelectionDAGLowering::visitLoad(LoadInst &I) {                              DAG.getNode(ISD::ADD, getCurDebugLoc(),                                          PtrVT, Ptr,                                          DAG.getConstant(Offsets[i], PtrVT)), -                            SV, Offsets[i], isVolatile, Alignment, Alignment); +                            SV, Offsets[i], isVolatile, Alignment);      Values[i] = L;      Chains[i] = L.getValue(1);    } @@ -2864,8 +2864,7 @@ void SelectionDAGLowering::visitStore(StoreInst &I) {                               DAG.getNode(ISD::ADD, getCurDebugLoc(),                                           PtrVT, Ptr,                                           DAG.getConstant(Offsets[i], PtrVT)), -                             PtrV, Offsets[i], -                             isVolatile, Alignment, Alignment); +                             PtrV, Offsets[i], isVolatile, Alignment);    DAG.setRoot(DAG.getNode(ISD::TokenFactor, getCurDebugLoc(),                            MVT::Other, &Chains[0], NumValues));  | 

