<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 1, 2016 at 1:28 PM, Xinliang David Li via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davidxl<br>
Date: Mon Aug  1 15:28:26 2016<br>
New Revision: 277381<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=277381&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=277381&view=rev</a><br>
Log:<br>
[Profile] Add new test case to cover comdat renaming<br>
<br>
Test checks that context specific profiles for comdat functions<br>
are not lost.<br></blockquote><div><br></div><div>Nice! This is a neat benefit of the privatization approach (context-sensitivity for comdat).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Added:<br>
    compiler-rt/trunk/test/profile/Inputs/comdat_rename.h<br>
    compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc<br>
    compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc<br>
    compiler-rt/trunk/test/profile/Linux/comdat_rename.test<br>
<br>
Added: compiler-rt/trunk/test/profile/Inputs/comdat_rename.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename.h?rev=277381&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename.h?rev=277381&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/profile/Inputs/comdat_rename.h (added)<br>
+++ compiler-rt/trunk/test/profile/Inputs/comdat_rename.h Mon Aug  1 15:28:26 2016<br>
@@ -0,0 +1,13 @@<br>
+struct FOO {<br>
+  FOO() : a(0), b(0) {}<br>
+  int callee();<br>
+  __attribute__((noinline)) void caller(int n) {<br>
+      int r = callee();<br>
+      if (r == 0) {<br>
+        a += n;<br>
+        b += 1;<br>
+      }<br>
+  }<br>
+  int a;<br>
+  int b;<br>
+};<br>
<br>
Added: compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc?rev=277381&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc?rev=277381&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc (added)<br>
+++ compiler-rt/trunk/test/profile/Inputs/comdat_rename_1.cc Mon Aug  1 15:28:26 2016<br>
@@ -0,0 +1,33 @@<br>
+#include "comdat_rename.h"<br>
+// callee's out-of-line instance profile data -- it comes<br>
+// from external calls to it from comdat_rename_2.cc.<br>
+// Its inline instance copy's profile data is different and<br>
+// is collected in 'caller''s context.<br>
+int FOO::callee() {<br>
+  // CHECK-LABEL: define {{.*}}callee{{.*}}<br>
+  // CHECK-NOT: br i1 {{.*}}<br>
+  // CHECK: br {{.*}}label{{.*}}, label %[[BB1:[0-9]+]], !prof ![[PD1:[0-9]+]]<br>
+  // CHECK: ; <label>:[[BB1]]:<br>
+  if (b != 0)<br>
+    return a / b;<br>
+  if (a != 0)<br>
+    return 10 / a;<br>
+  return 0;<br>
+}<br>
+<br>
+// This is the 'caller''s comdat copy (after renaming) in this module.<br>
+// The profile counters include a copy of counters from 'callee':<br>
+//<br>
+// CHECK-LABEL: define {{.*}}caller{{.*}}<br>
+// CHECK-NOT: br i1 {{.*}}<br>
+// CHECK: br {{.*}}label{{.*}}, label %[[BB2:[0-9]+]], !prof ![[PD2:[0-9]+]]<br>
+// CHECK: ; <label>:[[BB2]]:<br>
+// CHECK: br {{.*}}label{{.*}}, label %{{.*}}, !prof !{{.*}}<br>
+// CHECK: br {{.*}}label %[[BB3:[0-9]+]], label %{{.*}} !prof ![[PD3:[0-9]+]]<br>
+// CHECK: ; <label>:[[BB3]]:<br>
+//<br>
+// CHECK:![[PD1]] = !{!"branch_weights", i32 0, i32 1}<br>
+// CHECK:![[PD2]] = !{!"branch_weights", i32 1, i32 0}<br>
+// CHECK:![[PD3]] = !{!"branch_weights", i32 {{.*}}, i32 0}<br>
+<br>
+void test(FOO *foo) { foo->caller(10); }<br>
<br>
Added: compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc?rev=277381&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc?rev=277381&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc (added)<br>
+++ compiler-rt/trunk/test/profile/Inputs/comdat_rename_2.cc Mon Aug  1 15:28:26 2016<br>
@@ -0,0 +1,18 @@<br>
+#include "comdat_rename.h"<br>
+extern void test(FOO *);<br>
+FOO foo;<br>
+int main() {<br>
+  test(&foo);<br>
+  foo.caller(20);<br>
+  return 0;<br>
+}<br>
+<br>
+// The copy of 'caller' defined in this module -- it has<br>
+// 'callee' call remaining.<br>
+//<br>
+// CHECK-LABEL: define {{.*}}caller{{.*}}<br>
+// CHECK: {{.*}} call {{.*}}<br>
+// CHECK-NOT: br i1 {{.*}}<br>
+// CHECK: br {{.*}}label %[[BB1:[0-9]+]], label{{.*}}!prof ![[PD1:[0-9]+]]<br>
+// CHECK: ; <label>:[[BB1]]:<br>
+// CHECK:![[PD1]] = !{!"branch_weights", i32 0, i32 1}<br>
<br>
Added: compiler-rt/trunk/test/profile/Linux/comdat_rename.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Linux/comdat_rename.test?rev=277381&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/Linux/comdat_rename.test?rev=277381&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/profile/Linux/comdat_rename.test (added)<br>
+++ compiler-rt/trunk/test/profile/Linux/comdat_rename.test Mon Aug  1 15:28:26 2016<br>
@@ -0,0 +1,6 @@<br>
+// RUN: rm -fr %t.prof<br>
+// RUN: %clangxx_pgogen=%t.prof/ -o %t.gen -O2 %S/../Inputs/comdat_rename_1.cc %S/../Inputs/comdat_rename_2.cc<br>
+// RUN: %t.gen<br>
+// RUN: llvm-profdata merge -o %t.profdata %t.prof/<br>
+// RUN: %clangxx_profuse=%t.profdata  -O2 -emit-llvm -S %S/../Inputs/comdat_rename_1.cc -o - | FileCheck %S/../Inputs/comdat_rename_1.cc<br>
+// RUN: %clangxx_profuse=%t.profdata  -O2 -emit-llvm -S %S/../Inputs/comdat_rename_2.cc -o - | FileCheck %S/../Inputs/comdat_rename_2.cc<br></blockquote><div><br></div><div>It may make sense to make an Inputs/ dir in the Linux dir so you can just do `%S/Inputs/...`.</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">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/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>