[llvm-commits] [llvm] r57786 - /llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Evan Cheng evan.cheng at apple.com
Sun Oct 19 23:10:40 PDT 2008


Hi Bill,

Just a suggestion. It would make the patch more readable if you commit  
the cosmetic changes separately.

Thanks,

Evan

On Oct 19, 2008, at 1:51 PM, Bill Wendling wrote:

> Author: void
> Date: Sun Oct 19 15:51:12 2008
> New Revision: 57786
>
> URL: http://llvm.org/viewvc/llvm-project?rev=57786&view=rev
> Log:
> Set N->OperandList to 0 after deletion. Otherwise, it's possible  
> that it will
> be either deleted or referenced afterwards.
>
> Modified:
>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=57786&r1=57785&r2=57786&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sun Oct 19  
> 15:51:12 2008
> @@ -216,7 +216,7 @@
>   unsigned OldG = (Operation >> 1) & 1;
>   return ISD::CondCode((Operation & ~6) |  // Keep the N, U, E bits
>                        (OldL << 1) |       // New G bit
> -                       (OldG << 2));        // New L bit.
> +                       (OldG << 2));       // New L bit.
> }
>
> /// getSetCCInverse - Return the operation corresponding to !(X op  
> Y), where
> @@ -227,8 +227,10 @@
>     Operation ^= 7;   // Flip L, G, E bits, but not U.
>   else
>     Operation ^= 15;  // Flip all of the condition bits.
> +
>   if (Operation > ISD::SETTRUE2)
> -    Operation &= ~8;     // Don't let N and U bits get set.
> +    Operation &= ~8;  // Don't let N and U bits get set.
> +
>   return ISD::CondCode(Operation);
> }
>
> @@ -506,7 +508,8 @@
> /// encodeMemSDNodeFlags - Generic routine for computing a value for  
> use in
> /// the CSE map that carries both alignment and volatility  
> information.
> ///
> -static unsigned encodeMemSDNodeFlags(bool isVolatile, unsigned  
> Alignment) {
> +static inline unsigned
> +encodeMemSDNodeFlags(bool isVolatile, unsigned Alignment) {
>   return isVolatile | ((Log2_32(Alignment) + 1) << 1);
> }
>
> @@ -561,9 +564,10 @@
>       if (Operand->use_empty())
>         DeadNodes.push_back(Operand);
>     }
> -    if (N->OperandsNeedDelete) {
> +
> +    if (N->OperandsNeedDelete)
>       delete[] N->OperandList;
> -    }
> +
>     N->OperandList = 0;
>     N->NumOperands = 0;
>
> @@ -589,12 +593,14 @@
> }
>
> void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
> -
>   // Drop all of the operands and decrement used node's use counts.
>   for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I !=  
> E; ++I)
>     I->getVal()->removeUser(std::distance(N->op_begin(), I), N);
> -  if (N->OperandsNeedDelete)
> +
> +  if (N->OperandsNeedDelete) {
>     delete[] N->OperandList;
> +    N->OperandList = 0;
> +  }
>
>   assert(N != AllNodes.begin());
>   NodeAllocator.Deallocate(AllNodes.remove(N));
> @@ -675,13 +681,13 @@
>   case ISD::DBG_STOPPOINT:
>   case ISD::EH_LABEL:
>   case ISD::DECLARE:
> -    return 0;    // Never add these nodes.
> +    return 0;   // Never add these nodes.
>   }
>
>   // Check that remaining values produced are not flags.
>   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
>     if (N->getValueType(i) == MVT::Flag)
> -      return 0;   // Never CSE anything that produces a flag.
> +      return 0; // Never CSE anything that produces a flag.
>
>   SDNode *New = CSEMap.GetOrInsertNode(N);
>   if (New != N) return New;  // Node already existed.
> @@ -703,13 +709,13 @@
>   case ISD::DBG_LABEL:
>   case ISD::DBG_STOPPOINT:
>   case ISD::EH_LABEL:
> -    return 0;    // Never add these nodes.
> +    return 0;   // Never add these nodes.
>   }
>
>   // Check that remaining values produced are not flags.
>   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
>     if (N->getValueType(i) == MVT::Flag)
> -      return 0;   // Never CSE anything that produces a flag.
> +      return 0; // Never CSE anything that produces a flag.
>
>   SDValue Ops[] = { Op };
>   FoldingSetNodeID ID;
> @@ -729,7 +735,7 @@
>   // Check that remaining values produced are not flags.
>   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
>     if (N->getValueType(i) == MVT::Flag)
> -      return 0;   // Never CSE anything that produces a flag.
> +      return 0; // Never CSE anything that produces a flag.
>
>   SDValue Ops[] = { Op1, Op2 };
>   FoldingSetNodeID ID;
> @@ -755,13 +761,13 @@
>   case ISD::DBG_STOPPOINT:
>   case ISD::EH_LABEL:
>   case ISD::DECLARE:
> -    return 0;    // Never add these nodes.
> +    return 0;   // Never add these nodes.
>   }
>
>   // Check that remaining values produced are not flags.
>   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
>     if (N->getValueType(i) == MVT::Flag)
> -      return 0;   // Never CSE anything that produces a flag.
> +      return 0; // Never CSE anything that produces a flag.
>
>   FoldingSetNodeID ID;
>   AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, NumOps);
> @@ -833,8 +839,12 @@
>   while (!AllNodes.empty()) {
>     SDNode *N = AllNodes.remove(AllNodes.begin());
>     N->SetNextInBucket(0);
> -    if (N->OperandsNeedDelete)
> +
> +    if (N->OperandsNeedDelete) {
>       delete [] N->OperandList;
> +      N->OperandList = 0;
> +    }
> +
>     NodeAllocator.Deallocate(N);
>   }
> }
> @@ -4208,6 +4218,7 @@
>   if (NumOps > N->NumOperands) {
>     if (N->OperandsNeedDelete)
>       delete[] N->OperandList;
> +
>     if (N->isMachineOpcode()) {
>       // We're creating a final node that will live unmorphed for the
>       // remainder of the current SelectionDAG iteration, so we can  
> allocate
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list