<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 1, 2014 at 11:03 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5"><span style="color:rgb(34,34,34)">Having this also puts us on the path to improve itanium codegen for</span><br>
</div></div>
<br>
struct A {<br>
  virtual void f(int x, ...);<br>
};<br>
struct B {<br>
  virtual void f(int x, ...);<br>
};<br>
struct C : A, B {<br>
  virtual void c();<br>
  virtual void f(int x, ...);<br>
};<br>
void C::f(int x, ...) {  }<br>
<br>
Currently we have clang duplicate the body of C::f.  We cannot create<br>
a normal copy since we cannot represent the copy of the varargs, even<br>
when we want llvm to eliminate those copies. We could use a inalloca<br>
argument for the rest of the frame instead of a "...". Since we have a<br>
guarantee that no copy will be done, we don't have to know the size.<br></blockquote><div><br></div><div>Yep!  Fixing this problem is definitely doable with this feature.  Rather than using inalloca, I'd add an Ellipsis Value so we can write:</div>
<div>musttail call void @fn(i8* %this_adj, ...)</div><div><br></div><div>You wouldn't be able to place '...' anywhere other than as the last argument of a musttail call, since we can't really lower it otherwise.</div>
</div></div></div>