<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">Hi Nick,<o:p></o:p></p>
<p class="MsoPlainText">Using Vtune, our colleague Xiaofei, collected profile information for FoldingSet (see attached). It is observed that the hash calculation part is especially hot with benchmarks having many loops, increasing the overhead within SCEV.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">The reason being, whenever FoldingSet is used as a hash map in different classes such as SCEV and Selection DAG, all the information is copied into FoldingSetNode, which is a clone of the original object.  The aim to solve this is to
 calculate the hash value based on SCEV itself, rather than using the hash function of FoldingSetNode. Even though this causes rewrite of the hash calculation, simple arithmetic operations such as XOR, AND can be used instead of the complicated hash algorithms
 in FoldingSetnode.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks<o:p></o:p></p>
<p class="MsoPlainText">Ram<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-----Original Message-----<br>
From: Nick Lewycky [mailto:nicholas@mxc.ca] <br>
Sent: Wednesday, February 06, 2013 4:23 AM<br>
To: Murali, Sriram<br>
Cc: llvm-commits@cs.uiuc.edu<br>
Subject: Re: [PATCH][Review Requested][Compilation Time] Calculate hash value and equality comparison within SCEV node itself</p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Murali, Sriram wrote:<o:p></o:p></p>
<p class="MsoPlainText">> SCEV is currently implemented as a FoldingSetNode to calculate the
<o:p></o:p></p>
<p class="MsoPlainText">> hashing value and for equality comparison. This causes some
<o:p></o:p></p>
<p class="MsoPlainText">> performance loss. This patch aims at improving the compilation time
<o:p></o:p></p>
<p class="MsoPlainText">> performance by implementing the hashing and equality comparison within
<o:p></o:p></p>
<p class="MsoPlainText">> SCEV class instead of inheriting FoldingSetNode. The compilation
<o:p></o:p></p>
<p class="MsoPlainText">> performance gain for this particular refactoring is around 2%.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">What is it about FoldingSet that causes a performance loss? It should not. I want to understand this. :)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Nick<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> This patch is part of a series of compile time improvements. Although
<o:p></o:p></p>
<p class="MsoPlainText">> these were originally produced by our colleague Wan Xiaofei, our team
<o:p></o:p></p>
<p class="MsoPlainText">> consisting of <a href="mailto:tyler.nowicki@intel.com">
<span style="color:windowtext;text-decoration:none">tyler.nowicki@intel.com</span></a>
<o:p></o:p></p>
<p class="MsoPlainText">> <<a href="mailto:tyler.nowicki@intel.com"><span style="color:windowtext;text-decoration:none">mailto:tyler.nowicki@intel.com</span></a>>;
<a href="mailto:preston.gurd@intel.com"><span style="color:windowtext;text-decoration:none">preston.gurd@intel.com</span></a>
<o:p></o:p></p>
<p class="MsoPlainText">> <<a href="mailto:preston.gurd@intel.com"><span style="color:windowtext;text-decoration:none">mailto:preston.gurd@intel.com</span></a>>; and
<a href="mailto:sriram.murali@intel.com"><span style="color:windowtext;text-decoration:none">sriram.murali@intel.com</span></a>
<o:p></o:p></p>
<p class="MsoPlainText">> <<a href="mailto:sriram.murali@intel.com"><span style="color:windowtext;text-decoration:none">mailto:sriram.murali@intel.com</span></a>>, are assuming all responsibility for this work.<o:p></o:p></p>
</div>
</body>
</html>