[llvm] r304177 - [TableGen] Introduce DagInit::getArgs that returns an ArrayRef. Use it to fix 80 column violations in arg_begin/arg_end. Remove DagInit::args and use getArgs instead. NFC

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 5 11:54:16 PDT 2017


Ah, OK! thanks for explaining - excuse my confusion :)

On Mon, Jun 5, 2017 at 11:52 AM Craig Topper <craig.topper at gmail.com> wrote:

> There are two sets of TrailingObject arrays in the DAGInit. I think
> trailing objects doesn't traverse the hierarchy for its object tagging. So
> the StringInit* and the Init* getTrailingObjects calls are getting
> different arrays.
>
> ~Craig
>
> On Mon, Jun 5, 2017 at 11:49 AM, David Blaikie <dblaikie at gmail.com> wrote:
>
>> If the trailing objects are StringInit*, then creating an ArrayRef of
>> Init* from them is, I think, equivalent to this code:
>>
>> StringInit* s;
>> Init* const *i = s;
>>
>> Which, I think, isn't valid - a pointer to an Init* isn't a pointer to a
>> StringInit* even though the latter can be converted to the former (eg:
>> while it might not be the case here, in general a pointer to base might be
>> at some offset compared to a pointer to derived (if multiple inheritance is
>> used), so a base* isn't a derived* even though they can be coverted between)
>>
>> On Mon, Jun 5, 2017 at 11:43 AM Craig Topper <craig.topper at gmail.com>
>> wrote:
>>
>>> I didn't follow.
>>>
>>> ~Craig
>>>
>>> On Mon, Jun 5, 2017 at 11:34 AM, David Blaikie <dblaikie at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Mon, May 29, 2017 at 2:49 PM Craig Topper via llvm-commits <
>>>> llvm-commits at lists.llvm.org> wrote:
>>>>
>>>>> Author: ctopper
>>>>> Date: Mon May 29 16:49:34 2017
>>>>> New Revision: 304177
>>>>>
>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=304177&view=rev
>>>>> Log:
>>>>> [TableGen] Introduce DagInit::getArgs that returns an ArrayRef. Use it
>>>>> to fix 80 column violations in arg_begin/arg_end. Remove DagInit::args and
>>>>> use getArgs instead. NFC
>>>>>
>>>>> Modified:
>>>>>     llvm/trunk/include/llvm/TableGen/Record.h
>>>>>     llvm/trunk/lib/TableGen/Record.cpp
>>>>>     llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>>>>>
>>>>> Modified: llvm/trunk/include/llvm/TableGen/Record.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/Record.h?rev=304177&r1=304176&r2=304177&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/include/llvm/TableGen/Record.h (original)
>>>>> +++ llvm/trunk/include/llvm/TableGen/Record.h Mon May 29 16:49:34 2017
>>>>> @@ -1189,6 +1189,9 @@ public:
>>>>>      return Init ? Init->getValue() : StringRef();
>>>>>    }
>>>>>
>>>>> +  ArrayRef<Init *> getArgs() const {
>>>>> +    return makeArrayRef(getTrailingObjects<Init *>(), NumArgs);
>>>>>
>>>>
>>>> Wouldn't this be an aliasing violation? Init* const * can't point to a
>>>> StringInit*, can it?
>>>>
>>>>
>>>>> +  }
>>>>>    ArrayRef<StringInit *> getArgNames() const {
>>>>>      return makeArrayRef(getTrailingObjects<StringInit *>(),
>>>>> NumArgNames);
>>>>>    }
>>>>> @@ -1200,19 +1203,16 @@ public:
>>>>>    typedef SmallVectorImpl<Init*>::const_iterator
>>>>>  const_arg_iterator;
>>>>>    typedef SmallVectorImpl<StringInit*>::const_iterator
>>>>> const_name_iterator;
>>>>>
>>>>> -  inline const_arg_iterator  arg_begin() const { return
>>>>> getTrailingObjects<Init *>(); }
>>>>> -  inline const_arg_iterator  arg_end  () const { return arg_begin() +
>>>>> NumArgs;   }
>>>>> -  inline iterator_range<const_arg_iterator> args() const {
>>>>> -    return llvm::make_range(arg_begin(), arg_end());
>>>>> -  }
>>>>> +  inline const_arg_iterator  arg_begin() const { return
>>>>> getArgs().begin(); }
>>>>> +  inline const_arg_iterator  arg_end  () const { return
>>>>> getArgs().end(); }
>>>>>
>>>>> -  inline size_t              arg_size () const { return NumArgs;  }
>>>>> +  inline size_t              arg_size () const { return NumArgs; }
>>>>>    inline bool                arg_empty() const { return NumArgs == 0;
>>>>> }
>>>>>
>>>>> -  inline const_name_iterator name_begin() const { return
>>>>> getTrailingObjects<StringInit *>(); }
>>>>> -  inline const_name_iterator name_end  () const { return name_begin()
>>>>> + NumArgNames;   }
>>>>> +  inline const_name_iterator name_begin() const { return
>>>>> getArgNames().begin();}
>>>>> +  inline const_name_iterator name_end  () const { return
>>>>> getArgNames().end(); }
>>>>>
>>>>> -  inline size_t              name_size () const { return
>>>>> NumArgNames;  }
>>>>> +  inline size_t              name_size () const { return NumArgNames;
>>>>> }
>>>>>    inline bool                name_empty() const { return NumArgNames
>>>>> == 0; }
>>>>>
>>>>>    Init *getBit(unsigned Bit) const override {
>>>>>
>>>>> Modified: llvm/trunk/lib/TableGen/Record.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/Record.cpp?rev=304177&r1=304176&r2=304177&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/TableGen/Record.cpp (original)
>>>>> +++ llvm/trunk/lib/TableGen/Record.cpp Mon May 29 16:49:34 2017
>>>>> @@ -1540,7 +1540,7 @@ Init *DagInit::resolveReferences(Record
>>>>>    SmallVector<Init*, 8> NewArgs;
>>>>>    NewArgs.reserve(arg_size());
>>>>>    bool ArgsChanged = false;
>>>>> -  for (const Init *Arg : args()) {
>>>>> +  for (const Init *Arg : getArgs()) {
>>>>>      Init *NewArg = Arg->resolveReferences(R, RV);
>>>>>      NewArgs.push_back(NewArg);
>>>>>      ArgsChanged |= NewArg != Arg;
>>>>>
>>>>> Modified: llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp?rev=304177&r1=304176&r2=304177&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp (original)
>>>>> +++ llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp Mon May 29
>>>>> 16:49:34 2017
>>>>> @@ -1602,7 +1602,7 @@ Expected<BuildMIAction &> GlobalISelEmit
>>>>>
>>>>>  Error GlobalISelEmitter::importDefaultOperandRenderers(
>>>>>      BuildMIAction &DstMIBuilder, DagInit *DefaultOps) const {
>>>>> -  for (const auto *DefaultOp : DefaultOps->args()) {
>>>>> +  for (const auto *DefaultOp : DefaultOps->getArgs()) {
>>>>>      // Look through ValueType operators.
>>>>>      if (const DagInit *DefaultDagOp = dyn_cast<DagInit>(DefaultOp)) {
>>>>>        if (const DefInit *DefaultDagOperator =
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> llvm-commits mailing list
>>>>> llvm-commits at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>>>
>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170605/699ba8d2/attachment.html>


More information about the llvm-commits mailing list