<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in func-entry.proftext</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>6186971a - [PGO] Detect more structural changes with the stable hash</title>
        <link>http://172.16.0.5:8080/history/llvm-project-15.0.7/clang/test/Profile/Inputs/func-entry.proftext#6186971a</link>
        <description>[PGO] Detect more structural changes with the stable hashLifting from Bob Wilson&apos;s notes: The hash value that we compute andstore in PGO profile data to detect out-of-date profiles does notinclude enough information. This means that many significant changes tothe source will not cause compiler warnings about the profile being outof date, and worse, we may continue to use the outdated profile data tomake bad optimization decisions.  There is some tension here becausesome source changes won&apos;t affect PGO and we don&apos;t want to invalidate theprofile unnecessarily.This patch adds a new hashing scheme which is more sensitive to loopnesting, conditions, and out-of-order control flow. Here are exampleswhich show snippets which get the same hash under the current scheme,and different hashes under the new scheme:Loop Nesting Example--------------------  // Snippet 1  while (foo()) {    while (bar()) {}  }  // Snippet 2  while (foo()) {}  while (bar()) {}Condition Example-----------------  // Snippet 1  if (foo())    bar();  baz();  // Snippet 2  if (foo())    bar();  else    baz();Out-of-order Control Flow Example---------------------------------  // Snippet 1  while (foo()) {    if (bar()) {}    baz();  }  // Snippet 2  while (foo()) {    if (bar())      continue;    baz();  }In each of these cases, it&apos;s useful to differentiate between thesnippets because swapping their profiles gives bad optimization hints.The new hashing scheme considers some logical operators in an effort todetect more changes in conditions. This isn&apos;t a perfect scheme. E.g, itdoes not produce the same hash for these equivalent snippets:  // Snippet 1  bool c = !a || b;  if (d &amp;&amp; e) {}  // Snippet 2  bool f = d &amp;&amp; e;  bool c = !a || b;  if (f) {}This would require an expensive data flow analysis. Short of that, thenew hashing scheme looks reasonably complete, based on a scan over thestatements we place counters on.Profiles which use the old version of the PGO hash remain valid and canbe used without issue (there are tests in tree which check this).rdar://17068282Differential Revision: https://reviews.llvm.org/D39446llvm-svn: 318229

            List of files:
            /llvm-project-15.0.7/clang/test/Profile/Inputs/func-entry.proftext</description>
        <pubDate>Tue, 14 Nov 2017 23:56:53 +0000</pubDate>
        <dc:creator>Vedant Kumar &lt;vsk@apple.com&gt;</dc:creator>
    </item>
<item>
        <title>aa8b1cb8 - Set function entry counts with -fprofile-instr-use.</title>
        <link>http://172.16.0.5:8080/history/llvm-project-15.0.7/clang/test/Profile/Inputs/func-entry.proftext#aa8b1cb8</link>
        <description>Set function entry counts with -fprofile-instr-use.This generates function entry counts from instrumentation profiles.llvm-svn: 238360

            List of files:
            /llvm-project-15.0.7/clang/test/Profile/Inputs/func-entry.proftext</description>
        <pubDate>Wed, 27 May 2015 21:58:42 +0000</pubDate>
        <dc:creator>Diego Novillo &lt;dnovillo@google.com&gt;</dc:creator>
    </item>
</channel>
</rss>
