<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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
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;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle20
        {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 bgcolor=white lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks Anshu for the suggestion.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I’ll fix it in the next patch.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>-Jyotsna<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>--<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation<o:p></o:p></span></p></div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><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";color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'> Anshuman Dasgupta [mailto:adasgupt@codeaurora.org] <br><b>Sent:</b> Thursday, November 29, 2012 9:29 AM<br><b>To:</b> Jyotsna Verma<br><b>Cc:</b> llvm-commits@cs.uiuc.edu<br><b>Subject:</b> Re: [llvm-commits] [llvm] r168810 - in /llvm/trunk/lib/Target/Hexagon: HexagonISelDAGToDAG.cpp HexagonOperands.td<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><pre>Jyotsna,<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>> +bool HexagonDAGToDAGISel::isConstExtProfitable(SDNode *N) const {<o:p></o:p></pre><pre>> +  unsigned UseCount = 0;<o:p></o:p></pre><pre>> +  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {<o:p></o:p></pre><pre>> +    UseCount++;<o:p></o:p></pre><pre>> +  }<o:p></o:p></pre><pre>+  return (UseCount <= 1);<o:p></o:p></pre><pre><o:p> </o:p></pre><pre><o:p> </o:p></pre><pre>This part should be simplified to:<o:p></o:p></pre><pre>---<o:p></o:p></pre><pre>return (N->use_empty() || N->hasOneUse());<o:p></o:p></pre><pre>---<o:p></o:p></pre><p class=MsoNormal style='margin-bottom:12.0pt'><tt><span style='font-size:10.0pt'>You don't have to change this immediately but please work it in to your next set of cleanup patches.</span></tt><span style='font-size:10.0pt;font-family:"Courier New"'><br><br><tt>(Also, no braces for a single statement for loop but the loop will go away in any case.)</tt><br><br><tt>Thanks</tt><br><tt>-Anshu</tt></span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><tt><span style='font-size:10.5pt'>---</span></tt><span style='font-size:10.5pt;font-family:"Courier New"'><br><tt>Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation</tt></span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><br><br><br><tt>On 11/28/2012 2:58 PM, Jyotsna Verma wrote:</tt></span><o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><pre>Author: jverma<o:p></o:p></pre><pre>Date: Wed Nov 28 14:58:14 2012<o:p></o:p></pre><pre>New Revision: 168810<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=168810&view=rev">http://llvm.org/viewvc/llvm-project?rev=168810&view=rev</a><o:p></o:p></pre><pre>Log:<o:p></o:p></pre><pre>Define signed const-ext immediate operands and their predicates.<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Modified:<o:p></o:p></pre><pre>    llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp<o:p></o:p></pre><pre>    llvm/trunk/lib/Target/Hexagon/HexagonOperands.td<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Modified: llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp<o:p></o:p></pre><pre>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp?rev=168810&r1=168809&r2=168810&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp?rev=168810&r1=168809&r2=168810&view=diff</a><o:p></o:p></pre><pre>==============================================================================<o:p></o:p></pre><pre>--- llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp (original)<o:p></o:p></pre><pre>+++ llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp Wed Nov 28 14:58:14 2012<o:p></o:p></pre><pre>@@ -94,6 +94,7 @@<o:p></o:p></pre><pre>   SDNode *SelectConstant(SDNode *N);<o:p></o:p></pre><pre>   SDNode *SelectConstantFP(SDNode *N);<o:p></o:p></pre><pre>   SDNode *SelectAdd(SDNode *N);<o:p></o:p></pre><pre>+  bool isConstExtProfitable(SDNode *N) const;<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>   // Include the pieces autogenerated from the target description.<o:p></o:p></pre><pre> #include "HexagonGenDAGISel.inc"<o:p></o:p></pre><pre>@@ -1507,3 +1508,13 @@<o:p></o:p></pre><pre>   OutOps.push_back(Op1);<o:p></o:p></pre><pre>   return false;<o:p></o:p></pre><pre> }<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+bool HexagonDAGToDAGISel::isConstExtProfitable(SDNode *N) const {<o:p></o:p></pre><pre>+  unsigned UseCount = 0;<o:p></o:p></pre><pre>+  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {<o:p></o:p></pre><pre>+    UseCount++;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+  return (UseCount <= 1);<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Modified: llvm/trunk/lib/Target/Hexagon/HexagonOperands.td<o:p></o:p></pre><pre>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonOperands.td?rev=168810&r1=168809&r2=168810&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonOperands.td?rev=168810&r1=168809&r2=168810&view=diff</a><o:p></o:p></pre><pre>==============================================================================<o:p></o:p></pre><pre>--- llvm/trunk/lib/Target/Hexagon/HexagonOperands.td (original)<o:p></o:p></pre><pre>+++ llvm/trunk/lib/Target/Hexagon/HexagonOperands.td Wed Nov 28 14:58:14 2012<o:p></o:p></pre><pre>@@ -465,3 +465,114 @@<o:p></o:p></pre><pre>   int8_t v = (int8_t)N->getSExtValue();<o:p></o:p></pre><pre>   return (v >= 0 && v <= 7);<o:p></o:p></pre><pre> }]>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+// Extendable immediate operands.<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+let PrintMethod = "printExtOperand" in {<o:p></o:p></pre><pre>+  def s16Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s12Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s10Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s9Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s8Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s6Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s11_0Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s11_1Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s11_2Ext : Operand<i32>;<o:p></o:p></pre><pre>+  def s11_3Ext : Operand<i32>;<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+let PrintMethod = "printImmOperand" in<o:p></o:p></pre><pre>+def u0AlwaysExt : Operand<i32>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+// Predicates for constant extendable operands<o:p></o:p></pre><pre>+def s16ExtPred  : PatLeaf<(i32 imm), [{<o:p></o:p></pre><pre>+  int64_t v = (int64_t)N->getSExtValue();<o:p></o:p></pre><pre>+  if (!Subtarget.hasV4TOps())<o:p></o:p></pre><pre>+    // Return true if the immediate can fit in a 16-bit sign extended field.<o:p></o:p></pre><pre>+    return isInt<16>(v);<o:p></o:p></pre><pre>+  else {<o:p></o:p></pre><pre>+    if (isInt<16>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+    // Return true if extending this immediate is profitable and the value<o:p></o:p></pre><pre>+    // can fit in a 32-bit signed field.<o:p></o:p></pre><pre>+    if (isConstExtProfitable(Node) && isInt<32>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+    else<o:p></o:p></pre><pre>+      return false;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+}]>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+def s10ExtPred  : PatLeaf<(i32 imm), [{<o:p></o:p></pre><pre>+  int64_t v = (int64_t)N->getSExtValue();<o:p></o:p></pre><pre>+  if (!Subtarget.hasV4TOps())<o:p></o:p></pre><pre>+    // Return true if the immediate can fit in a 10-bit sign extended field.<o:p></o:p></pre><pre>+    return isInt<10>(v);<o:p></o:p></pre><pre>+  else {<o:p></o:p></pre><pre>+    if (isInt<10>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+    // Return true if extending this immediate is profitable and the value<o:p></o:p></pre><pre>+    // can fit in a 32-bit signed field.<o:p></o:p></pre><pre>+    if (isConstExtProfitable(Node) && isInt<32>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+    else<o:p></o:p></pre><pre>+      return false;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+}]>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+def s9ExtPred  : PatLeaf<(i32 imm), [{<o:p></o:p></pre><pre>+  int64_t v = (int64_t)N->getSExtValue();<o:p></o:p></pre><pre>+  if (!Subtarget.hasV4TOps())<o:p></o:p></pre><pre>+    // Return true if the immediate can fit in a 9-bit sign extended field.<o:p></o:p></pre><pre>+    return isInt<9>(v);<o:p></o:p></pre><pre>+  else {<o:p></o:p></pre><pre>+    if (isInt<9>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+    // Return true if extending this immediate is profitable and the value<o:p></o:p></pre><pre>+    // can fit in a 32-bit unsigned field.<o:p></o:p></pre><pre>+    if (isConstExtProfitable(Node) && isInt<32>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+    else<o:p></o:p></pre><pre>+      return false;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+}]>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+def s8ExtPred  : PatLeaf<(i32 imm), [{<o:p></o:p></pre><pre>+  int64_t v = (int64_t)N->getSExtValue();<o:p></o:p></pre><pre>+  if (!Subtarget.hasV4TOps())<o:p></o:p></pre><pre>+    // Return true if the immediate can fit in a 8-bit sign extended field.<o:p></o:p></pre><pre>+    return isInt<8>(v);<o:p></o:p></pre><pre>+  else {<o:p></o:p></pre><pre>+    if (isInt<8>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+    // Return true if extending this immediate is profitable and the value<o:p></o:p></pre><pre>+    // can fit in a 32-bit signed field.<o:p></o:p></pre><pre>+    if (isConstExtProfitable(Node) && isInt<32>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+    else<o:p></o:p></pre><pre>+      return false;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+}]>;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+def s8_16ExtPred  : PatLeaf<(i32 imm), [{<o:p></o:p></pre><pre>+  int64_t v = (int64_t)N->getSExtValue();<o:p></o:p></pre><pre>+  if (!Subtarget.hasV4TOps())<o:p></o:p></pre><pre>+    // Return true if the immediate fits in a 8-bit sign extended field.<o:p></o:p></pre><pre>+    return isInt<8>(v);<o:p></o:p></pre><pre>+  else {<o:p></o:p></pre><pre>+    if (isInt<8>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+    // Return true if extending this immediate is profitable and the value<o:p></o:p></pre><pre>+    // can't fit in a 16-bit signed field. This is required to avoid<o:p></o:p></pre><pre>+    // unnecessary constant extenders.<o:p></o:p></pre><pre>+    if (isConstExtProfitable(Node) && !isInt<16>(v))<o:p></o:p></pre><pre>+      return true;<o:p></o:p></pre><pre>+    else<o:p></o:p></pre><pre>+      return false;<o:p></o:p></pre><pre>+  }<o:p></o:p></pre><pre>+}]>;<o:p></o:p></pre><pre><o:p> </o:p></pre><pre><o:p> </o:p></pre><pre>_______________________________________________<o:p></o:p></pre><pre>llvm-commits mailing list<o:p></o:p></pre><pre><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><o:p></o:p></pre><pre><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><o:p></o:p></pre></blockquote><p class=MsoNormal><o:p> </o:p></p></div></div></body></html>