[llvm-commits] atomics memoperands patch

Evan Cheng evan.cheng at apple.com
Fri Jun 20 12:26:28 PDT 2008


On Jun 20, 2008, at 9:30 AM, Mon P Wang wrote:

> Hi Evan,
> On Jun 20, 2008, at 12:11 AM, Evan Cheng wrote:
>
>> Thanks Mon Ping. Some comments:
>>
>> +           N->getOpcode() == ISD::ATOMIC_LCS  ||
>> +           N->getOpcode() == ISD::ATOMIC_LAS  ||
>> +           N->getOpcode() == ISD::ATOMIC_SWAP ||
>> +           N->getOpcode() == ISD::ATOMIC_LSS  ||
>> +           N->getOpcode() == ISD::ATOMIC_LOAD_AND  ||
>> +           N->getOpcode() == ISD::ATOMIC_LOAD_OR   ||
>> +           N->getOpcode() == ISD::ATOMIC_LOAD_XOR  ||
>>
>> Does it make sense to take this opportunity to rename lcs, las, and
>> lss?
>>
>
> I heard the same comment from Andrew and I think it makes sense.  How
> about the following
>   ATOMIC_LCS => ATOMIC_CMP_SWAP
>   ATOMIC_LAS => ATOMIC_LOAD_ADD
>   ATOMIC_LSS => ATOMIC_LOAD_SUB

Yes!

>
>
> This would make the names more consistent.
>
>> +  //! PtrVal - Value of address that we are going to do an atomic
>> update
>> How about "Value of atomically updated address"?
>>
>> +  const Value* PtrVal;
>>
>> Since this is basically the same as LSBaseSDNode SrcValue, how about
>> move it to the common base class MemSDNode?
>
> You are right. We should move what is common up as much as possible.
>
>> +
>> +  //! Align - Alignment of memory location in bytes.
>> +  unsigned Align;
>>
>> Alignment instead of Align.
>>
>
> Yep, shows me for getting lazy in typing :->

I am just looking for consistency. :-)

>
>
>> +
>> +  //! IsVol - True if the store is volatile.
>> +  bool IsVol;
>>
>> IsVolatile instead of IsVol. But do we need these? Isn't it always
>> volatile given it's an atomic operation?
>>
>
> I think the standard definition is that all these operations are
> volatile and acts like a memory barrier.  The atomics should always
> return true for this function for volatile.

Right. So we don't need the field but the isVolatile() predicate  
should return true?

>
>
>> Again, LSBaseSDNode has these fields as well. Perhaps move them up?
>>
>> +  // Check if the atomic references a frame index
>> +  const FrameIndexSDNode *FI =
>> +    dyn_cast<const FrameIndexSDNode>(getBasePtr().Val);
>> +  if (!getBasePtrValue() && FI)
>>
>> I am not quite sure why it's necessary to check getBasePtrValue()?
>>
>
> My assumption when I read the code for LSBaseSDNode that if the
> getBasePtrValue exist, we should use getBasePtrValue because it will
> give more precise information for the location we are accessing (index
> into a location in the FrameIndex).  If this is not true, then it is
> not necessary.

Hrm. You are probably right.

Evan
>
>
>>
>> +    return MachineMemOperand(PseudoSourceValue::getFixedStack(),
>> Flags,
>> +                             FI->getIndex(), Size, getAlignment());
>> +  else
>> +    return MachineMemOperand(getBasePtrValue(), Flags, 0, Size,
>> getAlignment());
>> +}
>>
>> Also, don't forget to update AddNodeIDNode() and SDNode::dump() in
>> SelectionDAG.cpp.
>
>
> I totally forgot about that.  Thanks for the reminder.
>
>
>   -- Mon Ping
>
>> Thanks,
>>
>> Evan
>>
>> On Jun 19, 2008, at 6:19 PM, Mon P Wang wrote:
>>
>>> Hi,
>>>
>>> Like loads/stores, atomics touches memory and should have an
>>> associated MemOperand with the operation.  The following patch
>>> creates an abstract class MemSDNode that all nodes  which have an
>>> associated MemOperand need to inherit to.  It also creates a new
>>> property SDNPMemOperand that indicates that a node touches memory
>>> and has an associated MemOperand.If you have any comments, please
>>> let me know.
>>>
>>> Thanks,
>>> -- Mon Ping
>>>
>>> <memop.patch>_______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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