Hello GCC community. I started this thread on the state of AutoFDO in GCC more than a year ago. Here is the first message in the thread: https://gcc.gnu.org/pipermail/gcc/2021-April/235860.html
Since then I committed a number of patches to revive AutoFDO in GCC: Fix a typo in an AutoFDO error string<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=23691ddd3aa3ffe55892b2bff54f9a15a89de2b4> Update gen_autofdo_event.py and gcc-auto-profile.<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=01d402c5e0ac1ddf5618bbe316b50067625fda46> Fixes for AutoFDO tests<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=f9ad3d5339faaaed6e15a7b27d90fbc66eb72f37> Fix indir-call-prof-2.c with AutoFDO<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=0ed093c7c3f755bc1cd80e5186abeb2f5c50ee0c> Fixes for AutoFDO testing<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=9265b378531391498ec1727f67a45da72a6c07e9> Fix indirect call inlining with AutoFDO<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=285aa6895d479bed8e72ad363290846645b6faa0> Improve AutoFDO count propagation algorithm<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=3d9e6767939e9658260e2506e81ec32b37cba041> AutoFDO: don't set param_early_inliner_max_iterations to 10.<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=c17975d81aaed49ff759c20c68b31304a6953d58> AutoFDO: Don't try to promote indirect calls that result in recursive direct calls<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=ba125745d9e9fe90a18a2af8701b3269c5fdd468> Fix profile count maintenance in vectorizer peeling.<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5af22024f62f1f596a35d3c138d41d47d5697ca0> I also made a number of fixes and improvements to create_gcov tool in https://github.com/google/autofdo . AutoFDO in GCC is in a much better shape now. I have a further set of patches that improve DWARF discriminator support in GCC and enable AutoFDO to use discriminators. It's based on commits in an old Google vendor branch as described in Andi's mail below but uses a different approach for keeping track of per-instruction discriminators. I submitted the first (and the biggest) of these patches almost 2 months ago on June 2: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5af22024f62f1f596a35d3c138d41d47d5697ca0 but only got a review from Andi (https://gcc.gnu.org/pipermail/gcc-patches/2022-June/596549.html) who is not allowed to approve patches for commit. I pinged gcc-patches twice with no success. I would appreciate help in getting a review on this patch so that I can get it committed and submit patches that depend on it. Thank you, Eugene -----Original Message----- From: Andi Kleen <a...@linux.intel.com> Sent: Monday, May 10, 2021 10:21 AM To: Joseph Myers <jos...@codesourcery.com> Cc: Jan Hubicka <hubi...@ucw.cz>; gcc <gcc@gcc.gnu.org>; Eugene Rozenfeld <eugene.rozenf...@microsoft.com> Subject: [EXTERNAL] Re: State of AutoFDO in GCC On Mon, May 10, 2021 at 04:55:50PM +0000, Joseph Myers wrote: > On Mon, 10 May 2021, Andi Kleen via Gcc wrote: > > > It's difficult to find now because it was a branch in the old SVN > > that wasn't converted. Sadly the great git conversion was quite lossy. > > All branches and tags, including deleted ones, were converted (under > not-fetched-by-default refs in some cases); the git repository has > everything that might plausibly be useful, omitting only a few things > that would have been meaningless to convert, such as mistaken branch > creations in the root of the repository and the SVN hooks directory. > Use "git ls-remote git://gcc.gnu.org/git/gcc.git" to see the full list > of over 5000 refs available in the repository (or do a clone with > --mirror to fetch them all). Okay thanks. I don't see them in any of the web interfaces, neither on https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgcc.gnu.org%2Fgit%2Fgitweb.cgi%3Fp%3Dgcc.git&data=04%7C01%7CEugene.Rozenfeld%40microsoft.com%7C9d79b87018f24bcbf8cc08d913d80bd0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637562640903545786%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=ts53XULDtR3o7fevlntCJdtzRqTo9R85LrxJ0ZfOBnE%3D&reserved=0 nor on https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fgcc-mirror%2Fgcc&data=04%7C01%7CEugene.Rozenfeld%40microsoft.com%7C9d79b87018f24bcbf8cc08d913d80bd0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637562640903545786%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=%2FPGF3vy3hD1OwiXmWzkUnOt9%2BR3YArZw0kCVueOKYpc%3D&reserved=0 but git fetch origin vendors/google/heads/gcc-4_8 does the trick for fetching the commits, but not the symbolic branches. Anyways with that it looks like the discriminator changes are: commit fd9de90d750e3588b1e5a218b28102b6c8bb8434 Author: Dehao Chen <de...@gcc.gnu.org<mailto:de...@gcc.gnu.org>> Date: Thu Oct 10 14:39:31 2013 +0000 Use only lineno+discriminator (remove the callee function name) as the key to represent callsite. Because each callsite will have its discriminator if in the same line. 2013-10-10 Dehao Chen <de...@google.com<mailto:de...@google.com>> * gcc/auto-profile.c (get_function_instance_by_decl): Remove callee_name from callsite. (read_function_instance): Likewise. From-SVN: r203379 commit 3987da76affbfbe7195c0a16b33beedc649ec14f Author: Dehao Chen <de...@gcc.gnu.org<mailto:de...@gcc.gnu.org>> Date: Tue Aug 27 16:46:49 2013 +0000 Refactor AutoFDO to: 1. Now that we have discriminator for inlined callsite, we do not need special handling for callsite location any more. 2. If a source line is mapped to multiple BBs, only the first BB will be annotated. 3. Before actual annotation, mark everythin BB/edge as not annotated. 2013-08-27 Dehao Chen <de...@google.com<mailto:de...@google.com>> * gcc/auto-profile.c (location_set): New data structure. (get_count_info): Add new parameter. (get_combined_location): Remove unused parameter. (get_inline_stack): Remove unused parameter. (afdo_get_bb_count): Add new parameter. (afdo_annotate_cfg): Reset annotated flags. commit 1e6c4a7a8fb8e20545bb9f9032d3854f3f794c18 Author: Dehao Chen <de...@gcc.gnu.org<mailto:de...@gcc.gnu.org>> Date: Thu Aug 22 17:20:29 2013 +0000 Set discriminator for call stmts within a same basic block. 2013-08-22 Dehao Chen <de...@google.com<mailto:de...@google.com>> * gcc/tree-cfg.c (assign_discriminators): assign discriminator for call stmt in a same BB if it is mapped to a same line. commit b0be0175f4cf18fdd77bb013b181eead3a0a4773 Author: Dehao Chen <de...@gcc.gnu.org<mailto:de...@gcc.gnu.org>> Date: Mon Aug 19 21:26:33 2013 +0000 Fix the discriminator assignment bug during hashing. 2013-08-19 Dehao Chen <de...@google.com<mailto:de...@google.com>> * tree-cfg.c (next_discriminator_for_locus): Fix discriminator assignment bug. From-SVN: r201857 commit 9fa26998a63d4b22b637ed8702520819e408a694 Author: Dehao Chen <de...@gcc.gnu.org<mailto:de...@gcc.gnu.org>> Date: Mon Aug 19 20:16:47 2013 +0000 Add discrminator for inlined callsites. 2013-08-19 Dehao Chen (de...@google.com<mailto:de...@google.com>) * include/dwarf2.def (DW_AT_GNU_discriminator): New attribute. * gcc/dwarf2out.c (add_call_src_coords_attributes): Emit discriminator attribute for inlined callsite. From-SVN: r201856 -Andi