ah, right, sorry about that - gmail didn't render cfe-commits on the to line in the first email... weird.
Anyway, no need to include llvm-commits on clang-only changes. On Mon, Feb 8, 2016 at 11:30 AM, Xinliang David Li <davi...@google.com> wrote: > Both cfe-commits and llvm-commits are cc'ed. > > David > > On Mon, Feb 8, 2016 at 11:29 AM, David Blaikie <dblai...@gmail.com> wrote: > > This looks like a change to clang - could you test it in clang (& review > it > > on cfe-commits instead of llvm-commits)? > > > > On Sat, Feb 6, 2016 at 11:57 AM, David Li via cfe-commits > > <cfe-commits@lists.llvm.org> wrote: > >> > >> davidxl created this revision. > >> davidxl added a reviewer: vsk. > >> davidxl added subscribers: llvm-commits, cfe-commits. > >> > >> For compiler generated assignment operator that is not trivial (calling > >> base class operator=()), Clang FE assign region counters to the function > >> body but does not emit profile counter increment for the function entry. > >> This leads to many problems: > >> > >> 1) the operator body does not have profile data generated leading to > >> warning in profile-use > >> 2) the size of the function body may be large and lack of profile data > may > >> lead to wrong inlining decisions > >> 3) when FE assign region counters to the function, it also emit coverage > >> mapping data for the function -- but it has no coverage data which is > >> confusing (currently the llvm-cov tool will report malformed format (as > the > >> name of the operator is not put into the right name section). > >> > >> http://reviews.llvm.org/D16947 > >> > >> Files: > >> lib/CodeGen/CGClass.cpp > >> test/Profile/def-assignop.cpp > >> > >> Index: test/Profile/def-assignop.cpp > >> =================================================================== > >> --- test/Profile/def-assignop.cpp > >> +++ test/Profile/def-assignop.cpp > >> @@ -0,0 +1,34 @@ > >> +// RUN: %clang_cc1 -x c++ %s -triple x86_64-unknown-linux-gnu > >> -main-file-name def-assignop.cpp -o - -emit-llvm > -fprofile-instrument=clang > >> | FileCheck --check-prefix=PGOGEN %s > >> + > >> + > >> +struct B { > >> + int B; > >> + void *operator=(const struct B &b2) { > >> + if (b2.B == 0) { > >> + B = b2.B + 1; > >> + } else > >> + B = b2.B; > >> + return this; > >> + } > >> +}; > >> + > >> +struct A : public B { > >> + A &operator=(const A &) = default; > >> +// PGOGEN: define {{.*}}@_ZN1AaSERKS_( > >> +// PGOGEN: %pgocount = load {{.*}} @__profc__ZN1AaSERKS_ > >> +// PGOGEN: {{.*}}add{{.*}}%pgocount, 1 > >> +// PGOGEN: store{{.*}}@__profc__ZN1AaSERKS_ > >> + int I; > >> + int J; > >> + int getI() { return I; } > >> +}; > >> + > >> +A aa; > >> +int g; > >> +int main() { > >> + A aa2; > >> + aa2 = aa; > >> + > >> + g = aa2.getI(); > >> + return 0; > >> +} > >> Index: lib/CodeGen/CGClass.cpp > >> =================================================================== > >> --- lib/CodeGen/CGClass.cpp > >> +++ lib/CodeGen/CGClass.cpp > >> @@ -1608,6 +1608,7 @@ > >> > >> LexicalScope Scope(*this, RootCS->getSourceRange()); > >> > >> + incrementProfileCounter(RootCS); > >> AssignmentMemcpyizer AM(*this, AssignOp, Args); > >> for (auto *I : RootCS->body()) > >> AM.emitAssignment(I); > >> > >> > >> > >> _______________________________________________ > >> cfe-commits mailing list > >> cfe-commits@lists.llvm.org > >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >> > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits