<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.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.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
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-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">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>