<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;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@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="MsoNormal"><span style="color:#1F497D">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Any reviewers for this patch ? Any suggestions ?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Opt tool’s output for this ll before and after the patch is also attached.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Tejas<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvm-dev [mailto:llvm-dev-bounces@lists.llvm.org]
<b>On Behalf Of </b>Budukh, Tejas via llvm-dev<br>
<b>Sent:</b> Friday, November 06, 2015 9:43 AM<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> [llvm-dev] [PATCH] patch for missed constantFold optimization in InstCombine<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi All,<o:p></o:p></p>
<p class="MsoNormal">llvm::ConstantFoldCompareInstOperands misses an optimization when it tries to constantFold a compare instruction containing addrspacecast instead of combination of ptrtoint and inttoptr. Adding the patched code snippet in the code would
 enable the pass to handle addrspacecast and constantFold the missing cases.<o:p></o:p></p>
<p class="MsoNormal">Attached is the .ll file for the reproducer. Let me know if there are any suggestions/comments or I can commit the patch.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Patched code :<o:p></o:p></p>
<p class="MsoNormal">Index: ConstantFolding.cpp<o:p></o:p></p>
<p class="MsoNormal">===================================================================<o:p></o:p></p>
<p class="MsoNormal">diff --git a/llvm/trunk/lib/Analysis/ConstantFolding.cpp b/llvm/trunk/lib/Analysis/ConstantFolding.cpp<o:p></o:p></p>
<p class="MsoNormal">--- a/llvm/trunk/lib/Analysis/ConstantFolding.cpp            (revision 252222)<o:p></o:p></p>
<p class="MsoNormal">+++ b/llvm/trunk/lib/Analysis/ConstantFolding.cpp        (working copy)<o:p></o:p></p>
<p class="MsoNormal">@@ -1137,6 +1137,12 @@<o:p></o:p></p>
<p class="MsoNormal">           return ConstantFoldCompareInstOperands(Predicate, C, Null, DL, TLI);<o:p></o:p></p>
<p class="MsoNormal">         }<o:p></o:p></p>
<p class="MsoNormal">       }<o:p></o:p></p>
<p class="MsoNormal">+      <o:p></o:p></p>
<p class="MsoNormal">+      if (CE0->getOpcode() == Instruction::AddrSpaceCast) {<o:p></o:p></p>
<p class="MsoNormal">+          Constant *C = CE0->getOperand(0);<o:p></o:p></p>
<p class="MsoNormal">+          Constant *Null = Constant::getNullValue(C->getType());<o:p></o:p></p>
<p class="MsoNormal">+          return ConstantFoldCompareInstOperands(Predicate, C, Null, TD, TLI);<o:p></o:p></p>
<p class="MsoNormal">+      }<o:p></o:p></p>
<p class="MsoNormal">     }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">     if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(Ops1)) {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Tejas<o:p></o:p></p>
</div>
</body>
</html>