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