<div dir="ltr">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.</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote">On Mon, Jun 5, 2017 at 11:49 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">If the trailing objects are StringInit*, then creating an ArrayRef of Init* from them is, I think, equivalent to this code:<br><br>StringInit* s;<br>Init* const *i = s;<br><br>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)</div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 5, 2017 at 11:43 AM Craig Topper <<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I didn't follow.</div><div class="gmail_extra"></div><div class="gmail_extra"><br clear="all"><div><div class="m_-3786672760121765394m_3285275978892098533gmail_signature" data-smartmail="gmail_signature">~Craig</div></div></div><div class="gmail_extra">
<br><div class="gmail_quote">On Mon, Jun 5, 2017 at 11:34 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, May 29, 2017 at 2:49 PM Craig Topper via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ctopper<br>
Date: Mon May 29 16:49:34 2017<br>
New Revision: 304177<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=304177&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=304177&view=rev</a><br>
Log:<br>
[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<br>
<br>
Modified:<br>
llvm/trunk/include/llvm/<wbr>TableGen/Record.h<br>
llvm/trunk/lib/TableGen/<wbr>Record.cpp<br>
llvm/trunk/utils/TableGen/<wbr>GlobalISelEmitter.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>TableGen/Record.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/Record.h?rev=304177&r1=304176&r2=304177&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/TableGen/Record.h?rev=<wbr>304177&r1=304176&r2=304177&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>TableGen/Record.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>TableGen/Record.h Mon May 29 16:49:34 2017<br>
@@ -1189,6 +1189,9 @@ public:<br>
return Init ? Init->getValue() : StringRef();<br>
}<br>
<br>
+ ArrayRef<Init *> getArgs() const {<br>
+ return makeArrayRef(<wbr>getTrailingObjects<Init *>(), NumArgs);<br></blockquote><div><br></div><div>Wouldn't this be an aliasing violation? Init* const * can't point to a StringInit*, can it?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ }<br>
ArrayRef<StringInit *> getArgNames() const {<br>
return makeArrayRef(<wbr>getTrailingObjects<StringInit *>(), NumArgNames);<br>
}<br>
@@ -1200,19 +1203,16 @@ public:<br>
typedef SmallVectorImpl<Init*>::const_<wbr>iterator const_arg_iterator;<br>
typedef SmallVectorImpl<StringInit*>::<wbr>const_iterator const_name_iterator;<br>
<br>
- inline const_arg_iterator arg_begin() const { return getTrailingObjects<Init *>(); }<br>
- inline const_arg_iterator arg_end () const { return arg_begin() + NumArgs; }<br>
- inline iterator_range<const_arg_<wbr>iterator> args() const {<br>
- return llvm::make_range(arg_begin(), arg_end());<br>
- }<br>
+ inline const_arg_iterator arg_begin() const { return getArgs().begin(); }<br>
+ inline const_arg_iterator arg_end () const { return getArgs().end(); }<br>
<br>
- inline size_t arg_size () const { return NumArgs; }<br>
+ inline size_t arg_size () const { return NumArgs; }<br>
inline bool arg_empty() const { return NumArgs == 0; }<br>
<br>
- inline const_name_iterator name_begin() const { return getTrailingObjects<StringInit *>(); }<br>
- inline const_name_iterator name_end () const { return name_begin() + NumArgNames; }<br>
+ inline const_name_iterator name_begin() const { return getArgNames().begin();}<br>
+ inline const_name_iterator name_end () const { return getArgNames().end(); }<br>
<br>
- inline size_t name_size () const { return NumArgNames; }<br>
+ inline size_t name_size () const { return NumArgNames; }<br>
inline bool name_empty() const { return NumArgNames == 0; }<br>
<br>
Init *getBit(unsigned Bit) const override {<br>
<br>
Modified: llvm/trunk/lib/TableGen/<wbr>Record.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/Record.cpp?rev=304177&r1=304176&r2=304177&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>TableGen/Record.cpp?rev=<wbr>304177&r1=304176&r2=304177&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/TableGen/<wbr>Record.cpp (original)<br>
+++ llvm/trunk/lib/TableGen/<wbr>Record.cpp Mon May 29 16:49:34 2017<br>
@@ -1540,7 +1540,7 @@ Init *DagInit::resolveReferences(<wbr>Record<br>
SmallVector<Init*, 8> NewArgs;<br>
NewArgs.reserve(arg_size());<br>
bool ArgsChanged = false;<br>
- for (const Init *Arg : args()) {<br>
+ for (const Init *Arg : getArgs()) {<br>
Init *NewArg = Arg->resolveReferences(R, RV);<br>
NewArgs.push_back(NewArg);<br>
ArgsChanged |= NewArg != Arg;<br>
<br>
Modified: llvm/trunk/utils/TableGen/<wbr>GlobalISelEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp?rev=304177&r1=304176&r2=304177&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/utils/<wbr>TableGen/GlobalISelEmitter.<wbr>cpp?rev=304177&r1=304176&r2=<wbr>304177&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/TableGen/<wbr>GlobalISelEmitter.cpp (original)<br>
+++ llvm/trunk/utils/TableGen/<wbr>GlobalISelEmitter.cpp Mon May 29 16:49:34 2017<br>
@@ -1602,7 +1602,7 @@ Expected<BuildMIAction &> GlobalISelEmit<br>
<br>
Error GlobalISelEmitter::<wbr>importDefaultOperandRenderers(<br>
BuildMIAction &DstMIBuilder, DagInit *DefaultOps) const {<br>
- for (const auto *DefaultOp : DefaultOps->args()) {<br>
+ for (const auto *DefaultOp : DefaultOps->getArgs()) {<br>
// Look through ValueType operators.<br>
if (const DagInit *DefaultDagOp = dyn_cast<DagInit>(DefaultOp)) {<br>
if (const DefInit *DefaultDagOperator =<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>
</blockquote></div><br></div></blockquote></div>
</div></div></blockquote></div><br></div>