<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 10, 2014 at 12:18 PM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@gmail.com" target="_blank">benny.kra@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"><span class=""><br>
On 10.09.2014, at 20:24, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
<br>
><br>
><br>
> On Wed, Sep 10, 2014 at 5:50 AM, Benjamin Kramer <<a href="mailto:benny.kra@googlemail.com">benny.kra@googlemail.com</a>> wrote:<br>
> Author: d0k<br>
> Date: Wed Sep 10 07:50:59 2014<br>
> New Revision: 217495<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=217495&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=217495&view=rev</a><br>
> Log:<br>
> CodeGen: Use a fixed alignment for vtables.<br>
><br>
> Any chance this change is to blame for <a href="http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/17224" target="_blank">http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/17224</a> ? Anything I can do to help debug this?<br>
<br>
</span>I'm relatively sure that the test cases are just broken. It displays different symbols in some places in what looks like a very fragile test. Maybe it's best to just disable them or strip the <> symbol strings from the expected output.<br></blockquote><div><br></div><div>Fair - took a hack at generalizing these in <span style="color:rgb(0,0,0)">217571.</span></div><div> </div><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">
<br>
- Ben<br>
<div class=""><div class="h5"><br>
><br>
><br>
> Pointer-sized alignment is sufficient as we only ever read single values<br>
> from the table. Otherwise we'd bump the alignment to 16 bytes in the<br>
> backend if the vtable is larger than 16 bytes. This is great for<br>
> structures that are accessed with vector instructions or copied around, but<br>
> that's simply not the case for vtables.<br>
><br>
> Shrinks the data segment of a Release x86_64 clang by 0.3%. The wins are<br>
> larger for i386 and code bases that use vtables more often than we do.<br>
><br>
> This matches the behavior of GCC 5.<br>
><br>
> Added:<br>
>     cfe/trunk/test/CodeGenCXX/vtable-align.cpp<br>
> Modified:<br>
>     cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
><br>
> Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=217495&r1=217494&r2=217495&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=217495&r1=217494&r2=217495&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Wed Sep 10 07:50:59 2014<br>
> @@ -1207,6 +1207,12 @@ void ItaniumCXXABI::emitVTableDefinition<br>
>    // Set the right visibility.<br>
>    CGM.setGlobalVisibility(VTable, RD);<br>
><br>
> +  // Use pointer alignment for the vtable. Otherwise we would align them based<br>
> +  // on the size of the initializer which doesn't make sense as only single<br>
> +  // values are read.<br>
> +  unsigned PAlign = CGM.getTarget().getPointerAlign(0);<br>
> +  VTable->setAlignment(getContext().toCharUnitsFromBits(PAlign).getQuantity());<br>
> +<br>
>    // If this is the magic class __cxxabiv1::__fundamental_type_info,<br>
>    // we will emit the typeinfo for the fundamental types. This is the<br>
>    // same behaviour as GCC.<br>
><br>
> Added: cfe/trunk/test/CodeGenCXX/vtable-align.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/vtable-align.cpp?rev=217495&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/vtable-align.cpp?rev=217495&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/vtable-align.cpp (added)<br>
> +++ cfe/trunk/test/CodeGenCXX/vtable-align.cpp Wed Sep 10 07:50:59 2014<br>
> @@ -0,0 +1,14 @@<br>
> +// RUN: %clang_cc1 %s -triple=i386-apple-darwin10 -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-32<br>
> +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-64<br>
> +<br>
> +struct A {<br>
> +  virtual void f();<br>
> +  virtual void g();<br>
> +  virtual void h();<br>
> +};<br>
> +<br>
> +void A::f() {}<br>
> +<br>
> +// CHECK-32: @_ZTV1A = unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1fEv to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1gEv to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1hEv to i8*)], align 4<br>
> +<br>
> +// CHECK-64: @_ZTV1A = unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1fEv to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1gEv to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A1hEv to i8*)], align 8<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>