[llvm-commits] [www-releases] r170845 [27/55] - in /www-releases/trunk/3.2/docs: ./ CommandGuide/ HistoricalNotes/ _static/ _templates/ _themes/ _themes/llvm-theme/ _themes/llvm-theme/static/ doxygen/ doxygen/html/ llvm-theme/ llvm-theme/static/ tutorial/

Tanya Lattner tonic at nondot.org
Thu Dec 20 22:58:17 PST 2012


Added: www-releases/trunk/3.2/docs/doxygen/html/RuntimeDyld_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/RuntimeDyld_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/RuntimeDyld_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/RuntimeDyld_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,36 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="RuntimeDyld.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="JITMemoryManager.h",height=0.2,width=0.4,color="black",URL="$JITMemoryManager_8h.html"];
+  Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="JIT.cpp",height=0.2,width=0.4,color="black",URL="$JIT_8cpp.html"];
+  Node2 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="JITDwarfEmitter.cpp",height=0.2,width=0.4,color="black",URL="$JITDwarfEmitter_8cpp.html"];
+  Node2 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="JITEmitter.cpp",height=0.2,width=0.4,color="black",URL="$JITEmitter_8cpp.html"];
+  Node2 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="JITMemoryManager.cpp",height=0.2,width=0.4,color="black",URL="$JITMemoryManager_8cpp.html"];
+  Node2 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="MCJIT.cpp",height=0.2,width=0.4,color="black",URL="$MCJIT_8cpp.html"];
+  Node1 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="MCJIT.h",height=0.2,width=0.4,color="black",URL="$lib_2ExecutionEngine_2MCJIT_2MCJIT_8h.html"];
+  Node8 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="RuntimeDyldImpl.h",height=0.2,width=0.4,color="black",URL="$RuntimeDyldImpl_8h.html"];
+  Node9 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="RuntimeDyld.cpp",height=0.2,width=0.4,color="black",URL="$RuntimeDyld_8cpp.html"];
+  Node9 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="RuntimeDyldELF.h",height=0.2,width=0.4,color="black",URL="$RuntimeDyldELF_8h.html"];
+  Node11 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="RuntimeDyldELF.cpp",height=0.2,width=0.4,color="black",URL="$RuntimeDyldELF_8cpp.html"];
+  Node9 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="RuntimeDyldMachO.h",height=0.2,width=0.4,color="black",URL="$RuntimeDyldMachO_8h.html"];
+  Node13 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="RuntimeDyldMachO.cpp",height=0.2,width=0.4,color="black",URL="$RuntimeDyldMachO_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SCCP_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SCCP_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SCCP_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SCCP_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+40d1d4e2f0dd60d72eb23ff92bef7ee7
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUAsmPrinter_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUAsmPrinter_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUAsmPrinter_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUAsmPrinter_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUAsmPrinter.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Defines</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUAsmPrinter.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SPU_8h_source.html">SPU.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPUTargetMachine_8h_source.html">SPUTargetMachine.h</a>"</code><br/>
+<code>#include "<a class="el" href="Constants_8h_source.html">llvm/Constants.h</a>"</code><br/>
+<code>#include "<a class="el" href="DerivedTypes_8h_source.html">llvm/DerivedTypes.h</a>"</code><br/>
+<code>#include "<a class="el" href="Module_8h_source.html">llvm/Module.h</a>"</code><br/>
+<code>#include "<a class="el" href="AsmPrinter_8h_source.html">llvm/CodeGen/AsmPrinter.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineModuleInfo_8h_source.html">llvm/CodeGen/MachineModuleInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCStreamer_8h_source.html">llvm/MC/MCStreamer.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCAsmInfo_8h_source.html">llvm/MC/MCAsmInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCSymbol_8h_source.html">llvm/MC/MCSymbol.h</a>"</code><br/>
+<code>#include "<a class="el" href="Mangler_8h_source.html">llvm/Target/Mangler.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetLoweringObjectFile_8h_source.html">llvm/Target/TargetLoweringObjectFile.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetInstrInfo_8h_source.html">llvm/Target/TargetInstrInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetOptions_8h_source.html">llvm/Target/TargetOptions.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetRegisterInfo_8h_source.html">llvm/Target/TargetRegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="SmallString_8h_source.html">llvm/ADT/SmallString.h</a>"</code><br/>
+<code>#include "<a class="el" href="StringExtras_8h_source.html">llvm/ADT/StringExtras.h</a>"</code><br/>
+<code>#include "<a class="el" href="ErrorHandling_8h_source.html">llvm/Support/ErrorHandling.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetRegistry_8h_source.html">llvm/Support/TargetRegistry.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include "SPUGenAsmWriter.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUAsmPrinter.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUAsmPrinter_8cpp__incl.png" border="0" usemap="#SPUAsmPrinter_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SPUAsmPrinter_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUAsmPrinter_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a>   "asmprinter"</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUAsmPrinter_8cpp.html#a7a556c46187302532e2ba2a4fa942f34">LLVMInitializeCellSPUAsmPrinter</a> ()</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="SPUAsmPrinter.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_TYPE   "asmprinter"</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUAsmPrinter_8cpp_source.html#l00016">16</a> of file <a class="el" href="SPUAsmPrinter_8cpp_source.html">SPUAsmPrinter.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a7a556c46187302532e2ba2a4fa942f34"></a><!-- doxytag: member="SPUAsmPrinter.cpp::LLVMInitializeCellSPUAsmPrinter" ref="a7a556c46187302532e2ba2a4fa942f34" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void LLVMInitializeCellSPUAsmPrinter </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUAsmPrinter_8cpp_source.html#l00331">331</a> of file <a class="el" href="SPUAsmPrinter_8cpp_source.html">SPUAsmPrinter.cpp</a>.</p>
+
+<p>References <a class="el" href="CellSPUTargetInfo_8cpp_source.html#l00015">llvm::TheCellSPUTarget</a>, and <a class="el" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">llvm::X</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:47 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUHazardRecognizers.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">SPUHazardRecognizers.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="SPUHazardRecognizers_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SPUHazardRecognizers.cpp - Cell Hazard Recognizer Impls -----------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file implements hazard recognizers for scheduling on Cell SPU</span>
+<a name="l00011"></a>00011 <span class="comment">// processors.</span>
+<a name="l00012"></a>00012 <span class="comment">//</span>
+<a name="l00013"></a>00013 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00014"></a>00014 
+<a name="l00015"></a><a class="code" href="SPUHazardRecognizers_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">00015</a> <span class="preprocessor">#define DEBUG_TYPE "sched"</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="SPUHazardRecognizers_8h.html">SPUHazardRecognizers.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="SPU_8h.html">SPU.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="SPUInstrInfo_8h.html">SPUInstrInfo.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="ScheduleDAG_8h.html">llvm/CodeGen/ScheduleDAG.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="SelectionDAGNodes_8h.html">llvm/CodeGen/SelectionDAGNodes.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00024"></a>00024 <span class="keyword">using namespace </span>llvm;
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00027"></a>00027 <span class="comment">// Cell SPU hazard recognizer</span>
+<a name="l00028"></a>00028 <span class="comment">//</span>
+<a name="l00029"></a>00029 <span class="comment">// This is the pipeline hazard recognizer for the Cell SPU processor. It does</span>
+<a name="l00030"></a>00030 <span class="comment">// very little right now.</span>
+<a name="l00031"></a>00031 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00032"></a>00032 <span class="comment"></span>
+<a name="l00033"></a>00033 <span class="comment">/// Return the pipeline hazard type encountered or generated by this</span>
+<a name="l00034"></a>00034 <span class="comment">/// instruction. Currently returns NoHazard.</span>
+<a name="l00035"></a>00035 <span class="comment">///</span>
+<a name="l00036"></a>00036 <span class="comment">/// \return NoHazard</span>
+<a name="l00037"></a>00037 <span class="comment"></span><a class="code" href="classllvm_1_1ScheduleHazardRecognizer.html#a9bec0e329b12bbc503d08db497d43267">ScheduleHazardRecognizer::HazardType</a>
+<a name="l00038"></a><a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a2b43438ef12beec517393a241492008d">00038</a> <a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a2b43438ef12beec517393a241492008d">SPUHazardRecognizer::getHazardType</a>(<a class="code" href="classllvm_1_1SUnit.html" title="SUnit - Scheduling unit. This is a node in the scheduling DAG.">SUnit</a> *SU, <span class="keywordtype">int</span> Stalls)
+<a name="l00039"></a>00039 {
+<a name="l00040"></a>00040   <span class="comment">// Initial thoughts on how to do this, but this code cannot work unless the</span>
+<a name="l00041"></a>00041   <span class="comment">// function's prolog and epilog code are also being scheduled so that we can</span>
+<a name="l00042"></a>00042   <span class="comment">// accurately determine which pipeline is being scheduled.</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#if 0</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>  assert(Stalls == 0 && <span class="stringliteral">"SPU hazards don't yet support scoreboard lookahead"</span>);
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Node = SU-><a class="code" href="classllvm_1_1SUnit.html#ac899d0c77f6c945c60c451a69456ae1b">getNode</a>()->getFlaggedMachineNode();
+<a name="l00047"></a>00047   <a class="code" href="classllvm_1_1ScheduleHazardRecognizer.html#a9bec0e329b12bbc503d08db497d43267">ScheduleHazardRecognizer::HazardType</a> retval = <a class="code" href="classllvm_1_1ScheduleHazardRecognizer.html#a9bec0e329b12bbc503d08db497d43267a4e42ac50bfd060349e49904842121cf1">NoHazard</a>;
+<a name="l00048"></a>00048   <span class="keywordtype">bool</span> mustBeOdd = <span class="keyword">false</span>;
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050   <span class="keywordflow">switch</span> (Node-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>()) {
+<a name="l00051"></a>00051   <span class="keywordflow">case</span> SPU::LQDv16i8:
+<a name="l00052"></a>00052   <span class="keywordflow">case</span> SPU::LQDv8i16:
+<a name="l00053"></a>00053   <span class="keywordflow">case</span> SPU::LQDv4i32:
+<a name="l00054"></a>00054   <span class="keywordflow">case</span> SPU::LQDv4f32:
+<a name="l00055"></a>00055   <span class="keywordflow">case</span> SPU::LQDv2f64:
+<a name="l00056"></a>00056   <span class="keywordflow">case</span> SPU::LQDr128:
+<a name="l00057"></a>00057   <span class="keywordflow">case</span> SPU::LQDr64:
+<a name="l00058"></a>00058   <span class="keywordflow">case</span> SPU::LQDr32:
+<a name="l00059"></a>00059   <span class="keywordflow">case</span> SPU::LQDr16:
+<a name="l00060"></a>00060   <span class="keywordflow">case</span> SPU::LQAv16i8:
+<a name="l00061"></a>00061   <span class="keywordflow">case</span> SPU::LQAv8i16:
+<a name="l00062"></a>00062   <span class="keywordflow">case</span> SPU::LQAv4i32:
+<a name="l00063"></a>00063   <span class="keywordflow">case</span> SPU::LQAv4f32:
+<a name="l00064"></a>00064   <span class="keywordflow">case</span> SPU::LQAv2f64:
+<a name="l00065"></a>00065   <span class="keywordflow">case</span> SPU::LQAr128:
+<a name="l00066"></a>00066   <span class="keywordflow">case</span> SPU::LQAr64:
+<a name="l00067"></a>00067   <span class="keywordflow">case</span> SPU::LQAr32:
+<a name="l00068"></a>00068   <span class="keywordflow">case</span> SPU::LQXv4i32:
+<a name="l00069"></a>00069   <span class="keywordflow">case</span> SPU::LQXr128:
+<a name="l00070"></a>00070   <span class="keywordflow">case</span> SPU::LQXr64:
+<a name="l00071"></a>00071   <span class="keywordflow">case</span> SPU::LQXr32:
+<a name="l00072"></a>00072   <span class="keywordflow">case</span> SPU::LQXr16:
+<a name="l00073"></a>00073   <span class="keywordflow">case</span> SPU::STQDv16i8:
+<a name="l00074"></a>00074   <span class="keywordflow">case</span> SPU::STQDv8i16:
+<a name="l00075"></a>00075   <span class="keywordflow">case</span> SPU::STQDv4i32:
+<a name="l00076"></a>00076   <span class="keywordflow">case</span> SPU::STQDv4f32:
+<a name="l00077"></a>00077   <span class="keywordflow">case</span> SPU::STQDv2f64:
+<a name="l00078"></a>00078   <span class="keywordflow">case</span> SPU::STQDr128:
+<a name="l00079"></a>00079   <span class="keywordflow">case</span> SPU::STQDr64:
+<a name="l00080"></a>00080   <span class="keywordflow">case</span> SPU::STQDr32:
+<a name="l00081"></a>00081   <span class="keywordflow">case</span> SPU::STQDr16:
+<a name="l00082"></a>00082   <span class="keywordflow">case</span> SPU::STQDr8:
+<a name="l00083"></a>00083   <span class="keywordflow">case</span> SPU::STQAv16i8:
+<a name="l00084"></a>00084   <span class="keywordflow">case</span> SPU::STQAv8i16:
+<a name="l00085"></a>00085   <span class="keywordflow">case</span> SPU::STQAv4i32:
+<a name="l00086"></a>00086   <span class="keywordflow">case</span> SPU::STQAv4f32:
+<a name="l00087"></a>00087   <span class="keywordflow">case</span> SPU::STQAv2f64:
+<a name="l00088"></a>00088   <span class="keywordflow">case</span> SPU::STQAr128:
+<a name="l00089"></a>00089   <span class="keywordflow">case</span> SPU::STQAr64:
+<a name="l00090"></a>00090   <span class="keywordflow">case</span> SPU::STQAr32:
+<a name="l00091"></a>00091   <span class="keywordflow">case</span> SPU::STQAr16:
+<a name="l00092"></a>00092   <span class="keywordflow">case</span> SPU::STQAr8:
+<a name="l00093"></a>00093   <span class="keywordflow">case</span> SPU::STQXv16i8:
+<a name="l00094"></a>00094   <span class="keywordflow">case</span> SPU::STQXv8i16:
+<a name="l00095"></a>00095   <span class="keywordflow">case</span> SPU::STQXv4i32:
+<a name="l00096"></a>00096   <span class="keywordflow">case</span> SPU::STQXv4f32:
+<a name="l00097"></a>00097   <span class="keywordflow">case</span> SPU::STQXv2f64:
+<a name="l00098"></a>00098   <span class="keywordflow">case</span> SPU::STQXr128:
+<a name="l00099"></a>00099   <span class="keywordflow">case</span> SPU::STQXr64:
+<a name="l00100"></a>00100   <span class="keywordflow">case</span> SPU::STQXr32:
+<a name="l00101"></a>00101   <span class="keywordflow">case</span> SPU::STQXr16:
+<a name="l00102"></a>00102   <span class="keywordflow">case</span> SPU::STQXr8:
+<a name="l00103"></a>00103   <span class="keywordflow">case</span> SPU::RET:
+<a name="l00104"></a>00104     mustBeOdd = <span class="keyword">true</span>;
+<a name="l00105"></a>00105     <span class="keywordflow">break</span>;
+<a name="l00106"></a>00106   <span class="keywordflow">default</span>:
+<a name="l00107"></a>00107     <span class="comment">// Assume that this instruction can be on the even pipe</span>
+<a name="l00108"></a>00108     <span class="keywordflow">break</span>;
+<a name="l00109"></a>00109   }
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111   <span class="keywordflow">if</span> (mustBeOdd && !EvenOdd)
+<a name="l00112"></a>00112     retval = <a class="code" href="classllvm_1_1ScheduleHazardRecognizer.html#a9bec0e329b12bbc503d08db497d43267aad25e3975650edcc9c6fb2917a61dd37">Hazard</a>;
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114   <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"SPUHazardRecognizer EvenOdd "</span> << EvenOdd << <span class="stringliteral">" Hazard "</span>
+<a name="l00115"></a>00115                << retval << <span class="stringliteral">"\n"</span>);
+<a name="l00116"></a>00116   EvenOdd ^= 1;
+<a name="l00117"></a>00117   <span class="keywordflow">return</span> retval;
+<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>  <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ScheduleHazardRecognizer.html#a9bec0e329b12bbc503d08db497d43267a4e42ac50bfd060349e49904842121cf1">NoHazard</a>;
+<a name="l00120"></a>00120 <span class="preprocessor">#endif</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span>}
+<a name="l00122"></a>00122 
+<a name="l00123"></a><a class="code" href="classllvm_1_1SPUHazardRecognizer.html#ab466aa065f91f678dedeb9d39ef88619">00123</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SPUHazardRecognizer.html#ab466aa065f91f678dedeb9d39ef88619">SPUHazardRecognizer::EmitInstruction</a>(<a class="code" href="classllvm_1_1SUnit.html" title="SUnit - Scheduling unit. This is a node in the scheduling DAG.">SUnit</a> *SU)
+<a name="l00124"></a>00124 {
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126 
+<a name="l00127"></a><a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a21069a42cf99a191b6f70bdb5f11a2eb">00127</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a21069a42cf99a191b6f70bdb5f11a2eb">SPUHazardRecognizer::AdvanceCycle</a>()
+<a name="l00128"></a>00128 {
+<a name="l00129"></a>00129   <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"SPUHazardRecognizer::AdvanceCycle\n"</span>);
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 
+<a name="l00132"></a><a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a2d45c3cd230ee9c72a878de55768ed61">00132</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a2d45c3cd230ee9c72a878de55768ed61">SPUHazardRecognizer::EmitNoop</a>()
+<a name="l00133"></a>00133 {
+<a name="l00134"></a>00134   <a class="code" href="classllvm_1_1SPUHazardRecognizer.html#a21069a42cf99a191b6f70bdb5f11a2eb">AdvanceCycle</a>();
+<a name="l00135"></a>00135 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:22 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUHazardRecognizers_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUHazardRecognizers.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUHazardRecognizers.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ScheduleHazardRecognizer_8h_source.html">llvm/CodeGen/ScheduleHazardRecognizer.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUHazardRecognizers.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUHazardRecognizers_8h__incl.png" border="0" usemap="#SPUHazardRecognizers_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUHazardRecognizers_8h__dep__incl.png" border="0" usemap="#SPUHazardRecognizers_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SPUHazardRecognizers_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SPUHazardRecognizer.html">llvm::SPUHazardRecognizer</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1SPUHazardRecognizer.html" title="SPUHazardRecognizer.">SPUHazardRecognizer</a>.  <a href="classllvm_1_1SPUHazardRecognizer.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:47 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUISelLowering_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUISelLowering_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUISelLowering_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUISelLowering_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,961 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUISelLowering.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUISelLowering.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SPUISelLowering_8h_source.html">SPUISelLowering.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPUTargetMachine_8h_source.html">SPUTargetMachine.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPUFrameLowering_8h_source.html">SPUFrameLowering.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPUMachineFunction_8h_source.html">SPUMachineFunction.h</a>"</code><br/>
+<code>#include "<a class="el" href="Constants_8h_source.html">llvm/Constants.h</a>"</code><br/>
+<code>#include "<a class="el" href="Function_8h_source.html">llvm/Function.h</a>"</code><br/>
+<code>#include "<a class="el" href="Intrinsics_8h_source.html">llvm/Intrinsics.h</a>"</code><br/>
+<code>#include "<a class="el" href="CallingConv_8h_source.html">llvm/CallingConv.h</a>"</code><br/>
+<code>#include "<a class="el" href="Type_8h_source.html">llvm/Type.h</a>"</code><br/>
+<code>#include "<a class="el" href="CallingConvLower_8h_source.html">llvm/CodeGen/CallingConvLower.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineFrameInfo_8h_source.html">llvm/CodeGen/MachineFrameInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineFunction_8h_source.html">llvm/CodeGen/MachineFunction.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineInstrBuilder_8h_source.html">llvm/CodeGen/MachineInstrBuilder.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineRegisterInfo_8h_source.html">llvm/CodeGen/MachineRegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="SelectionDAG_8h_source.html">llvm/CodeGen/SelectionDAG.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetLoweringObjectFileImpl_8h_source.html">llvm/CodeGen/TargetLoweringObjectFileImpl.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetOptions_8h_source.html">llvm/Target/TargetOptions.h</a>"</code><br/>
+<code>#include "<a class="el" href="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="ErrorHandling_8h_source.html">llvm/Support/ErrorHandling.h</a>"</code><br/>
+<code>#include "<a class="el" href="MathExtras_8h_source.html">llvm/Support/MathExtras.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include "SPUGenCallingConv.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUISelLowering.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUISelLowering_8cpp__incl.png" border="0" usemap="#SPUISelLowering_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SPUISelLowering_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a70d1f61d342360637ae25dd793f7a89e">LowerLOAD</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> *ST)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Custom lower loads for CellSPU.  <a href="#a70d1f61d342360637ae25dd793f7a89e"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#afae6eb55018d58beb06baf07fd3498a2">LowerSTORE</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> *ST)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Custom lower stores for CellSPU.  <a href="#afae6eb55018d58beb06baf07fd3498a2"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a6d84a6b73c717858aba42d0899580ecb">LowerConstantPool</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> *ST)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate the address of a constant pool entry.  <a href="#a6d84a6b73c717858aba42d0899580ecb"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a3e635fe9406a9fd9450a0665092b23e5">LowerJumpTable</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> *ST)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#af60851a3b57ee2b67d0ae6cf3b85de4f">LowerGlobalAddress</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> *ST)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aff5cccd6907b51362b8be0dc58f356bb">LowerConstantFP</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Custom lower double precision floating point constants.  <a href="#aff5cccd6907b51362b8be0dc58f356bb"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDNode.html">SDNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aa253dde361013013d2a55a8af4fa5237">isLSAAddress</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#afccd3af71a433004f08814352b9aaa0d">getVecImm</a> (<a class="el" href="classllvm_1_1SDNode.html">SDNode</a> *N)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a0f2c057d1045f210ed2abf3837d19580">LowerBUILD_VECTOR</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower a BUILD_VECTOR instruction creatively:  <a href="#a0f2c057d1045f210ed2abf3837d19580"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aa5c2f510f41dee936624366acf22fc11">LowerVECTOR_SHUFFLE</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a73a94b189da56d89fe9ee6552d3cf8ea">LowerSCALAR_TO_VECTOR</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#abd504b632e0694f7a0667e6efa5da184">LowerEXTRACT_VECTOR_ELT</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aad42d2eb2084a6cb015ecf1e1bae04e4">LowerINSERT_VECTOR_ELT</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#ad10e3484265ed241a120d619ad555af5">LowerI8Math</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, <a class="el" href="classunsigned.html">unsigned</a> Opc, const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a3fb7112293bb8f36caa6c36627765483">LowerByteImmed</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower byte immediate operations for v16i8 vectors:  <a href="#a3fb7112293bb8f36caa6c36627765483"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a56e4456040226ed637bcfd1e1da866d7">LowerCTPOP</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Custom lowering for CTPOP (count population)  <a href="#a56e4456040226ed637bcfd1e1da866d7"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aab75f38b3596100fad246630dad9ea3c">LowerFP_TO_INT</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUTargetLowering.html">SPUTargetLowering</a> &TLI)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower ISD::FP_TO_SINT, ISD::FP_TO_UINT for i32.  <a href="#aab75f38b3596100fad246630dad9ea3c"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a8eae7c8d14e742f99bac0c9a7684df3a">LowerINT_TO_FP</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1SPUTargetLowering.html">SPUTargetLowering</a> &TLI)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower ISD::SINT_TO_FP, ISD::UINT_TO_FP for i32.  <a href="#a8eae7c8d14e742f99bac0c9a7684df3a"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#aec740c527c34a0b873bb32f176a8ede3">LowerSETCC</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower ISD::SETCC.  <a href="#aec740c527c34a0b873bb32f176a8ede3"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#ab47933bfe49d29722a2b8345580ef236">LowerSELECT_CC</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Lower ISD::SELECT_CC.  <a href="#ab47933bfe49d29722a2b8345580ef236"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#af5b346e95b0811e0ba8a460a6c7e25f7">LowerTRUNCATE</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Custom lower ISD::TRUNCATE.  <a href="#af5b346e95b0811e0ba8a460a6c7e25f7"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUISelLowering_8cpp.html#a3e2a59d502b1fcd22b33dec3031e4e0d">LowerSIGN_EXTEND</a> (<a class="el" href="classllvm_1_1SDValue.html">SDValue</a> Op, <a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="afccd3af71a433004f08814352b9aaa0d"></a><!-- doxytag: member="SPUISelLowering.cpp::getVecImm" ref="afccd3af71a433004f08814352b9aaa0d" args="(SDNode *N)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a>* getVecImm </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDNode.html">SDNode</a> * </td>
+          <td class="paramname"><em>N</em></td><td>)</td>
+          <td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01511">1511</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00532">llvm::SDNode::getNumOperands()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00538">llvm::SDNode::getOperand()</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00166">llvm::ISD::UNDEF</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l01625">llvm::SPU::get_ILHUvec_imm()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01648">llvm::SPU::get_v2i64_imm()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01639">llvm::SPU::get_v4i32_imm()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01580">llvm::SPU::get_vec_i10imm()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01557">llvm::SPU::get_vec_i16imm()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01606">llvm::SPU::get_vec_i8imm()</a>, and <a class="el" href="SPUISelLowering_8cpp_source.html#l01535">llvm::SPU::get_vec_u18imm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa253dde361013013d2a55a8af4fa5237"></a><!-- doxytag: member="SPUISelLowering.cpp::isLSAAddress" ref="aa253dde361013013d2a55a8af4fa5237" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDNode.html">SDNode</a>* isLSAAddress </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>isLSAAddress - Return the immediate to use if the specified value is representable as a LSA address. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01255">1255</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01161">llvm::ConstantSDNode::getZExtValue()</a>, and <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l01268">llvm::SPUTargetLowering::LowerCall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0f2c057d1045f210ed2abf3837d19580"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerBUILD_VECTOR" ref="a0f2c057d1045f210ed2abf3837d19580" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerBUILD_VECTOR </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower a BUILD_VECTOR instruction creatively: </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01658">1658</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00464">llvm::SmallVectorImpl< T >::assign()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="ValueTypes_8cpp_source.html#l00106">llvm::EVT::getEVTString()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a cl
 ass="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00673">llvm::EVT::getVectorElementType()</a>, <a class="el" href="APInt_8h_source.html#l01214">llvm::APInt::getZExtValue()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l06133">llvm::BuildVectorSDNode::isConstantSplat()</a>, <a class="el" href="SPUISelLowering_8cpp_source.html#l01733">llvm::SPU::LowerV2I64Splat()</a>, <a class="el" href="ErrorHandling_8cpp_source.html#l00052">llvm::report_fatal_error()</a>, <a class="el" href="ValueTypes_8h_source.html#l00150">llvm::MVT::SimpleTy</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T, typename >::size()</a>, <a class=
 "el" href="ValueTypes_8h_source.html#l00066">llvm::MVT::v16i8</a>, <a class="el" href="ValueTypes_8h_source.html#l00088">llvm::MVT::v2f64</a>, <a class="el" href="ValueTypes_8h_source.html#l00079">llvm::MVT::v2i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00086">llvm::MVT::v4f32</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, and <a class="el" href="ValueTypes_8h_source.html#l00071">llvm::MVT::v8i16</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3fb7112293bb8f36caa6c36627765483"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerByteImmed" ref="a3fb7112293bb8f36caa6c36627765483" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerByteImmed </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower byte immediate operations for v16i8 vectors: </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02302">2302</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00464">llvm::SmallVectorImpl< T >::assign()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00363">llvm::SDNode::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00369">llvm::SelectionDAG::getTargetCo
 nstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00673">llvm::EVT::getVectorElementType()</a>, <a class="el" href="APInt_8h_source.html#l01214">llvm::APInt::getZExtValue()</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l06133">llvm::BuildVectorSDNode::isConstantSplat()</a>, and <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aff5cccd6907b51362b8be0dc58f356bb"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerConstantFP" ref="aff5cccd6907b51362b8be0dc58f356bb" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerConstantFP </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Custom lower double precision floating point constants. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01095">1095</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="APFloat_8cpp_source.html#l02960">llvm::APFloat::convertToDouble()</a>, <a class="el" href="MathExtras_8h_source.html#l00385">llvm::DoubleToBits()</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01183">llvm::ConstantFPSDNode::getValueAPF()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType(
 )</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00088">llvm::MVT::v2f64</a>, <a class="el" href="ValueTypes_8h_source.html#l00079">llvm::MVT::v2i64</a>, and <a class="el" href="SPUISelLowering_8h_source.html#l00043">llvm::SPUISD::VEC2PREFSLOT</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d84a6b73c717858aba42d0899580ecb"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerConstantPool" ref="a6d84a6b73c717858aba42d0899580ecb" args="(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerConstantPool </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> * </td>
+          <td class="paramname"><em>ST</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Generate the address of a constant pool entry. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01011">1011</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SPUISelLowering_8h_source.html#l00034">llvm::SPUISD::AFormAddr</a>, <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01325">llvm::ConstantPoolSDNode::getAlignment()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01309">llvm::ConstantPoolSDNode::getConstVal()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="TargetMachine_8cpp_source.html#l00066">llvm::TargetMachine::getRelocationModel()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00243">llvm::SelectionDAG::getTarget()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00412">llvm::SelectionDAG::getTargetConstantPool()</a>, <a c
 lass="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00031">llvm::SPUISD::Hi</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00032">llvm::SPUISD::Lo</a>, <a class="el" href="CodeGen_8h_source.html#l00022">llvm::Reloc::Static</a>, and <a class="el" href="SPUSubtarget_8h_source.html#l00079">llvm::SPUSubtarget::usingLargeMem()</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l01038">llvm::SPU::LowerConstantPool()</a>, and <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a56e4456040226ed637bcfd1e1da866d7"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerCTPOP" ref="a56e4456040226ed637bcfd1e1da866d7" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerCTPOP </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Custom lowering for CTPOP (count population) </p>
+<p>Custom lowering code that counts the number ones in the input operand. SPU has such an instruction, but it counts the number of ones per byte, which then have to be accumulated. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02355">2355</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::ADD</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::AND</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00041">llvm::SPUISD::CNTB</a>, <a class="el" href="MachineRegisterInfo_8cpp_source.html#l00098">llvm::MachineRegisterInfo::createVirtualRegister()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00263">llvm::ISD::EXTRACT_VECTOR_ELT</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00246">llvm::SelectionDAG::getContext()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00471">llvm::SelectionDAG::getCopyFromReg()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00448">llvm::SelectionDAG::getCopyToReg()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00242
 ">llvm::SelectionDAG::getMachineFunction()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="MachineFunction_8h_source.html#l00160">llvm::MachineFunction::getRegInfo()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00527">llvm::EVT::getVectorVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class=
 "el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00042">llvm::SPUISD::PREFSLOT2VEC</a>, <a class="el" href="ValueTypes_8h_source.html#l00150">llvm::MVT::SimpleTy</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRL</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abd504b632e0694f7a0667e6efa5da184"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerEXTRACT_VECTOR_ELT" ref="abd504b632e0694f7a0667e6efa5da184" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerEXTRACT_VECTOR_ELT </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02003">2003</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="ValueTypes_8h_source.html#l00050">llvm::MVT::f32</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href
 ="ValueTypes_8h_source.html#l00682">llvm::EVT::getVectorNumElements()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="ValueTypes_8h_source.html#l00551">llvm::EVT::isSimple()</a>, <a class="el" href="ValueTypes_8h_source.html#l00572">llvm::EVT::isVector()</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="APInt_8h_source.html#l01399">llvm::APInt::logBase2()</a>, <a class="el" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>, <a class="el" href="ErrorHandling_8cpp_source.html#l00052">llvm::report_fatal_error()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SHL</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00045
 ">llvm::SPUISD::SHL_BYTES</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="ValueTypes_8h_source.html#l00150">llvm::MVT::SimpleTy</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00043">llvm::SPUISD::VEC2PREFSLOT</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00367">llvm::ISD::ZERO_EXTEND</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab75f38b3596100fad246630dad9ea3c"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerFP_TO_INT" ref="aab75f38b3596100fad246630dad9ea3c" args="(SDValue Op, SelectionDAG &DAG, const SPUTargetLowering &TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerFP_TO_INT </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUTargetLowering.html">SPUTargetLowering</a> & </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower ISD::FP_TO_SINT, ISD::FP_TO_UINT for i32. </p>
+<p>f32->i32 passes through unchanged, whereas f64->i32 expands to a libcall. All conversions to i64 are expanded to a libcall. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02464">2464</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="DynamicLibrary_8cpp_source.html#l00037">Dummy</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00389">llvm::ISD::FP_TO_SINT</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00341">llvm::RTLIB::getFPTOSINT()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00384">llvm::RTLIB::getFPTOUINT()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, and <a class="el" href="RuntimeLibcalls_8h_source.html#l00301">llvm::RTLIB::UNKNOWN_LIBCALL</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af60851a3b57ee2b67d0ae6cf3b85de4f"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerGlobalAddress" ref="af60851a3b57ee2b67d0ae6cf3b85de4f" args="(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerGlobalAddress </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> * </td>
+          <td class="paramname"><em>ST</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01067">1067</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SPUISelLowering_8h_source.html#l00034">llvm::SPUISD::AFormAddr</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01226">llvm::GlobalAddressSDNode::getGlobal()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01227">llvm::GlobalAddressSDNode::getOffset()</a>, <a class="el" href="TargetMachine_8cpp_source.html#l00066">llvm::TargetMachine::getRelocationModel()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00243">llvm::SelectionDAG::getTarget()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00395">llvm::SelectionDAG::getTargetGlobalAddress()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueTyp
 e()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00031">llvm::SPUISD::Hi</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00032">llvm::SPUISD::Lo</a>, <a class="el" href="ErrorHandling_8cpp_source.html#l00052">llvm::report_fatal_error()</a>, <a class="el" href="CodeGen_8h_source.html#l00022">llvm::Reloc::Static</a>, and <a class="el" href="SPUSubtarget_8h_source.html#l00079">llvm::SPUSubtarget::usingLargeMem()</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad10e3484265ed241a120d619ad555af5"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerI8Math" ref="ad10e3484265ed241a120d619ad555af5" args="(SDValue Op, SelectionDAG &DAG, unsigned Opc, const TargetLowering &TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerI8Math </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>Opc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> & </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02201">2201</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::ADD</a>, <a class="el" href="ValueTypes_8h_source.html#l00628">llvm::EVT::bitsEq()</a>, <a class="el" href="ValueTypes_8h_source.html#l00634">llvm::EVT::bitsGT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00646">llvm::EVT::bitsLT()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00632">llvm::TargetLowering::getShiftAmountTy()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class=
 "el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::MUL</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::OR</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::ROTL</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::ROTR</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SHL</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00364">llvm::ISD::SIGN_EXTEND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRA</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRL</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::SUB</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00373">llvm::ISD::TRUNCATE</a>, and <a class="el" 
 href="ISDOpcodes_8h_source.html#l00367">llvm::ISD::ZERO_EXTEND</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aad42d2eb2084a6cb015ecf1e1bae04e4"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerINSERT_VECTOR_ELT" ref="aad42d2eb2084a6cb015ecf1e1bae04e4" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerINSERT_VECTOR_ELT </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02166">2166</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00246">llvm::SelectionDAG::getContext()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="TargetLowering_8h_source.html#l00153">llvm::TargetLowering::getPointerTy()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l01423">llvm::SelectionDAG::getRegister()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01162">llvm::ConstantSDNode::getSExtValue()</a>, <a class="el" href="ValueTypes_
 8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00244">llvm::SelectionDAG::getTargetLoweringInfo()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00673">llvm::EVT::getVectorElementType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00527">llvm::EVT::getVectorVT()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00299">llvm::ISD::SCALAR_TO_VECTOR</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00040">llvm::SPUISD::SHUFFLE_MASK</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00166">llvm::ISD::UNDEF</a>, and <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8eae7c8d14e742f99bac0c9a7684df3a"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerINT_TO_FP" ref="a8eae7c8d14e742f99bac0c9a7684df3a" args="(SDValue Op, SelectionDAG &DAG, const SPUTargetLowering &TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerINT_TO_FP </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUTargetLowering.html">SPUTargetLowering</a> & </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower ISD::SINT_TO_FP, ISD::UINT_TO_FP for i32. </p>
+<p>i32->f32 passes through unchanged, whereas i32->f64 is expanded to a libcall. All conversions from i64 are expanded to a libcall. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02490">2490</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="DynamicLibrary_8cpp_source.html#l00037">Dummy</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00427">llvm::RTLIB::getSINTTOFP()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00461">llvm::RTLIB::getUINTTOFP()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00377">llvm::ISD::SINT_TO_FP</a>, and <a class="el" href="RuntimeLibcalls_8h_source.html#l00301">llvm::RTLIB::UNKNOWN_LIBCALL</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e635fe9406a9fd9450a0665092b23e5"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerJumpTable" ref="a3e635fe9406a9fd9450a0665092b23e5" args="(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerJumpTable </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> * </td>
+          <td class="paramname"><em>ST</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01043">1043</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SPUISelLowering_8h_source.html#l00034">llvm::SPUISD::AFormAddr</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01267">llvm::JumpTableSDNode::getIndex()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="TargetMachine_8cpp_source.html#l00066">llvm::TargetMachine::getRelocationModel()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00243">llvm::SelectionDAG::getTarget()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00406">llvm::SelectionDAG::getTargetJumpTable()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00031">llvm::SPUISD::Hi</a>, <a class="el" href="SPUI
 SelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00032">llvm::SPUISD::Lo</a>, <a class="el" href="CodeGen_8h_source.html#l00022">llvm::Reloc::Static</a>, and <a class="el" href="SPUSubtarget_8h_source.html#l00079">llvm::SPUSubtarget::usingLargeMem()</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a70d1f61d342360637ae25dd793f7a89e"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerLOAD" ref="a70d1f61d342360637ae25dd793f7a89e" args="(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerLOAD </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> * </td>
+          <td class="paramname"><em>ST</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Custom lower loads for CellSPU. </p>
+<p>All CellSPU loads and stores are aligned to 16-byte boundaries, so for elements within a 16-byte block, we have to rotate to extract the requested element.</p>
+<p>For extending loads, we also want to ensure that the following sequence is emitted, e.g. for MVT::f32 extending load to MVT::f64:</p>
+<div class="fragment"><pre class="fragment">
+%1  v16i8,ch = load
+%2  v16i8,ch = rotate %1
+%3  v4f8, ch = bitconvert %2
+%4  f32      = vec2perfslot %3
+%5  f64      = fp_extend %4
+</pre></div> 
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l00560">560</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::ADD</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00034">llvm::SPUISD::AFormAddr</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::AND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00370">llvm::ISD::ANY_EXTEND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="MachineRegisterInfo_8cpp_source.html#l00098">llvm::MachineRegisterInfo::createVirtualRegister()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00704">llvm::ISD::EXTLOAD</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00421">llvm::ISD::FP_EXTEND</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01604">llvm::LSBaseSDNode::getAddressingMode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00912">llvm::MemSDNode::getAlignment()</a>, <a class="el" href="Sele
 ctionDAGNodes_8h_source.html#l01642">llvm::LoadSDNode::getBasePtr()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00970">llvm::MemSDNode::getChain()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00246">llvm::SelectionDAG::getContext()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00471">llvm::SelectionDAG::getCopyFromReg()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00448">llvm::SelectionDAG::getCopyToReg()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01638">llvm::LoadSDNode::getExtensionType()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l04316">llvm::SelectionDAG::getLoad()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00242">llvm::SelectionDAG::getMachineFunction()</a>, <a class="el" href="SelectionDAGNodes_8h_sou
 rce.html#l00947">llvm::MemSDNode::getMemoryVT()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00953">llvm::MemSDNode::getPointerInfo()</a>, <a class="el" href="TargetLowering_8h_source.html#l00153">llvm::TargetLowering::getPointerTy()</a>, <a class="el" href="MachineFunction_8h_source.html#l00160">llvm::MachineFunction::getRegInfo()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00244">llvm::SelectionDAG::getTargetLoweringInfo()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00122">llvm::SDValue::getValue()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValu
 e::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00527">llvm::EVT::getVectorVT()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l04697">llvm::SelectionDAG::getVTList()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00031">llvm::SPUISD::Hi</a>, <a class="el" href="ValueTypes_8h_source.html#l00044">llvm::MVT::i128</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="ValueTypes_8h_source.html#l00562">llvm::EVT::isFloatingPoint()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00926">llvm::MemSDNode::isNonTemporal()</a>, <a class="el" href="ValueTypes_8h_source.html#l00572">llvm::EVT::isVector()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00925">llvm::MemSDNode::isVolatile()</a>, <a class="el" href="SPUISelL
 owering_8h_source.html#l00037">llvm::SPUISD::LDRESULT</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00032">llvm::SPUISD::Lo</a>, <a class="el" href="MachineMemOperand_8h_source.html#l00039">llvm::MachinePointerInfo::Offset</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::OR</a>, <a class="el" href="ValueTypes_8h_source.html#l00038">llvm::MVT::Other</a>, <a class="el" href="Hashing_8h_source.html#l00176">llvm::hashing::detail::rotate()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00049">llvm::SPUISD::ROTBYTES_LEFT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00705">llvm::ISD::SEXTLOAD</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00045">llvm::SPUISD::SHL_BYTES</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00364">llvm::ISD::SIGN_EXTEND</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00046">llvm::SPUISD::SRL_BYTES</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::SUB</a>, <a class="
 el" href="ISDOpcodes_8h_source.html#l00050">llvm::ISD::TokenFactor</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00684">llvm::ISD::UNINDEXED</a>, <a class="el" href="MachineMemOperand_8h_source.html#l00036">llvm::MachinePointerInfo::V</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00043">llvm::SPUISD::VEC2PREFSLOT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00367">llvm::ISD::ZERO_EXTEND</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00706">llvm::ISD::ZEXTLOAD</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a73a94b189da56d89fe9ee6552d3cf8ea"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerSCALAR_TO_VECTOR" ref="a73a94b189da56d89fe9ee6552d3cf8ea" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerSCALAR_TO_VECTOR </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01957">1957</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00061">llvm::ISD::Constant</a>, <a class="el" href="ValueTypes_8h_source.html#l00050">llvm::MVT::f32</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00363">llvm::SDNode::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href=
 "SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01161">llvm::ConstantSDNode::getZExtValue()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00042">llvm::SPUISD::PREFSLOT2VEC</a>, <a class="el" href="ValueTypes_8h_source.html#l00150">llvm::MVT::SimpleTy</a>, <a class="el" href="ValueTypes_8h_source.html#l00066">llvm::MVT::v16i8</a>, <a class="el" href="ValueTypes_8h_source.html#l00088">llvm::MVT::v2f64</a>, <a class="el" href="ValueTypes_8h_source.html#l00079">llvm::MVT::v2i64</a>, <a class="el" href="ValueTypes_8h_sou
 rce.html#l00086">llvm::MVT::v4f32</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, and <a class="el" href="ValueTypes_8h_source.html#l00071">llvm::MVT::v8i16</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab47933bfe49d29722a2b8345580ef236"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerSELECT_CC" ref="ab47933bfe49d29722a2b8345580ef236" args="(SDValue Op, SelectionDAG &DAG, const TargetLowering &TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerSELECT_CC </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> & </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower ISD::SELECT_CC. </p>
+<p>ISD::SELECT_CC can (generally) be implemented directly on the SPU using the SELB instruction.</p>
+<dl class="note"><dt><b>Note:</b></dt><dd>Need to revisit this in the future: if the code path through the true and false value computations is longer than the latency of a branch (6 cycles), then it would be more advantageous to branch and insert a new basic block and branch on the condition. However, this code does not make that assumption, given the simplisitc uses so far. </dd></dl>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02647">2647</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00907">llvm::TargetLowering::getSetCCResultType()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00052">llvm::SPUISD::SELB</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00349">llvm::ISD::SETCC</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aec740c527c34a0b873bb32f176a8ede3"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerSETCC" ref="aec740c527c34a0b873bb32f176a8ede3" args="(SDValue Op, SelectionDAG &DAG, const TargetLowering &TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerSETCC </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLowering.html">TargetLowering</a> & </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Lower ISD::SETCC. </p>
+<p>This handles MVT::f64 (double floating point) condition lowering </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02515">2515</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::AND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01532">llvm::CondCodeSDNode::get()</a>, <a class="el" href="APInt_8h_source.html#l00429">llvm::APInt::getAllOnesValue()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l01071">llvm::SelectionDAG::getConstantFP()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href=
 "SelectionDAG_8h_source.html#l00614">llvm::SelectionDAG::getSetCC()</a>, <a class="el" href="TargetLowering_8cpp_source.html#l00907">llvm::TargetLowering::getSetCCResultType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ErrorHandling_8cpp_source.html#l00052">llvm::report_fatal_error()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00326">llvm::ISD::SELECT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00744">llvm::ISD::SETEQ</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00746">llvm::ISD::SETGE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00745">llvm::ISD::SETGT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00748">llvm::ISD::SETLE</a>, <a cla
 ss="el" href="ISDOpcodes_8h_source.html#l00747">llvm::ISD::SETLT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00749">llvm::ISD::SETNE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00733">llvm::ISD::SETO</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00727">llvm::ISD::SETOEQ</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00729">llvm::ISD::SETOGE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00728">llvm::ISD::SETOGT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00731">llvm::ISD::SETOLE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00730">llvm::ISD::SETOLT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00732">llvm::ISD::SETONE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00735">llvm::ISD::SETUEQ</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00737">llvm::ISD::SETUGE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00736">llvm::ISD::SETUGT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00739">llvm::ISD::SETULE</a>
 , <a class="el" href="ISDOpcodes_8h_source.html#l00738">llvm::ISD::SETULT</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00740">llvm::ISD::SETUNE</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00734">llvm::ISD::SETUO</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRA</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRL</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::SUB</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00373">llvm::ISD::TRUNCATE</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::XOR</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e2a59d502b1fcd22b33dec3031e4e0d"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerSIGN_EXTEND" ref="a3e2a59d502b1fcd22b33dec3031e4e0d" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerSIGN_EXTEND </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Emit the instruction sequence for i64/i32 -> i128 sign extend. The basic algorithm is to duplicate the sign bit using rotmai to generate at least one byte full of sign bits. Then propagate the "sign-byte" into the leftmost words and the i64/i32 into the rightmost words using shufb.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table class="params">
+    <tr><td class="paramname">Op</td><td>The sext operand </td></tr>
+    <tr><td class="paramname">DAG</td><td>The current DAG </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>The SDValue with the entire instruction sequence </dd></dl>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02718">2718</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="TargetOpcodes_8h_source.html#l00066">llvm::TargetOpcode::COPY_TO_REGCLASS</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l05122">llvm::SelectionDAG::getMachineNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00369">llvm::SelectionDAG::getTargetConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.htm
 l#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00044">llvm::MVT::i128</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00042">llvm::SPUISD::PREFSLOT2VEC</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00364">llvm::ISD::SIGN_EXTEND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00316">llvm::ISD::SRA</a>, <a class="el" href="ValueTypes_8h_source.html#l00079">llvm::MVT::v2i64</a>, and <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afae6eb55018d58beb06baf07fd3498a2"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerSTORE" ref="afae6eb55018d58beb06baf07fd3498a2" args="(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerSTORE </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> * </td>
+          <td class="paramname"><em>ST</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Custom lower stores for CellSPU. </p>
+<p>All CellSPU stores are aligned to 16-byte boundaries, so for elements within a 16-byte block, we have to generate a shuffle to insert the requested element into its place, then store the resulting block. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l00769">769</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::ADD</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::AND</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00057">llvm::ISD::AssertSext</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00057">llvm::ISD::AssertZext</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00430">llvm::ISD::BITCAST</a>, <a class="el" href="MachineRegisterInfo_8cpp_source.html#l00098">llvm::MachineRegisterInfo::createVirtualRegister()</a>, <a class="el" href="Debug_8h_source.html#l00036">DEBUG_TYPE</a>, <a class="el" href="Debug_8cpp_source.html#l00035">llvm::DebugFlag</a>, <a class="el" href="SelectionDAGDumper_8cpp_source.html#l00329">llvm::SDNode::dump()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="raw__ostream_8cpp_source.html#l00674">llvm::errs()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01604">llvm::LSBaseSDNode::getAddres
 singMode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00912">llvm::MemSDNode::getAlignment()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01672">llvm::StoreSDNode::getBasePtr()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00970">llvm::MemSDNode::getChain()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00246">llvm::SelectionDAG::getContext()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00471">llvm::SelectionDAG::getCopyFromReg()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00448">llvm::SelectionDAG::getCopyToReg()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l04316">llvm::SelectionDAG::getLoad()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00242">llvm::SelectionDAG::getMachineFunction()</a>, <a class
 ="el" href="SelectionDAGNodes_8h_source.html#l00947">llvm::MemSDNode::getMemoryVT()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00105">llvm::SDValue::getNode()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00953">llvm::MemSDNode::getPointerInfo()</a>, <a class="el" href="TargetLowering_8h_source.html#l00153">llvm::TargetLowering::getPointerTy()</a>, <a class="el" href="MachineFunction_8h_source.html#l00160">llvm::MachineFunction::getRegInfo()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l04353">llvm::SelectionDAG::getStore()</a>, <a class="el" href="SelectionDAG_8h_source.html#l
 00244">llvm::SelectionDAG::getTargetLoweringInfo()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00122">llvm::SDValue::getValue()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01671">llvm::StoreSDNode::getValue()</a>, <a class="el" href="ValueTypes_8h_source.html#l00527">llvm::EVT::getVectorVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00044">llvm::MVT::i128</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="Debug_8cpp_source.html#l00088">llvm::isCurrentDebugType()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00926">llvm::MemSDNode::isNonTemporal()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01669">llvm::StoreSDNode::isTruncatingStore()</a>, <a class="el" href="ValueTypes_8h_source.html#l00572">llvm::EVT::isVector()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#
 l00925">llvm::MemSDNode::isVolatile()</a>, <a class="el" href="MachineMemOperand_8h_source.html#l00039">llvm::MachinePointerInfo::Offset</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::OR</a>, <a class="el" href="ValueTypes_8h_source.html#l00038">llvm::MVT::Other</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00042">llvm::SPUISD::PREFSLOT2VEC</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00299">llvm::ISD::SCALAR_TO_VECTOR</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00045">llvm::SPUISD::SHL_BYTES</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00040">llvm::SPUISD::SHUFFLE_MASK</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00046">llvm::SPUISD::SRL_BYTES</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00188">llvm::ISD::SUB</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00050">llvm::ISD::TokenFactor</a>, <a class="el"
  href="ISDOpcodes_8h_source.html#l00684">llvm::ISD::UNINDEXED</a>, <a class="el" href="MachineMemOperand_8h_source.html#l00036">llvm::MachinePointerInfo::V</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, and <a class="el" href="ISDOpcodes_8h_source.html#l00307">llvm::ISD::XOR</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af5b346e95b0811e0ba8a460a6c7e25f7"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerTRUNCATE" ref="af5b346e95b0811e0ba8a460a6c7e25f7" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerTRUNCATE </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Custom lower ISD::TRUNCATE. </p>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l02675">2675</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00246">llvm::SelectionDAG::getContext()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="ValueTypes_8h_source.html#l00660">llvm::EVT::getSimpleVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00774">llvm::SDValue::getValueType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00527">llvm::EVT::getVectorVT()</a>, <a class="el" href="ValueTypes_8h_source.html#l00044">llvm::MVT::i128
 </a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, and <a class="el" href="SPUISelLowering_8h_source.html#l00043">llvm::SPUISD::VEC2PREFSLOT</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5c2f510f41dee936624366acf22fc11"></a><!-- doxytag: member="SPUISelLowering.cpp::LowerVECTOR_SHUFFLE" ref="aa5c2f510f41dee936624366acf22fc11" args="(SDValue Op, SelectionDAG &DAG)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1SDValue.html">SDValue</a> LowerVECTOR_SHUFFLE </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SDValue.html">SDValue</a> </td>
+          <td class="paramname"><em>Op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> & </td>
+          <td class="paramname"><em>DAG</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>LowerVECTOR_SHUFFLE - Lower a vector shuffle (V1, V2, V3) to something on which the Cell can operate. The code inspects V3 to ascertain whether the permutation vector, V3, is monotonically increasing with one "exception" element, e.g., (0, 1, _, 3). If this is the case, then generate a SHUFFLE_MASK synthetic instruction. Otherwise, spill V3 to the constant pool. In either case, the net result is going to eventually invoke SHUFB to permute/shuffle the bytes from V1 and V2. </p>
+<dl class="note"><dt><b>Note:</b></dt><dd>SHUFFLE_MASK is eventually selected as one of the C*D instructions, generate control word for byte/halfword/word insertion. This takes care of a single element move from V2 into V1. </dd>
+<dd>
+SPUISD::SHUFB is eventually selected as Cell's <em>shufb</em> instructions. </dd></dl>
+
+<p>Definition at line <a class="el" href="SPUISelLowering_8cpp_source.html#l01837">1837</a> of file <a class="el" href="SPUISelLowering_8cpp_source.html">SPUISelLowering.cpp</a>.</p>
+
+<p>References <a class="el" href="ISDOpcodes_8h_source.html#l00252">llvm::ISD::BUILD_VECTOR</a>, <a class="el" href="ValueTypes_8h_source.html#l00050">llvm::MVT::f32</a>, <a class="el" href="ValueTypes_8h_source.html#l00051">llvm::MVT::f64</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l00972">llvm::SelectionDAG::getConstant()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00804">llvm::SDValue::getDebugLoc()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l01128">llvm::ShuffleVectorSDNode::getMaskElt()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l02409">llvm::SelectionDAG::getNode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00771">llvm::SDValue::getOpcode()</a>, <a class="el" href="SelectionDAGNodes_8h_source.html#l00780">llvm::SDValue::getOperand()</a>, <a class="el" href="TargetLowering_8h_source.html#l00153">llvm::TargetLowering::getPointerTy()</a>, <a class="el" href="SelectionDAG_8cpp_source.html#l01423">llvm::Se
 lectionDAG::getRegister()</a>, <a class="el" href="ValueTypes_8h_source.html#l00690">llvm::EVT::getSizeInBits()</a>, <a class="el" href="SelectionDAG_8h_source.html#l00244">llvm::SelectionDAG::getTargetLoweringInfo()</a>, <a class="el" href="ValueTypes_8h_source.html#l00673">llvm::EVT::getVectorElementType()</a>, <a class="el" href="ValueTypes_8h_source.html#l00682">llvm::EVT::getVectorNumElements()</a>, <a class="el" href="ValueTypes_8h_source.html#l00041">llvm::MVT::i16</a>, <a class="el" href="ValueTypes_8h_source.html#l00042">llvm::MVT::i32</a>, <a class="el" href="ValueTypes_8h_source.html#l00043">llvm::MVT::i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00040">llvm::MVT::i8</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00035">llvm::SPUISD::IndirectAddr</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike< T >::va
 lue >::push_back()</a>, <a class="el" href="Hashing_8h_source.html#l00176">llvm::hashing::detail::rotate()</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00049">llvm::SPUISD::ROTBYTES_LEFT</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00039">llvm::SPUISD::SHUFB</a>, <a class="el" href="SPUISelLowering_8h_source.html#l00040">llvm::SPUISD::SHUFFLE_MASK</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00166">llvm::ISD::UNDEF</a>, <a class="el" href="ValueTypes_8h_source.html#l00066">llvm::MVT::v16i8</a>, <a class="el" href="NVPTX_8h_source.html#l00121">llvm::NVPTX::PTXLdStInstCode::V2</a>, <a class="el" href="ValueTypes_8h_source.html#l00079">llvm::MVT::v2i64</a>, <a class="el" href="ValueTypes_8h_source.html#l00075">llvm::MVT::v4i32</a>, and <a class="el" href="ValueTypes_8h_source.html#l00071">llvm::MVT::v8i16</a>.</p>
+
+<p>Referenced by <a class="el" href="SPUISelLowering_8cpp_source.html#l02779">llvm::SPUTargetLowering::LowerOperation()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:48 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,13 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUInstrBuilder.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="SPUFrameLowering.cpp",height=0.2,width=0.4,color="black",URL="$SPUFrameLowering_8cpp.html"];
+  Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="SPUInstrInfo.cpp",height=0.2,width=0.4,color="black",URL="$SPUInstrInfo_8cpp.html"];
+  Node1 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="SPURegisterInfo.cpp",height=0.2,width=0.4,color="black",URL="$SPURegisterInfo_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUInstrBuilder_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,154 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUInstrBuilder.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/CodeGen/MachineInstrBuilder.h",height=0.2,width=0.4,color="black",URL="$MachineInstrBuilder_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/CodeGen/MachineFunction.h",height=0.2,width=0.4,color="black",URL="$MachineFunction_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/CodeGen/MachineBasicBlock.h",height=0.2,width=0.4,color="black",URL="$MachineBasicBlock_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/CodeGen/MachineInstr.h",height=0.2,width=0.4,color="black",URL="$MachineInstr_8h.html"];
+  Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/CodeGen/MachineOperand.h",height=0.2,width=0.4,color="black",URL="$MachineOperand_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node6 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/MC/MCInstrDesc.h",height=0.2,width=0.4,color="black",URL="$MCInstrDesc_8h.html"];
+  Node13 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/Target/TargetOpcodes.h",height=0.2,width=0.4,color="black",URL="$TargetOpcodes_8h.html"];
+  Node5 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="black",URL="$ArrayRef_8h.html"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="black",URL="$SmallVector_8h.html"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node17 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+  Node20 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="memory",height=0.2,width=0.4,color="grey75"];
+  Node15 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/ADT/ilist.h",height=0.2,width=0.4,color="black",URL="$ilist_8h.html"];
+  Node28 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/ADT/ilist_node.h",height=0.2,width=0.4,color="black",URL="$ilist__node_8h.html"];
+  Node5 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/ADT/STLExtras.h",height=0.2,width=0.4,color="black",URL="$STLExtras_8h.html"];
+  Node30 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="functional",height=0.2,width=0.4,color="grey75"];
+  Node30 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node32 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="black",URL="$DenseMapInfo_8h.html"];
+  Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+  Node36 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/InlineAsm.h",height=0.2,width=0.4,color="black",URL="$InlineAsm_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Value.h",height=0.2,width=0.4,color="black",URL="$Value_8h.html"];
+  Node38 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Use.h",height=0.2,width=0.4,color="black",URL="$Use_8h.html"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/ADT/PointerIntPair.h",height=0.2,width=0.4,color="black",URL="$PointerIntPair_8h.html"];
+  Node40 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Support/Casting.h",height=0.2,width=0.4,color="black",URL="$Casting_8h.html"];
+  Node41 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Support/DebugLoc.h",height=0.2,width=0.4,color="black",URL="$DebugLoc_8h.html"];
+  Node5 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/ADT/GraphTraits.h",height=0.2,width=0.4,color="black",URL="$GraphTraits_8h.html"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Support/Allocator.h",height=0.2,width=0.4,color="black",URL="$Allocator_8h.html"];
+  Node44 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="black",URL="$MathExtras_8h.html"];
+  Node45 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/SwapByteOrder.h",height=0.2,width=0.4,color="black",URL="$SwapByteOrder_8h.html"];
+  Node46 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/Recycler.h",height=0.2,width=0.4,color="black",URL="$Recycler_8h.html"];
+  Node47 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node48 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,159 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUInstrInfo.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="SPUInstrInfo.h",height=0.2,width=0.4,color="black",URL="$SPUInstrInfo_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="SPU.h",height=0.2,width=0.4,color="black",URL="$SPU_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="MCTargetDesc/SPUMCTargetDesc.h",height=0.2,width=0.4,color="black",URL="$SPUMCTargetDesc_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="SPUGenRegisterInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="SPUGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="SPUGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="red",URL="$Target_2TargetMachine_8h.html"];
+  Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Pass.h",height=0.2,width=0.4,color="red",URL="$Pass_8h.html"];
+  Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node9 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/Support/CodeGen.h",height=0.2,width=0.4,color="black",URL="$CodeGen_8h.html"];
+  Node8 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/Target/TargetTransformImpl.h",height=0.2,width=0.4,color="red",URL="$TargetTransformImpl_8h.html"];
+  Node8 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node14 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node14 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="SPURegisterInfo.h",height=0.2,width=0.4,color="black",URL="$SPURegisterInfo_8h.html"];
+  Node16 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Target/TargetInstrInfo.h",height=0.2,width=0.4,color="black",URL="$TargetInstrInfo_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/ADT/SmallSet.h",height=0.2,width=0.4,color="red",URL="$SmallSet_8h.html"];
+  Node17 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/MC/MCInstrInfo.h",height=0.2,width=0.4,color="red",URL="$MCInstrInfo_8h.html"];
+  Node19 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/CodeGen/DFAPacketizer.h",height=0.2,width=0.4,color="red",URL="$DFAPacketizer_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node21 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/CodeGen/MachineFunction.h",height=0.2,width=0.4,color="red",URL="$MachineFunction_8h.html"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/Support/Allocator.h",height=0.2,width=0.4,color="red",URL="$Allocator_8h.html"];
+  Node23 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node23 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="SPUInstrBuilder.h",height=0.2,width=0.4,color="black",URL="$SPUInstrBuilder_8h.html"];
+  Node25 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/CodeGen/MachineInstrBuilder.h",height=0.2,width=0.4,color="black",URL="$MachineInstrBuilder_8h.html"];
+  Node26 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node27 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="SPUTargetMachine.h",height=0.2,width=0.4,color="black",URL="$SPUTargetMachine_8h.html"];
+  Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="SPUSubtarget.h",height=0.2,width=0.4,color="black",URL="$SPUSubtarget_8h.html"];
+  Node29 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/Target/TargetSubtargetInfo.h",height=0.2,width=0.4,color="red",URL="$TargetSubtargetInfo_8h.html"];
+  Node30 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/MC/MCInstrItineraries.h",height=0.2,width=0.4,color="red",URL="$MCInstrItineraries_8h.html"];
+  Node29 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="SPUISelLowering.h",height=0.2,width=0.4,color="black",URL="$SPUISelLowering_8h.html"];
+  Node32 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/Target/TargetLowering.h",height=0.2,width=0.4,color="red",URL="$TargetLowering_8h.html"];
+  Node33 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/CodeGen/SelectionDAG.h",height=0.2,width=0.4,color="red",URL="$SelectionDAG_8h.html"];
+  Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/ADT/StringMap.h",height=0.2,width=0.4,color="red",URL="$StringMap_8h.html"];
+  Node36 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="SPUSelectionDAGInfo.h",height=0.2,width=0.4,color="black",URL="$SPUSelectionDAGInfo_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Target/TargetSelectionDAGInfo.h",height=0.2,width=0.4,color="red",URL="$TargetSelectionDAGInfo_8h.html"];
+  Node28 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="SPUFrameLowering.h",height=0.2,width=0.4,color="black",URL="$SPUFrameLowering_8h.html"];
+  Node39 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/Target/TargetFrameLowering.h",height=0.2,width=0.4,color="red",URL="$TargetFrameLowering_8h.html"];
+  Node40 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/DataLayout.h",height=0.2,width=0.4,color="red",URL="$DataLayout_8h.html"];
+  Node41 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="SPUHazardRecognizers.h",height=0.2,width=0.4,color="black",URL="$SPUHazardRecognizers_8h.html"];
+  Node42 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/CodeGen/ScheduleHazardRecognizer.h",height=0.2,width=0.4,color="black",URL="$ScheduleHazardRecognizer_8h.html"];
+  Node1 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/MC/MCContext.h",height=0.2,width=0.4,color="black",URL="$MCContext_8h.html"];
+  Node44 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/MC/SectionKind.h",height=0.2,width=0.4,color="black",URL="$SectionKind_8h.html"];
+  Node44 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/MC/MCDwarf.h",height=0.2,width=0.4,color="red",URL="$MCDwarf_8h.html"];
+  Node46 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="black",URL="$raw__ostream_8h.html"];
+  Node47 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node1 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/Support/TargetRegistry.h",height=0.2,width=0.4,color="black",URL="$TargetRegistry_8h.html"];
+  Node49 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="red",URL="$Triple_8h.html"];
+  Node49 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUInstrInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+c4f2a6aad80593adde51c1ad018b0a81
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUMCAsmInfo.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+      <li class="navelem"><a class="el" href="dir_987b66ff3c7b58ce367903ea43c03f34.html">MCTargetDesc</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">SPUMCAsmInfo.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="SPUMCAsmInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SPUMCAsmInfo.cpp - Cell SPU asm properties ------------------------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file contains the declarations of the SPUMCAsmInfo properties.</span>
+<a name="l00011"></a>00011 <span class="comment">//</span>
+<a name="l00012"></a>00012 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00013"></a>00013 
+<a name="l00014"></a>00014 <span class="preprocessor">#include "<a class="code" href="SPUMCAsmInfo_8h.html">SPUMCAsmInfo.h</a>"</span>
+<a name="l00015"></a>00015 <span class="keyword">using namespace </span>llvm;
+<a name="l00016"></a>00016 
+<a name="l00017"></a>00017 <span class="keywordtype">void</span> SPULinuxMCAsmInfo::anchor() { }
+<a name="l00018"></a>00018 
+<a name="l00019"></a><a class="code" href="classllvm_1_1SPULinuxMCAsmInfo.html#ae8b46970f219a436c42a0d52a8bb5140">00019</a> <a class="code" href="classllvm_1_1SPULinuxMCAsmInfo.html#ae8b46970f219a436c42a0d52a8bb5140">SPULinuxMCAsmInfo::SPULinuxMCAsmInfo</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Target.html">Target</a> &T, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> TT) {
+<a name="l00020"></a>00020   <a class="code" href="classllvm_1_1MCAsmInfo.html#adfd724f11ba125f30c3bb516be0bb06f">IsLittleEndian</a> = <span class="keyword">false</span>;
+<a name="l00021"></a>00021 
+<a name="l00022"></a>00022   <a class="code" href="classllvm_1_1MCAsmInfo.html#acf84c6bd03a785a251784cad666d9ee1">ZeroDirective</a> = <span class="stringliteral">"\t.space\t"</span>;
+<a name="l00023"></a>00023   <a class="code" href="classllvm_1_1MCAsmInfo.html#a3c136967a2fc9489724bcd8706a16fed">Data64bitsDirective</a> = <span class="stringliteral">"\t.quad\t"</span>;
+<a name="l00024"></a>00024   <a class="code" href="classllvm_1_1MCAsmInfo.html#ac150f03927bf41531f945b3bc5b315e4">AlignmentIsInBytes</a> = <span class="keyword">false</span>;
+<a name="l00025"></a>00025       
+<a name="l00026"></a>00026   <a class="code" href="classllvm_1_1MCAsmInfo.html#a83f21c5383a3508ebaec1a0f4a0b323e">PCSymbol</a> = <span class="stringliteral">"."</span>;
+<a name="l00027"></a>00027   <a class="code" href="classllvm_1_1MCAsmInfo.html#a0f9dfd5867a9130d05cd9f560a7ba68f">CommentString</a> = <span class="stringliteral">"#"</span>;
+<a name="l00028"></a>00028   <a class="code" href="classllvm_1_1MCAsmInfo.html#ab2fd341a21859939816dca88fd0ae4e0">GlobalPrefix</a> = <span class="stringliteral">""</span>;
+<a name="l00029"></a>00029   <a class="code" href="classllvm_1_1MCAsmInfo.html#abea34ee331e36cc6ee7eb7230432f02e">PrivateGlobalPrefix</a> = <span class="stringliteral">".L"</span>;
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031   <span class="comment">// Has leb128</span>
+<a name="l00032"></a>00032   <a class="code" href="classllvm_1_1MCAsmInfo.html#ad6b5cda1c5af378696e1b13b351b2aad" title="HasLEB128 - True if target asm supports leb128 directives.">HasLEB128</a> = <span class="keyword">true</span>;
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034   <a class="code" href="classllvm_1_1MCAsmInfo.html#a98f40236cfff7278d4b57633fad2245d">SupportsDebugInformation</a> = <span class="keyword">true</span>;
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036   <span class="comment">// Exception handling is not supported on CellSPU (think about it: you only</span>
+<a name="l00037"></a>00037   <span class="comment">// have 256K for code+data. Would you support exception handling?)</span>
+<a name="l00038"></a>00038   <a class="code" href="classllvm_1_1MCAsmInfo.html#ae6654563b76c2f8b97c9a650fd36544e" title="SupportsExceptionHandling - True if target supports exception handling.">ExceptionsType</a> = <a class="code" href="namespacellvm.html#a001cc4aac3499891ed5b27d7ecb1b227acd12d6cf678f7504ca49c922fb16ce01">ExceptionHandling::None</a>;
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040   <span class="comment">// SPU assembly requires ".section" before ".bss" </span>
+<a name="l00041"></a>00041   <a class="code" href="classllvm_1_1MCAsmInfo.html#a9209a7aeb154de066a5f7ed6087892cc">UsesELFSectionDirectiveForBSS</a> = <span class="keyword">true</span>;  
+<a name="l00042"></a>00042 }
+<a name="l00043"></a>00043 
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:22 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUMCAsmInfo.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+      <li class="navelem"><a class="el" href="dir_987b66ff3c7b58ce367903ea43c03f34.html">MCTargetDesc</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUMCAsmInfo.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="StringRef_8h_source.html">llvm/ADT/StringRef.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCAsmInfo_8h_source.html">llvm/MC/MCAsmInfo.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUMCAsmInfo.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUMCAsmInfo_8h__incl.png" border="0" usemap="#SPUMCAsmInfo_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUMCAsmInfo_8h__dep__incl.png" border="0" usemap="#SPUMCAsmInfo_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SPUMCAsmInfo_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SPULinuxMCAsmInfo.html">llvm::SPULinuxMCAsmInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:48 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMCAsmInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+0dc3a86911994edbc29e08c67857d01a
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUMCTargetDesc.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+      <li class="navelem"><a class="el" href="dir_987b66ff3c7b58ce367903ea43c03f34.html">MCTargetDesc</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#namespaces">Namespaces</a> |
+<a href="#define-members">Defines</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUMCTargetDesc.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "SPUGenRegisterInfo.inc"</code><br/>
+<code>#include "SPUGenInstrInfo.inc"</code><br/>
+<code>#include "SPUGenSubtargetInfo.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUMCTargetDesc.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUMCTargetDesc_8h__incl.png" border="0" usemap="#SPUMCTargetDesc_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUMCTargetDesc_8h__dep__incl.png" border="0" usemap="#SPUMCTargetDesc_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SPUMCTargetDesc_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUMCTargetDesc_8h.html#a08a185753458ada847ed2d41b47ac1d1">GET_REGINFO_ENUM</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUMCTargetDesc_8h.html#a2433e9e503264e8ca019761dad9d06d1">GET_INSTRINFO_ENUM</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUMCTargetDesc_8h.html#ae8e5d5d8b20c7c3550c60ac4a04e3c64">GET_SUBTARGETINFO_ENUM</a></td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classllvm_1_1Target.html">Target</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#ab882e4e1ebd06c30e417ca1d89fc6967">llvm::TheCellSPUTarget</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a2433e9e503264e8ca019761dad9d06d1"></a><!-- doxytag: member="SPUMCTargetDesc.h::GET_INSTRINFO_ENUM" ref="a2433e9e503264e8ca019761dad9d06d1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GET_INSTRINFO_ENUM</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUMCTargetDesc_8h_source.html#l00032">32</a> of file <a class="el" href="SPUMCTargetDesc_8h_source.html">SPUMCTargetDesc.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08a185753458ada847ed2d41b47ac1d1"></a><!-- doxytag: member="SPUMCTargetDesc.h::GET_REGINFO_ENUM" ref="a08a185753458ada847ed2d41b47ac1d1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GET_REGINFO_ENUM</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUMCTargetDesc_8h_source.html#l00027">27</a> of file <a class="el" href="SPUMCTargetDesc_8h_source.html">SPUMCTargetDesc.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae8e5d5d8b20c7c3550c60ac4a04e3c64"></a><!-- doxytag: member="SPUMCTargetDesc.h::GET_SUBTARGETINFO_ENUM" ref="ae8e5d5d8b20c7c3550c60ac4a04e3c64" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GET_SUBTARGETINFO_ENUM</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUMCTargetDesc_8h_source.html#l00035">35</a> of file <a class="el" href="SPUMCTargetDesc_8h_source.html">SPUMCTargetDesc.h</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:48 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMCTargetDesc_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+f2a9479936566115398794a3ee6791df
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUMachineFunction_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUMachineFunction_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUMachineFunction_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUMachineFunction_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,153 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUMachineFunction.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="SPUMachineFunction.h",height=0.2,width=0.4,color="black",URL="$SPUMachineFunction_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/CodeGen/MachineFunction.h",height=0.2,width=0.4,color="black",URL="$MachineFunction_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/CodeGen/MachineBasicBlock.h",height=0.2,width=0.4,color="black",URL="$MachineBasicBlock_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/CodeGen/MachineInstr.h",height=0.2,width=0.4,color="black",URL="$MachineInstr_8h.html"];
+  Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/CodeGen/MachineOperand.h",height=0.2,width=0.4,color="black",URL="$MachineOperand_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node6 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/MC/MCInstrDesc.h",height=0.2,width=0.4,color="black",URL="$MCInstrDesc_8h.html"];
+  Node13 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/Target/TargetOpcodes.h",height=0.2,width=0.4,color="black",URL="$TargetOpcodes_8h.html"];
+  Node5 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="black",URL="$ArrayRef_8h.html"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="black",URL="$SmallVector_8h.html"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node17 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+  Node20 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="memory",height=0.2,width=0.4,color="grey75"];
+  Node15 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/ADT/ilist.h",height=0.2,width=0.4,color="black",URL="$ilist_8h.html"];
+  Node28 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/ADT/ilist_node.h",height=0.2,width=0.4,color="black",URL="$ilist__node_8h.html"];
+  Node5 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/ADT/STLExtras.h",height=0.2,width=0.4,color="black",URL="$STLExtras_8h.html"];
+  Node30 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="functional",height=0.2,width=0.4,color="grey75"];
+  Node30 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node32 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="black",URL="$DenseMapInfo_8h.html"];
+  Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+  Node36 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/InlineAsm.h",height=0.2,width=0.4,color="black",URL="$InlineAsm_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Value.h",height=0.2,width=0.4,color="black",URL="$Value_8h.html"];
+  Node38 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Use.h",height=0.2,width=0.4,color="black",URL="$Use_8h.html"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/ADT/PointerIntPair.h",height=0.2,width=0.4,color="black",URL="$PointerIntPair_8h.html"];
+  Node40 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Support/Casting.h",height=0.2,width=0.4,color="black",URL="$Casting_8h.html"];
+  Node41 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Support/DebugLoc.h",height=0.2,width=0.4,color="black",URL="$DebugLoc_8h.html"];
+  Node5 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/ADT/GraphTraits.h",height=0.2,width=0.4,color="black",URL="$GraphTraits_8h.html"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Support/Allocator.h",height=0.2,width=0.4,color="black",URL="$Allocator_8h.html"];
+  Node44 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="black",URL="$MathExtras_8h.html"];
+  Node45 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/SwapByteOrder.h",height=0.2,width=0.4,color="black",URL="$SwapByteOrder_8h.html"];
+  Node46 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/Recycler.h",height=0.2,width=0.4,color="black",URL="$Recycler_8h.html"];
+  Node47 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node48 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUSelectionDAGInfo.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUSelectionDAGInfo.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="TargetSelectionDAGInfo_8h_source.html">llvm/Target/TargetSelectionDAGInfo.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUSelectionDAGInfo.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUSelectionDAGInfo_8h__incl.png" border="0" usemap="#SPUSelectionDAGInfo_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUSelectionDAGInfo_8h__dep__incl.png" border="0" usemap="#SPUSelectionDAGInfo_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SPUSelectionDAGInfo_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SPUSelectionDAGInfo.html">llvm::SPUSelectionDAGInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:48 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUSelectionDAGInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+0e9002c28a4be664f1626887abc48a11
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUSubtarget.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Defines</a>  </div>
+  <div class="headertitle">
+<div class="title">SPUSubtarget.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SPUSubtarget_8h_source.html">SPUSubtarget.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPU_8h_source.html">SPU.h</a>"</code><br/>
+<code>#include "<a class="el" href="SPURegisterInfo_8h_source.html">SPURegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetRegistry_8h_source.html">llvm/Support/TargetRegistry.h</a>"</code><br/>
+<code>#include "SPUGenSubtargetInfo.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SPUSubtarget.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SPUSubtarget_8cpp__incl.png" border="0" usemap="#SPUSubtarget_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SPUSubtarget_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUSubtarget_8cpp.html#a9edcf2eb5fb8161f71f0b6540ad9cf95">GET_SUBTARGETINFO_TARGET_DESC</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SPUSubtarget_8cpp.html#aa7e319f7bba8b140ee2d876cc3f8308b">GET_SUBTARGETINFO_CTOR</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aa7e319f7bba8b140ee2d876cc3f8308b"></a><!-- doxytag: member="SPUSubtarget.cpp::GET_SUBTARGETINFO_CTOR" ref="aa7e319f7bba8b140ee2d876cc3f8308b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GET_SUBTARGETINFO_CTOR</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUSubtarget_8cpp_source.html#l00020">20</a> of file <a class="el" href="SPUSubtarget_8cpp_source.html">SPUSubtarget.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9edcf2eb5fb8161f71f0b6540ad9cf95"></a><!-- doxytag: member="SPUSubtarget.cpp::GET_SUBTARGETINFO_TARGET_DESC" ref="a9edcf2eb5fb8161f71f0b6540ad9cf95" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GET_SUBTARGETINFO_TARGET_DESC</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SPUSubtarget_8cpp_source.html#l00019">19</a> of file <a class="el" href="SPUSubtarget_8cpp_source.html">SPUSubtarget.cpp</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:48 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,72 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUSubtarget.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/Target/TargetSubtargetInfo.h",height=0.2,width=0.4,color="black",URL="$TargetSubtargetInfo_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/MC/MCSubtargetInfo.h",height=0.2,width=0.4,color="black",URL="$MCSubtargetInfo_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/MC/SubtargetFeature.h",height=0.2,width=0.4,color="black",URL="$SubtargetFeature_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="black",URL="$Triple_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="black",URL="$Twine_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+  Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node9 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node9 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node22 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/MC/MCInstrItineraries.h",height=0.2,width=0.4,color="black",URL="$MCInstrItineraries_8h.html"];
+  Node24 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/MC/MCSchedule.h",height=0.2,width=0.4,color="black",URL="$MCSchedule_8h.html"];
+  Node25 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Support/CodeGen.h",height=0.2,width=0.4,color="black",URL="$CodeGen_8h.html"];
+  Node1 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="SPUGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUSubtarget_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SPUSubtarget.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3fe9b298fff340add85ae817a3ead925.html">CellSPU</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">SPUSubtarget.h</div>  </div>
+</div>
+<div class="contents">
+<a href="SPUSubtarget_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SPUSubtarget.h - Define Subtarget for the Cell SPU ------*- C++ -*-===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file declares the Cell SPU-specific subclass of TargetSubtargetInfo.</span>
+<a name="l00011"></a>00011 <span class="comment">//</span>
+<a name="l00012"></a>00012 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00013"></a>00013 
+<a name="l00014"></a>00014 <span class="preprocessor">#ifndef CELLSUBTARGET_H</span>
+<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define CELLSUBTARGET_H</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="TargetSubtargetInfo_8h.html">llvm/Target/TargetSubtargetInfo.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="MCInstrItineraries_8h.html">llvm/MC/MCInstrItineraries.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include <string></span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a><a class="code" href="SPUSubtarget_8h.html#a2483abff7303064e8c3556e28b976f85">00021</a> <span class="preprocessor">#define GET_SUBTARGETINFO_HEADER</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "SPUGenSubtargetInfo.inc"</span>
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="keyword">namespace </span>llvm {
+<a name="l00025"></a>00025   <span class="keyword">class </span>GlobalValue;
+<a name="l00026"></a>00026   <span class="keyword">class </span>StringRef;
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028   <span class="keyword">namespace </span>SPU {
+<a name="l00029"></a>00029     <span class="keyword">enum</span> {
+<a name="l00030"></a><a class="code" href="namespacellvm_1_1SPU.html#a37e3afcee19033a552d8ae47e5f2d66fa6313075cfaa91eff31bfa1525931884f">00030</a>       <a class="code" href="namespacellvm_1_1SPU.html#a37e3afcee19033a552d8ae47e5f2d66fa6313075cfaa91eff31bfa1525931884f">PROC_NONE</a>,
+<a name="l00031"></a><a class="code" href="namespacellvm_1_1SPU.html#a37e3afcee19033a552d8ae47e5f2d66fa81503c41945b9cdf5f7f41ea12d38abb">00031</a>       <a class="code" href="namespacellvm_1_1SPU.html#a37e3afcee19033a552d8ae47e5f2d66fa81503c41945b9cdf5f7f41ea12d38abb">DEFAULT_PROC</a>
+<a name="l00032"></a>00032     };
+<a name="l00033"></a>00033   }
+<a name="l00034"></a>00034     
+<a name="l00035"></a><a class="code" href="classllvm_1_1SPUSubtarget.html">00035</a>   <span class="keyword">class </span><a class="code" href="classllvm_1_1SPUSubtarget.html">SPUSubtarget</a> : <span class="keyword">public</span> <a class="code" href="classSPUGenSubtargetInfo.html">SPUGenSubtargetInfo</a> {
+<a name="l00036"></a>00036   <span class="keyword">protected</span>:<span class="comment"></span>
+<a name="l00037"></a>00037 <span class="comment">    /// stackAlignment - The minimum alignment known to hold of the stack frame</span>
+<a name="l00038"></a>00038 <span class="comment">    /// on entry to the function and which must be maintained by every function.</span>
+<a name="l00039"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#ada79ae23a7eeef1e314e38ab2f37271f">00039</a> <span class="comment"></span>    <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#ada79ae23a7eeef1e314e38ab2f37271f">StackAlignment</a>;
+<a name="l00040"></a>00040     <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">    /// Selected instruction itineraries (one entry per itinerary class.)</span>
+<a name="l00042"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#aae84ec0eeb4eef0fe34ff78b3cfafc2d">00042</a> <span class="comment"></span>    <a class="code" href="classllvm_1_1InstrItineraryData.html">InstrItineraryData</a> <a class="code" href="classllvm_1_1SPUSubtarget.html#aae84ec0eeb4eef0fe34ff78b3cfafc2d" title="Selected instruction itineraries (one entry per itinerary class.)">InstrItins</a>;
+<a name="l00043"></a>00043 <span class="comment"></span>
+<a name="l00044"></a>00044 <span class="comment">    /// Which SPU processor (this isn't really used, but it's there to keep</span>
+<a name="l00045"></a>00045 <span class="comment">    /// the C compiler happy)</span>
+<a name="l00046"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#a00a35f786888b6acbb6c8cdd5d8af4b4">00046</a> <span class="comment"></span>    <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#a00a35f786888b6acbb6c8cdd5d8af4b4">ProcDirective</a>;
+<a name="l00047"></a>00047 <span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">    /// Use (assume) large memory -- effectively disables the LQA/STQA</span>
+<a name="l00049"></a>00049 <span class="comment">    /// instructions that assume 259K local store.</span>
+<a name="l00050"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#ab5f2600a7f639a9c4856e0405d353ce0">00050</a> <span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#ab5f2600a7f639a9c4856e0405d353ce0">UseLargeMem</a>;
+<a name="l00051"></a>00051     
+<a name="l00052"></a>00052   <span class="keyword">public</span>:<span class="comment"></span>
+<a name="l00053"></a>00053 <span class="comment">    /// This constructor initializes the data members to match that</span>
+<a name="l00054"></a>00054 <span class="comment">    /// of the specified triple.</span>
+<a name="l00055"></a>00055 <span class="comment">    ///</span>
+<a name="l00056"></a>00056 <span class="comment"></span>    <a class="code" href="classllvm_1_1SPUSubtarget.html#aaf39e36bff7eaf8b323aff826e56134c">SPUSubtarget</a>(<span class="keyword">const</span> std::string &TT, <span class="keyword">const</span> std::string &CPU,
+<a name="l00057"></a>00057                  <span class="keyword">const</span> std::string &<a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a50aa2061845b3ff4e6e2242d762c6a80">FS</a>);
+<a name="l00058"></a>00058     <span class="comment"></span>
+<a name="l00059"></a>00059 <span class="comment">    /// ParseSubtargetFeatures - Parses features string setting specified </span>
+<a name="l00060"></a>00060 <span class="comment">    /// subtarget options.  Definition of function is auto generated by tblgen.</span>
+<a name="l00061"></a>00061 <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#aa362e14aaab8f8674df9bf5d32388c5a">ParseSubtargetFeatures</a>(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a> CPU, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> <a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a50aa2061845b3ff4e6e2242d762c6a80">FS</a>);
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">    /// SetJITMode - This is called to inform the subtarget info that we are</span>
+<a name="l00064"></a>00064 <span class="comment">    /// producing code for the JIT.</span>
+<a name="l00065"></a>00065 <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#a6bdffee49129513029259252f4c943e4">SetJITMode</a>();
+<a name="l00066"></a>00066 <span class="comment"></span>
+<a name="l00067"></a>00067 <span class="comment">    /// getStackAlignment - Returns the minimum alignment known to hold of the</span>
+<a name="l00068"></a>00068 <span class="comment">    /// stack frame on entry to the function and which must be maintained by</span>
+<a name="l00069"></a>00069 <span class="comment">    /// every function for this subtarget.</span>
+<a name="l00070"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#a965552db242cc6877eb7d39691c5e168">00070</a> <span class="comment"></span>    <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#a965552db242cc6877eb7d39691c5e168">getStackAlignment</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#ada79ae23a7eeef1e314e38ab2f37271f">StackAlignment</a>; }
+<a name="l00071"></a>00071     <span class="comment"></span>
+<a name="l00072"></a>00072 <span class="comment">    /// getInstrItins - Return the instruction itineraies based on subtarget </span>
+<a name="l00073"></a>00073 <span class="comment">    /// selection.</span>
+<a name="l00074"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#a6861c7a16fffafc10206fa3fe2222814">00074</a> <span class="comment"></span>    <span class="keyword">const</span> <a class="code" href="classllvm_1_1InstrItineraryData.html">InstrItineraryData</a> &<a class="code" href="classllvm_1_1SPUSubtarget.html#a6861c7a16fffafc10206fa3fe2222814">getInstrItineraryData</a>()<span class="keyword"> const </span>{
+<a name="l00075"></a>00075       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#aae84ec0eeb4eef0fe34ff78b3cfafc2d" title="Selected instruction itineraries (one entry per itinerary class.)">InstrItins</a>;
+<a name="l00076"></a>00076     }
+<a name="l00077"></a>00077 <span class="comment"></span>
+<a name="l00078"></a>00078 <span class="comment">    /// Use large memory addressing predicate</span>
+<a name="l00079"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#af12c8794acd1e6683b281abac65a0a02">00079</a> <span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#af12c8794acd1e6683b281abac65a0a02" title="Use large memory addressing predicate.">usingLargeMem</a>()<span class="keyword"> const </span>{
+<a name="l00080"></a>00080       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#ab5f2600a7f639a9c4856e0405d353ce0">UseLargeMem</a>;
+<a name="l00081"></a>00081     }
+<a name="l00082"></a>00082 <span class="comment"></span>
+<a name="l00083"></a>00083 <span class="comment">    /// getDataLayoutString - Return the pointer size and type alignment</span>
+<a name="l00084"></a>00084 <span class="comment">    /// properties of this subtarget.</span>
+<a name="l00085"></a><a class="code" href="classllvm_1_1SPUSubtarget.html#a936fde5894749ebb39ed56e80587203c">00085</a> <span class="comment"></span>    <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classllvm_1_1SPUSubtarget.html#a936fde5894749ebb39ed56e80587203c">getDataLayoutString</a>()<span class="keyword"> const </span>{
+<a name="l00086"></a>00086       <span class="keywordflow">return</span> <span class="stringliteral">"E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128"</span>
+<a name="l00087"></a>00087              <span class="stringliteral">"-i16:16:128-i8:8:128-i1:8:128-a:0:128-v64:64:128-v128:128:128"</span>
+<a name="l00088"></a>00088              <span class="stringliteral">"-s:128:128-n32:64"</span>;
+<a name="l00089"></a>00089     }
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091     <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SPUSubtarget.html#a876dea36bb309ac6c4e1fd2d2eb9eaa5" title="Enable PostRA scheduling for optimization levels -O2 and -O3.">enablePostRAScheduler</a>(<a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4">CodeGenOpt::Level</a> OptLevel,
+<a name="l00092"></a>00092                                <a class="code" href="classllvm_1_1TargetSubtargetInfo.html#a6188e0150c59966ad45e9e3b0c952622">TargetSubtargetInfo::AntiDepBreakMode</a>& Mode,
+<a name="l00093"></a>00093                                RegClassVector& CriticalPathRCs) <span class="keyword">const</span>;
+<a name="l00094"></a>00094   };
+<a name="l00095"></a>00095 } <span class="comment">// End llvm namespace</span>
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:23 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SPUTargetMachine_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPUTargetMachine_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPUTargetMachine_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPUTargetMachine_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,166 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPUTargetMachine.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="SPUTargetMachine.h",height=0.2,width=0.4,color="black",URL="$SPUTargetMachine_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="SPUSubtarget.h",height=0.2,width=0.4,color="black",URL="$SPUSubtarget_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Target/TargetSubtargetInfo.h",height=0.2,width=0.4,color="black",URL="$TargetSubtargetInfo_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/MC/MCSubtargetInfo.h",height=0.2,width=0.4,color="red",URL="$MCSubtargetInfo_8h.html"];
+  Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/MC/MCInstrItineraries.h",height=0.2,width=0.4,color="black",URL="$MCInstrItineraries_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/MC/MCSchedule.h",height=0.2,width=0.4,color="black",URL="$MCSchedule_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node6 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/Support/CodeGen.h",height=0.2,width=0.4,color="black",URL="$CodeGen_8h.html"];
+  Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="SPUGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="SPUInstrInfo.h",height=0.2,width=0.4,color="black",URL="$SPUInstrInfo_8h.html"];
+  Node14 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="SPU.h",height=0.2,width=0.4,color="black",URL="$SPU_8h.html"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="MCTargetDesc/SPUMCTargetDesc.h",height=0.2,width=0.4,color="black",URL="$SPUMCTargetDesc_8h.html"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="SPUGenRegisterInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="SPUGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node16 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="black",URL="$Target_2TargetMachine_8h.html"];
+  Node19 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node20 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="red",URL="$PassSupport_8h.html"];
+  Node22 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="red",URL="$PassAnalysisSupport_8h.html"];
+  Node23 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node24 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node25 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Target/TargetOptions.h",height=0.2,width=0.4,color="black",URL="$TargetOptions_8h.html"];
+  Node26 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/TargetTransformInfo.h",height=0.2,width=0.4,color="red",URL="$TargetTransformInfo_8h.html"];
+  Node27 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/Target/TargetTransformImpl.h",height=0.2,width=0.4,color="black",URL="$TargetTransformImpl_8h.html"];
+  Node28 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/CodeGen/ValueTypes.h",height=0.2,width=0.4,color="red",URL="$ValueTypes_8h.html"];
+  Node29 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="SPURegisterInfo.h",height=0.2,width=0.4,color="black",URL="$SPURegisterInfo_8h.html"];
+  Node30 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Target/TargetInstrInfo.h",height=0.2,width=0.4,color="red",URL="$TargetInstrInfo_8h.html"];
+  Node31 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/ADT/SmallSet.h",height=0.2,width=0.4,color="red",URL="$SmallSet_8h.html"];
+  Node32 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="SPUISelLowering.h",height=0.2,width=0.4,color="black",URL="$SPUISelLowering_8h.html"];
+  Node33 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="llvm/Target/TargetLowering.h",height=0.2,width=0.4,color="red",URL="$TargetLowering_8h.html"];
+  Node34 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node35 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/CodeGen/SelectionDAG.h",height=0.2,width=0.4,color="red",URL="$SelectionDAG_8h.html"];
+  Node36 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="SPUSelectionDAGInfo.h",height=0.2,width=0.4,color="black",URL="$SPUSelectionDAGInfo_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Target/TargetSelectionDAGInfo.h",height=0.2,width=0.4,color="red",URL="$TargetSelectionDAGInfo_8h.html"];
+  Node2 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="SPUFrameLowering.h",height=0.2,width=0.4,color="black",URL="$SPUFrameLowering_8h.html"];
+  Node39 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/Target/TargetFrameLowering.h",height=0.2,width=0.4,color="red",URL="$TargetFrameLowering_8h.html"];
+  Node39 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/DataLayout.h",height=0.2,width=0.4,color="black",URL="$DataLayout_8h.html"];
+  Node41 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/PassManager.h",height=0.2,width=0.4,color="black",URL="$PassManager_8h.html"];
+  Node42 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/CodeGen/SchedulerRegistry.h",height=0.2,width=0.4,color="black",URL="$SchedulerRegistry_8h.html"];
+  Node43 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/CodeGen/MachinePassRegistry.h",height=0.2,width=0.4,color="black",URL="$MachinePassRegistry_8h.html"];
+  Node44 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/CodeGen/Passes.h",height=0.2,width=0.4,color="black",URL="$CodeGen_2Passes_8h.html"];
+  Node45 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/CommandLine.h",height=0.2,width=0.4,color="red",URL="$CommandLine_8h.html"];
+  Node46 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="red",URL="$Twine_8h.html"];
+  Node47 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/DynamicLibrary.h",height=0.2,width=0.4,color="black",URL="$DynamicLibrary_8h.html"];
+  Node48 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/Support/TargetRegistry.h",height=0.2,width=0.4,color="black",URL="$TargetRegistry_8h.html"];
+  Node49 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="black",URL="$Triple_8h.html"];
+  Node50 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SPU_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SPU_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SPU_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SPU_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,135 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SPU.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="MCTargetDesc/SPUMCTargetDesc.h",height=0.2,width=0.4,color="black",URL="$SPUMCTargetDesc_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="SPUGenRegisterInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="SPUGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="SPUGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="black",URL="$Target_2TargetMachine_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="black",URL="$PassSupport_8h.html"];
+  Node10 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/PassRegistry.h",height=0.2,width=0.4,color="black",URL="$PassRegistry_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+  Node13 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node14 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node14 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node14 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node14 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node13 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node13 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/InitializePasses.h",height=0.2,width=0.4,color="black",URL="$InitializePasses_8h.html"];
+  Node10 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Support/Atomic.h",height=0.2,width=0.4,color="black",URL="$Atomic_8h.html"];
+  Node26 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Support/Valgrind.h",height=0.2,width=0.4,color="black",URL="$Valgrind_8h.html"];
+  Node27 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/Config/llvm-config.h",height=0.2,width=0.4,color="black",URL="$llvm-config_8h.html"];
+  Node27 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="stddef.h",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="black",URL="$PassAnalysisSupport_8h.html"];
+  Node31 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="black",URL="$SmallVector_8h.html"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+  Node33 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node32 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="memory",height=0.2,width=0.4,color="grey75"];
+  Node31 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Support/CodeGen.h",height=0.2,width=0.4,color="black",URL="$CodeGen_8h.html"];
+  Node6 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Target/TargetOptions.h",height=0.2,width=0.4,color="black",URL="$TargetOptions_8h.html"];
+  Node38 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/TargetTransformInfo.h",height=0.2,width=0.4,color="black",URL="$TargetTransformInfo_8h.html"];
+  Node39 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/AddressingMode.h",height=0.2,width=0.4,color="black",URL="$AddressingMode_8h.html"];
+  Node40 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Type.h",height=0.2,width=0.4,color="black",URL="$Type_8h.html"];
+  Node41 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Support/Casting.h",height=0.2,width=0.4,color="black",URL="$Casting_8h.html"];
+  Node42 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/Target/TargetTransformImpl.h",height=0.2,width=0.4,color="black",URL="$TargetTransformImpl_8h.html"];
+  Node43 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/CodeGen/ValueTypes.h",height=0.2,width=0.4,color="black",URL="$ValueTypes_8h.html"];
+  Node44 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node45 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="black",URL="$MathExtras_8h.html"];
+  Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/SwapByteOrder.h",height=0.2,width=0.4,color="black",URL="$SwapByteOrder_8h.html"];
+  Node47 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SSAUpdaterImpl.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_5c61f109262ee79315cb0ac1a5e1be6f.html">Transforms</a>      </li>
+      <li class="navelem"><a class="el" href="dir_281a58b14cc8f76e4a094a720e66e337.html">Utils</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a>  </div>
+  <div class="headertitle">
+<div class="title">SSAUpdaterImpl.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="DenseMap_8h_source.html">llvm/ADT/DenseMap.h</a>"</code><br/>
+<code>#include "<a class="el" href="SmallVector_8h_source.html">llvm/ADT/SmallVector.h</a>"</code><br/>
+<code>#include "<a class="el" href="Allocator_8h_source.html">llvm/Support/Allocator.h</a>"</code><br/>
+<code>#include "<a class="el" href="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="ValueHandle_8h_source.html">llvm/Support/ValueHandle.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SSAUpdaterImpl.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SSAUpdaterImpl_8h__incl.png" border="0" usemap="#SSAUpdaterImpl_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="SSAUpdaterImpl_8h__dep__incl.png" border="0" usemap="#SSAUpdaterImpl_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SSAUpdaterImpl_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SSAUpdaterImpl.html">llvm::SSAUpdaterImpl< UpdaterT ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>llvm::SSAUpdaterImpl< UpdaterT >::BBInfo</b></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:49 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,11 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="SSAUpdaterImpl.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="MachineSSAUpdater.cpp",height=0.2,width=0.4,color="black",URL="$MachineSSAUpdater_8cpp.html"];
+  Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="SSAUpdater.cpp",height=0.2,width=0.4,color="black",URL="$SSAUpdater_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SSAUpdaterImpl_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+081a4f2e888001ee3b5e2b525e9602f2
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+86b55b81404696a493d63a4c01961ee6
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SSAUpdater_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SSAUpdater.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_5c61f109262ee79315cb0ac1a5e1be6f.html">Transforms</a>      </li>
+      <li class="navelem"><a class="el" href="dir_281a58b14cc8f76e4a094a720e66e337.html">Utils</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">SSAUpdater.h</div>  </div>
+</div>
+<div class="contents">
+<a href="SSAUpdater_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SSAUpdater.h - Unstructured SSA Update Tool -------------*- C++ -*-===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file declares the SSAUpdater class.</span>
+<a name="l00011"></a>00011 <span class="comment">//</span>
+<a name="l00012"></a>00012 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00013"></a>00013 
+<a name="l00014"></a>00014 <span class="preprocessor">#ifndef LLVM_TRANSFORMS_UTILS_SSAUPDATER_H</span>
+<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_TRANSFORMS_UTILS_SSAUPDATER_H</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="StringRef_8h.html">llvm/ADT/StringRef.h</a>"</span>
+<a name="l00018"></a>00018 
+<a name="l00019"></a>00019 <span class="keyword">namespace </span>llvm {
+<a name="l00020"></a>00020   <span class="keyword">class </span><a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a>;
+<a name="l00021"></a>00021   <span class="keyword">class </span>Instruction;
+<a name="l00022"></a>00022   <span class="keyword">class </span>LoadInst;
+<a name="l00023"></a>00023   <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>SmallVectorImpl;
+<a name="l00024"></a>00024   <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>SSAUpdaterTraits;
+<a name="l00025"></a>00025   <span class="keyword">class </span>PHINode;
+<a name="l00026"></a>00026   <span class="keyword">class </span><a class="code" href="namespacellvm_1_1HexagonII.html#a9bebdf970b4f51041ed3dee5d558a807">Type</a>;
+<a name="l00027"></a>00027   <span class="keyword">class </span>Use;
+<a name="l00028"></a>00028   <span class="keyword">class </span>Value;
+<a name="l00029"></a>00029 <span class="comment"></span>
+<a name="l00030"></a>00030 <span class="comment">/// SSAUpdater - This class updates SSA form for a set of values defined in</span>
+<a name="l00031"></a>00031 <span class="comment">/// multiple blocks.  This is used when code duplication or another unstructured</span>
+<a name="l00032"></a>00032 <span class="comment">/// transformation wants to rewrite a set of uses of one value with uses of a</span>
+<a name="l00033"></a>00033 <span class="comment">/// set of values.</span>
+<a name="l00034"></a><a class="code" href="classllvm_1_1SSAUpdater.html">00034</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a> {
+<a name="l00035"></a><a class="code" href="classllvm_1_1SSAUpdater.html#ae4d9ee7af6013309bc08eb7b3a95ea3b">00035</a>   <span class="keyword">friend</span> <span class="keyword">class </span>SSAUpdaterTraits<<a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a>>;
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="keyword">private</span>:<span class="comment"></span>
+<a name="l00038"></a>00038 <span class="comment">  /// AvailableVals - This keeps track of which value to use on a per-block</span>
+<a name="l00039"></a>00039 <span class="comment">  /// basis.  When we insert PHI nodes, we keep track of them here.</span>
+<a name="l00040"></a>00040 <span class="comment"></span>  <span class="comment">//typedef DenseMap<BasicBlock*, Value*> AvailableValsTy;</span>
+<a name="l00041"></a>00041   <span class="keywordtype">void</span> *AV;
+<a name="l00042"></a>00042 <span class="comment"></span>
+<a name="l00043"></a>00043 <span class="comment">  /// ProtoType holds the type of the values being rewritten.</span>
+<a name="l00044"></a>00044 <span class="comment"></span>  <a class="code" href="classllvm_1_1Type.html">Type</a> *ProtoType;
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046   <span class="comment">// PHI nodes are given a name based on ProtoName.</span>
+<a name="l00047"></a>00047   std::string ProtoName;
+<a name="l00048"></a>00048 <span class="comment"></span>
+<a name="l00049"></a>00049 <span class="comment">  /// InsertedPHIs - If this is non-null, the SSAUpdater adds all PHI nodes that</span>
+<a name="l00050"></a>00050 <span class="comment">  /// it creates to the vector.</span>
+<a name="l00051"></a>00051 <span class="comment"></span>  <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<PHINode*></a> *InsertedPHIs;
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053 <span class="keyword">public</span>:<span class="comment"></span>
+<a name="l00054"></a>00054 <span class="comment">  /// SSAUpdater constructor.  If InsertedPHIs is specified, it will be filled</span>
+<a name="l00055"></a>00055 <span class="comment">  /// in with all PHI Nodes created by rewriting.</span>
+<a name="l00056"></a>00056 <span class="comment"></span>  <span class="keyword">explicit</span> <a class="code" href="classllvm_1_1SSAUpdater.html#a09e00ff390f913375e21a09a4eb0cdd3">SSAUpdater</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<PHINode*></a> *InsertedPHIs = 0);
+<a name="l00057"></a>00057   <a class="code" href="classllvm_1_1SSAUpdater.html#a5a1cb31475d8d5088cbe0e04e3b27a64">~SSAUpdater</a>();
+<a name="l00058"></a>00058 <span class="comment"></span>
+<a name="l00059"></a>00059 <span class="comment">  /// Initialize - Reset this object to get ready for a new set of SSA</span>
+<a name="l00060"></a>00060 <span class="comment">  /// updates with type 'Ty'.  PHI nodes get a name based on 'Name'.</span>
+<a name="l00061"></a>00061 <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SSAUpdater.html#a4fe3279aae4f726813a672d4a9b26cb1">Initialize</a>(<a class="code" href="classllvm_1_1Type.html">Type</a> *Ty, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>);
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">  /// AddAvailableValue - Indicate that a rewritten value is available at the</span>
+<a name="l00064"></a>00064 <span class="comment">  /// end of the specified block with the specified value.</span>
+<a name="l00065"></a>00065 <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SSAUpdater.html#af0d1a82b4e629e834c2ed53e5cbe22ef">AddAvailableValue</a>(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V);
+<a name="l00066"></a>00066 <span class="comment"></span>
+<a name="l00067"></a>00067 <span class="comment">  /// HasValueForBlock - Return true if the SSAUpdater already has a value for</span>
+<a name="l00068"></a>00068 <span class="comment">  /// the specified block.</span>
+<a name="l00069"></a>00069 <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SSAUpdater.html#a7df49ea3c5b04f4f97332498f038ba60">HasValueForBlock</a>(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB) <span class="keyword">const</span>;
+<a name="l00070"></a>00070 <span class="comment"></span>
+<a name="l00071"></a>00071 <span class="comment">  /// GetValueAtEndOfBlock - Construct SSA form, materializing a value that is</span>
+<a name="l00072"></a>00072 <span class="comment">  /// live at the end of the specified block.</span>
+<a name="l00073"></a>00073 <span class="comment"></span>  <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="classllvm_1_1SSAUpdater.html#acecfb9d97da9885264b3bde6bd6a64e8">GetValueAtEndOfBlock</a>(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB);
+<a name="l00074"></a>00074 <span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">  /// GetValueInMiddleOfBlock - Construct SSA form, materializing a value that</span>
+<a name="l00076"></a>00076 <span class="comment">  /// is live in the middle of the specified block.</span>
+<a name="l00077"></a>00077 <span class="comment">  ///</span>
+<a name="l00078"></a>00078 <span class="comment">  /// GetValueInMiddleOfBlock is the same as GetValueAtEndOfBlock except in one</span>
+<a name="l00079"></a>00079 <span class="comment">  /// important case: if there is a definition of the rewritten value after the</span>
+<a name="l00080"></a>00080 <span class="comment">  /// 'use' in BB.  Consider code like this:</span>
+<a name="l00081"></a>00081 <span class="comment">  ///</span>
+<a name="l00082"></a>00082 <span class="comment">  ///      X1 = ...</span>
+<a name="l00083"></a>00083 <span class="comment">  ///   SomeBB:</span>
+<a name="l00084"></a>00084 <span class="comment">  ///      use(X)</span>
+<a name="l00085"></a>00085 <span class="comment">  ///      X2 = ...</span>
+<a name="l00086"></a>00086 <span class="comment">  ///      br Cond, SomeBB, OutBB</span>
+<a name="l00087"></a>00087 <span class="comment">  ///</span>
+<a name="l00088"></a>00088 <span class="comment">  /// In this case, there are two values (X1 and X2) added to the AvailableVals</span>
+<a name="l00089"></a>00089 <span class="comment">  /// set by the client of the rewriter, and those values are both live out of</span>
+<a name="l00090"></a>00090 <span class="comment">  /// their respective blocks.  However, the use of X happens in the *middle* of</span>
+<a name="l00091"></a>00091 <span class="comment">  /// a block.  Because of this, we need to insert a new PHI node in SomeBB to</span>
+<a name="l00092"></a>00092 <span class="comment">  /// merge the appropriate values, and this value isn't live out of the block.</span>
+<a name="l00093"></a>00093 <span class="comment">  ///</span>
+<a name="l00094"></a>00094 <span class="comment"></span>  <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="classllvm_1_1SSAUpdater.html#a5b0e45dbba53e985f1b9c532fb5f200b">GetValueInMiddleOfBlock</a>(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB);
+<a name="l00095"></a>00095 <span class="comment"></span>
+<a name="l00096"></a>00096 <span class="comment">  /// RewriteUse - Rewrite a use of the symbolic value.  This handles PHI nodes,</span>
+<a name="l00097"></a>00097 <span class="comment">  /// which use their value in the corresponding predecessor.  Note that this</span>
+<a name="l00098"></a>00098 <span class="comment">  /// will not work if the use is supposed to be rewritten to a value defined in</span>
+<a name="l00099"></a>00099 <span class="comment">  /// the same block as the use, but above it.  Any 'AddAvailableValue's added</span>
+<a name="l00100"></a>00100 <span class="comment">  /// for the use's block will be considered to be below it.</span>
+<a name="l00101"></a>00101 <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SSAUpdater.html#a05c4f6837ee786e83246beeb01e3aa8d">RewriteUse</a>(<a class="code" href="classllvm_1_1Use.html">Use</a> &U);
+<a name="l00102"></a>00102 <span class="comment"></span>
+<a name="l00103"></a>00103 <span class="comment">  /// RewriteUseAfterInsertions - Rewrite a use, just like RewriteUse.  However,</span>
+<a name="l00104"></a>00104 <span class="comment">  /// this version of the method can rewrite uses in the same block as a</span>
+<a name="l00105"></a>00105 <span class="comment">  /// definition, because it assumes that all uses of a value are below any</span>
+<a name="l00106"></a>00106 <span class="comment">  /// inserted values.</span>
+<a name="l00107"></a>00107 <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SSAUpdater.html#a248544705875de8ef1c533827ec73a2e">RewriteUseAfterInsertions</a>(<a class="code" href="classllvm_1_1Use.html">Use</a> &U);
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 <span class="keyword">private</span>:
+<a name="l00110"></a>00110   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *GetValueAtEndOfBlockInternal(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB);
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112   <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a>&) <a class="code" href="Compiler_8h.html#aacca75352b8e153274310c374564eb01">LLVM_DELETED_FUNCTION</a>;
+<a name="l00113"></a>00113   <a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a>(const <a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a>&) LLVM_DELETED_FUNCTION;
+<a name="l00114"></a>00114 };
+<a name="l00115"></a>00115   <span class="comment"></span>
+<a name="l00116"></a>00116 <span class="comment">/// LoadAndStorePromoter - This little helper class provides a convenient way to</span>
+<a name="l00117"></a>00117 <span class="comment">/// promote a collection of loads and stores into SSA Form using the SSAUpdater.</span>
+<a name="l00118"></a>00118 <span class="comment">/// This handles complexities that SSAUpdater doesn't, such as multiple loads</span>
+<a name="l00119"></a>00119 <span class="comment">/// and stores in one block.</span>
+<a name="l00120"></a>00120 <span class="comment">///</span>
+<a name="l00121"></a>00121 <span class="comment">/// Clients of this class are expected to subclass this and implement the</span>
+<a name="l00122"></a>00122 <span class="comment">/// virtual methods.</span>
+<a name="l00123"></a>00123 <span class="comment">///</span>
+<a name="l00124"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html">00124</a> <span class="comment"></span>class <a class="code" href="classllvm_1_1LoadAndStorePromoter.html">LoadAndStorePromoter</a> {
+<a name="l00125"></a>00125 <span class="keyword">protected</span>:
+<a name="l00126"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#adbfdd1721b153d96672de12d3ec06637">00126</a>   <a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a> &<a class="code" href="classllvm_1_1LoadAndStorePromoter.html#adbfdd1721b153d96672de12d3ec06637">SSA</a>;
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00128"></a>00128   LoadAndStorePromoter(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Instruction*></a> &Insts,
+<a name="l00129"></a>00129                        <a class="code" href="classllvm_1_1SSAUpdater.html">SSAUpdater</a> &S, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a> = <a class="code" href="classllvm_1_1StringRef.html">StringRef</a>());
+<a name="l00130"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ab28414bea7d6adac871922e709ff1e3e">00130</a>   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ab28414bea7d6adac871922e709ff1e3e">~LoadAndStorePromoter</a>() {}
+<a name="l00131"></a>00131   <span class="comment"></span>
+<a name="l00132"></a>00132 <span class="comment">  /// run - This does the promotion.  Insts is a list of loads and stores to</span>
+<a name="l00133"></a>00133 <span class="comment">  /// promote, and Name is the basename for the PHIs to insert.  After this is</span>
+<a name="l00134"></a>00134 <span class="comment">  /// complete, the loads and stores are removed from the code.</span>
+<a name="l00135"></a>00135 <span class="comment"></span>  <span class="keywordtype">void</span> run(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Instruction*></a> &Insts) <span class="keyword">const</span>;
+<a name="l00136"></a>00136   
+<a name="l00137"></a>00137   <span class="comment"></span>
+<a name="l00138"></a>00138 <span class="comment">  /// Return true if the specified instruction is in the Inst list (which was</span>
+<a name="l00139"></a>00139 <span class="comment">  /// passed into the run method).  Clients should implement this with a more</span>
+<a name="l00140"></a>00140 <span class="comment">  /// efficient version if possible.</span>
+<a name="l00141"></a>00141 <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isInstInList(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>,
+<a name="l00142"></a>00142                             <span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Instruction*></a> &Insts) <span class="keyword">const</span>;
+<a name="l00143"></a>00143   <span class="comment"></span>
+<a name="l00144"></a>00144 <span class="comment">  /// doExtraRewritesBeforeFinalDeletion - This hook is invoked after all the</span>
+<a name="l00145"></a>00145 <span class="comment">  /// stores are found and inserted as available values, but </span>
+<a name="l00146"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#a67348fc9215809397c8f654fe79e79fa">00146</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1LoadAndStorePromoter.html#a67348fc9215809397c8f654fe79e79fa">doExtraRewritesBeforeFinalDeletion</a>()<span class="keyword"> const </span>{
+<a name="l00147"></a>00147   }
+<a name="l00148"></a>00148   <span class="comment"></span>
+<a name="l00149"></a>00149 <span class="comment">  /// replaceLoadWithValue - Clients can choose to implement this to get</span>
+<a name="l00150"></a>00150 <span class="comment">  /// notified right before a load is RAUW'd another value.</span>
+<a name="l00151"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ac896a3153b71c925504c6ce19c02c22e">00151</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ac896a3153b71c925504c6ce19c02c22e">replaceLoadWithValue</a>(<a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V)<span class="keyword"> const </span>{
+<a name="l00152"></a>00152   }
+<a name="l00153"></a>00153 <span class="comment"></span>
+<a name="l00154"></a>00154 <span class="comment">  /// This is called before each instruction is deleted.</span>
+<a name="l00155"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ad88964d1ee3ee34c9ed3647901546dd2">00155</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1LoadAndStorePromoter.html#ad88964d1ee3ee34c9ed3647901546dd2" title="This is called before each instruction is deleted.">instructionDeleted</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)<span class="keyword"> const </span>{
+<a name="l00156"></a>00156   }
+<a name="l00157"></a>00157 <span class="comment"></span>
+<a name="l00158"></a>00158 <span class="comment">  /// updateDebugInfo - This is called to update debug info associated with the</span>
+<a name="l00159"></a>00159 <span class="comment">  /// instruction.</span>
+<a name="l00160"></a><a class="code" href="classllvm_1_1LoadAndStorePromoter.html#a1000942be3d5b4c655be4d1987c0bc02">00160</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1LoadAndStorePromoter.html#a1000942be3d5b4c655be4d1987c0bc02">updateDebugInfo</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)<span class="keyword"> const </span>{
+<a name="l00161"></a>00161   }
+<a name="l00162"></a>00162 };
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164 } <span class="comment">// End llvm namespace</span>
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:36 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/SaveAndRestore_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SaveAndRestore_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SaveAndRestore_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SaveAndRestore_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SaveAndRestore.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_b423301f639fc46b24b2c9f122fcaff7.html">Support</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">SaveAndRestore.h</div>  </div>
+</div>
+<div class="contents">
+<a href="SaveAndRestore_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SaveAndRestore.h - Utility  -------------------------------*- C++ -*-=//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">//  This file provides utility classes that uses RAII to save and restore</span>
+<a name="l00011"></a>00011 <span class="comment">//  values.</span>
+<a name="l00012"></a>00012 <span class="comment">//</span>
+<a name="l00013"></a>00013 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00014"></a>00014 
+<a name="l00015"></a>00015 <span class="preprocessor">#ifndef LLVM_ADT_SAVERESTORE</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_ADT_SAVERESTORE</span>
+<a name="l00017"></a>00017 <span class="preprocessor"></span>
+<a name="l00018"></a>00018 <span class="keyword">namespace </span>llvm {
+<a name="l00019"></a>00019 
+<a name="l00020"></a>00020 <span class="comment">// SaveAndRestore - A utility class that uses RAII to save and restore</span>
+<a name="l00021"></a>00021 <span class="comment">//  the value of a variable.</span>
+<a name="l00022"></a>00022 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00023"></a><a class="code" href="structllvm_1_1SaveAndRestore.html">00023</a> <span class="keyword">struct </span><a class="code" href="structllvm_1_1SaveAndRestore.html">SaveAndRestore</a> {
+<a name="l00024"></a><a class="code" href="structllvm_1_1SaveAndRestore.html#ad39d7c67935d5463855ba71ab373ae9f">00024</a>   <a class="code" href="structllvm_1_1SaveAndRestore.html#ad39d7c67935d5463855ba71ab373ae9f">SaveAndRestore</a>(T& x) : X(x), old_value(x) {}
+<a name="l00025"></a><a class="code" href="structllvm_1_1SaveAndRestore.html#a0066cbed11dd41fb73e61e58e9b62e34">00025</a>   <a class="code" href="structllvm_1_1SaveAndRestore.html#a0066cbed11dd41fb73e61e58e9b62e34">SaveAndRestore</a>(T& x, <span class="keyword">const</span> T &new_value) : X(x), old_value(x) {
+<a name="l00026"></a>00026     X = new_value;
+<a name="l00027"></a>00027   }
+<a name="l00028"></a><a class="code" href="structllvm_1_1SaveAndRestore.html#a1e4ffb71c9f7afbf6ef13edfc9a1a2eb">00028</a>   <a class="code" href="structllvm_1_1SaveAndRestore.html#a1e4ffb71c9f7afbf6ef13edfc9a1a2eb">~SaveAndRestore</a>() { X = old_value; }
+<a name="l00029"></a><a class="code" href="structllvm_1_1SaveAndRestore.html#a10806002bf89a1d9dcf042f28aad2c5f">00029</a>   T <span class="keyword">get</span>() { <span class="keywordflow">return</span> old_value; }
+<a name="l00030"></a>00030 <span class="keyword">private</span>:
+<a name="l00031"></a>00031   T& X;
+<a name="l00032"></a>00032   T old_value;
+<a name="l00033"></a>00033 };
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="comment">// SaveOr - Similar to SaveAndRestore.  Operates only on bools; the old</span>
+<a name="l00036"></a>00036 <span class="comment">//  value of a variable is saved, and during the dstor the old value is</span>
+<a name="l00037"></a>00037 <span class="comment">//  or'ed with the new value.</span>
+<a name="l00038"></a><a class="code" href="structllvm_1_1SaveOr.html">00038</a> <span class="keyword">struct </span><a class="code" href="structllvm_1_1SaveOr.html">SaveOr</a> {
+<a name="l00039"></a><a class="code" href="structllvm_1_1SaveOr.html#ab5f52338de476e60df802fa3b2969502">00039</a>   <a class="code" href="structllvm_1_1SaveOr.html#ab5f52338de476e60df802fa3b2969502">SaveOr</a>(<span class="keywordtype">bool</span>& x) : X(x), old_value(x) { x = <span class="keyword">false</span>; }
+<a name="l00040"></a><a class="code" href="structllvm_1_1SaveOr.html#a5df6b66d11ae3385365af2143c4da9c3">00040</a>   <a class="code" href="structllvm_1_1SaveOr.html#a5df6b66d11ae3385365af2143c4da9c3">~SaveOr</a>() { X |= old_value; }
+<a name="l00041"></a>00041 <span class="keyword">private</span>:
+<a name="l00042"></a>00042   <span class="keywordtype">bool</span>& X;
+<a name="l00043"></a>00043   <span class="keyword">const</span> <span class="keywordtype">bool</span> old_value;
+<a name="l00044"></a>00044 };
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 }
+<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:22 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionAliasAnalysis_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionAliasAnalysis_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionAliasAnalysis_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionAliasAnalysis_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+40f791bedc3258fd52a9ce009fa91c0b
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1809 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ScalarEvolutionExpander.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_59dd179f705c75b7b821c61754f4942c.html">Analysis</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">ScalarEvolutionExpander.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="ScalarEvolutionExpander_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- ScalarEvolutionExpander.cpp - Scalar Evolution Analysis --*- C++ -*-===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file contains the implementation of the scalar evolution expander,</span>
+<a name="l00011"></a>00011 <span class="comment">// which is used to generate the code corresponding to a given scalar evolution</span>
+<a name="l00012"></a>00012 <span class="comment">// expression.</span>
+<a name="l00013"></a>00013 <span class="comment">//</span>
+<a name="l00014"></a>00014 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00015"></a>00015 
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="ScalarEvolutionExpander_8h.html">llvm/Analysis/ScalarEvolutionExpander.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="LoopInfo_8h.html">llvm/Analysis/LoopInfo.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="IntrinsicInst_8h.html">llvm/IntrinsicInst.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="LLVMContext_8h.html">llvm/LLVMContext.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="DataLayout_8h.html">llvm/DataLayout.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="TargetLowering_8h.html">llvm/Target/TargetLowering.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="STLExtras_8h.html">llvm/ADT/STLExtras.h</a>"</span>
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 <span class="keyword">using namespace </span>llvm;
+<a name="l00026"></a>00026 <span class="comment"></span>
+<a name="l00027"></a>00027 <span class="comment">/// ReuseOrCreateCast - Arrange for there to be a cast of V to Ty at IP,</span>
+<a name="l00028"></a>00028 <span class="comment">/// reusing an existing cast if a suitable one exists, moving an existing</span>
+<a name="l00029"></a>00029 <span class="comment">/// cast if a suitable one exists but isn't in the right place, or</span>
+<a name="l00030"></a>00030 <span class="comment">/// creating a new one.</span>
+<a name="l00031"></a>00031 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::ReuseOrCreateCast(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty,
+<a name="l00032"></a>00032                                        <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> Op,
+<a name="l00033"></a>00033                                        <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> IP) {
+<a name="l00034"></a>00034   <span class="comment">// This function must be called with the builder having a valid insertion</span>
+<a name="l00035"></a>00035   <span class="comment">// point. It doesn't need to be the actual IP where the uses of the returned</span>
+<a name="l00036"></a>00036   <span class="comment">// cast will be added, but it must dominate such IP.</span>
+<a name="l00037"></a>00037   <span class="comment">// We use this precondition to produce a cast that will dominate all its</span>
+<a name="l00038"></a>00038   <span class="comment">// uses. In particular, this is crucial for the case where the builder's</span>
+<a name="l00039"></a>00039   <span class="comment">// insertion point *is* the point where we were asked to put the cast.</span>
+<a name="l00040"></a>00040   <span class="comment">// Since we don't know the builder's insertion point is actually</span>
+<a name="l00041"></a>00041   <span class="comment">// where the uses will be added (only that it dominates it), we are</span>
+<a name="l00042"></a>00042   <span class="comment">// not allowed to move it.</span>
+<a name="l00043"></a>00043   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> BIP = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a> = NULL;
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047   <span class="comment">// Check to see if there is already a cast!</span>
+<a name="l00048"></a>00048   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UI = V-><a class="code" href="classllvm_1_1Value.html#a413abcab8dbc3900fc2fde96a5d8fca6">use_begin</a>(), E = V-><a class="code" href="classllvm_1_1Value.html#ad86469939d2a8bdd4169be9403b89f5a">use_end</a>();
+<a name="l00049"></a>00049        UI != E; ++UI) {
+<a name="l00050"></a>00050     <a class="code" href="classllvm_1_1User.html">User</a> *U = *UI;
+<a name="l00051"></a>00051     <span class="keywordflow">if</span> (U-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00052"></a>00052       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CI = dyn_cast<CastInst>(U))
+<a name="l00053"></a>00053         <span class="keywordflow">if</span> (CI->getOpcode() == Op) {
+<a name="l00054"></a>00054           <span class="comment">// If the cast isn't where we want it, create a new cast at IP.</span>
+<a name="l00055"></a>00055           <span class="comment">// Likewise, do not reuse a cast at BIP because it must dominate</span>
+<a name="l00056"></a>00056           <span class="comment">// instructions that might be inserted before BIP.</span>
+<a name="l00057"></a>00057           <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a>(CI) != IP || BIP == IP) {
+<a name="l00058"></a>00058             <span class="comment">// Create a new cast, and leave the old cast in place in case</span>
+<a name="l00059"></a>00059             <span class="comment">// it is being used as an insert point. Clear its operand</span>
+<a name="l00060"></a>00060             <span class="comment">// so that it doesn't hold anything live.</span>
+<a name="l00061"></a>00061             Ret = <a class="code" href="classllvm_1_1CastInst.html#a0f7dea9550778374905e12da6d6ba8a8" title="Construct any of the CastInst subclasses.">CastInst::Create</a>(Op, V, Ty, <span class="stringliteral">""</span>, IP);
+<a name="l00062"></a>00062             Ret-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(CI);
+<a name="l00063"></a>00063             CI->replaceAllUsesWith(Ret);
+<a name="l00064"></a>00064             CI->setOperand(0, <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00065"></a>00065             <span class="keywordflow">break</span>;
+<a name="l00066"></a>00066           }
+<a name="l00067"></a>00067           Ret = CI;
+<a name="l00068"></a>00068           <span class="keywordflow">break</span>;
+<a name="l00069"></a>00069         }
+<a name="l00070"></a>00070   }
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072   <span class="comment">// Create a new cast.</span>
+<a name="l00073"></a>00073   <span class="keywordflow">if</span> (!Ret)
+<a name="l00074"></a>00074     Ret = <a class="code" href="classllvm_1_1CastInst.html#a0f7dea9550778374905e12da6d6ba8a8" title="Construct any of the CastInst subclasses.">CastInst::Create</a>(Op, V, Ty, V-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>(), IP);
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076   <span class="comment">// We assert at the end of the function since IP might point to an</span>
+<a name="l00077"></a>00077   <span class="comment">// instruction with different dominance properties than a cast</span>
+<a name="l00078"></a>00078   <span class="comment">// (an invoke for example) and not dominate BIP (but the cast does).</span>
+<a name="l00079"></a>00079   assert(SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(Ret, BIP));
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081   rememberInstruction(Ret);
+<a name="l00082"></a>00082   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a>;
+<a name="l00083"></a>00083 }
+<a name="l00084"></a>00084 <span class="comment"></span>
+<a name="l00085"></a>00085 <span class="comment">/// InsertNoopCastOfTo - Insert a cast of V to the specified type,</span>
+<a name="l00086"></a>00086 <span class="comment">/// which must be possible with a noop cast, doing what we can to share</span>
+<a name="l00087"></a>00087 <span class="comment">/// the casts.</span>
+<a name="l00088"></a>00088 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::InsertNoopCastOfTo(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l00089"></a>00089   <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> Op = <a class="code" href="classllvm_1_1CastInst.html#a06dc25da1f16f389f5244304e8d33127" title="Infer the opcode for cast operand and type.">CastInst::getCastOpcode</a>(V, <span class="keyword">false</span>, Ty, <span class="keyword">false</span>);
+<a name="l00090"></a>00090   assert((Op == Instruction::BitCast ||
+<a name="l00091"></a>00091           Op == Instruction::PtrToInt ||
+<a name="l00092"></a>00092           Op == <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a>) &&
+<a name="l00093"></a>00093          <span class="stringliteral">"InsertNoopCastOfTo cannot perform non-noop casts!"</span>);
+<a name="l00094"></a>00094   assert(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) == SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(Ty) &&
+<a name="l00095"></a>00095          <span class="stringliteral">"InsertNoopCastOfTo cannot change sizes!"</span>);
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097   <span class="comment">// Short-circuit unnecessary bitcasts.</span>
+<a name="l00098"></a>00098   <span class="keywordflow">if</span> (Op == Instruction::BitCast) {
+<a name="l00099"></a>00099     <span class="keywordflow">if</span> (V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00100"></a>00100       <span class="keywordflow">return</span> V;
+<a name="l00101"></a>00101     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CI = dyn_cast<CastInst>(V)) {
+<a name="l00102"></a>00102       <span class="keywordflow">if</span> (CI->getOperand(0)->getType() == Ty)
+<a name="l00103"></a>00103         <span class="keywordflow">return</span> CI->getOperand(0);
+<a name="l00104"></a>00104     }
+<a name="l00105"></a>00105   }
+<a name="l00106"></a>00106   <span class="comment">// Short-circuit unnecessary inttoptr<->ptrtoint casts.</span>
+<a name="l00107"></a>00107   <span class="keywordflow">if</span> ((Op == Instruction::PtrToInt || Op == <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a>) &&
+<a name="l00108"></a>00108       SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(Ty) == SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())) {
+<a name="l00109"></a>00109     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CI = dyn_cast<CastInst>(V))
+<a name="l00110"></a>00110       <span class="keywordflow">if</span> ((CI->getOpcode() == Instruction::PtrToInt ||
+<a name="l00111"></a>00111            CI->getOpcode() == <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a>) &&
+<a name="l00112"></a>00112           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(CI->getType()) ==
+<a name="l00113"></a>00113           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(CI->getOperand(0)->getType()))
+<a name="l00114"></a>00114         <span class="keywordflow">return</span> CI->getOperand(0);
+<a name="l00115"></a>00115     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantExpr.html">ConstantExpr</a> *CE = dyn_cast<ConstantExpr>(V))
+<a name="l00116"></a>00116       <span class="keywordflow">if</span> ((CE->getOpcode() == Instruction::PtrToInt ||
+<a name="l00117"></a>00117            CE->getOpcode() == <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a>) &&
+<a name="l00118"></a>00118           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(CE->getType()) ==
+<a name="l00119"></a>00119           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(CE->getOperand(0)->getType()))
+<a name="l00120"></a>00120         <span class="keywordflow">return</span> CE->getOperand(0);
+<a name="l00121"></a>00121   }
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123   <span class="comment">// Fold a cast of a constant.</span>
+<a name="l00124"></a>00124   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<Constant>(V))
+<a name="l00125"></a>00125     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantExpr.html#a1e1ce75d651c76b6869b4218e34618c8">ConstantExpr::getCast</a>(Op, <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, Ty);
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127   <span class="comment">// Cast the argument at the beginning of the entry block, after</span>
+<a name="l00128"></a>00128   <span class="comment">// any bitcasts of other arguments.</span>
+<a name="l00129"></a>00129   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Argument.html" title="LLVM Argument representation.">Argument</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = dyn_cast<Argument>(V)) {
+<a name="l00130"></a>00130     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> IP = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getParent()->getEntryBlock().begin();
+<a name="l00131"></a>00131     <span class="keywordflow">while</span> ((isa<BitCastInst>(IP) &&
+<a name="l00132"></a>00132             isa<Argument>(cast<BitCastInst>(IP)->getOperand(0)) &&
+<a name="l00133"></a>00133             cast<BitCastInst>(IP)->getOperand(0) != <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>) ||
+<a name="l00134"></a>00134            isa<DbgInfoIntrinsic>(IP) ||
+<a name="l00135"></a>00135            isa<LandingPadInst>(IP))
+<a name="l00136"></a>00136       ++IP;
+<a name="l00137"></a>00137     <span class="keywordflow">return</span> ReuseOrCreateCast(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>, Ty, Op, IP);
+<a name="l00138"></a>00138   }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140   <span class="comment">// Cast the instruction immediately after the instruction.</span>
+<a name="l00141"></a>00141   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = cast<Instruction>(V);
+<a name="l00142"></a>00142   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> IP = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>; ++IP;
+<a name="l00143"></a>00143   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1InvokeInst.html">InvokeInst</a> *II = dyn_cast<InvokeInst>(I))
+<a name="l00144"></a>00144     IP = II->getNormalDest()->begin();
+<a name="l00145"></a>00145   <span class="keywordflow">while</span> (isa<PHINode>(IP) || isa<LandingPadInst>(IP))
+<a name="l00146"></a>00146     ++IP;
+<a name="l00147"></a>00147   <span class="keywordflow">return</span> ReuseOrCreateCast(I, Ty, Op, IP);
+<a name="l00148"></a>00148 }
+<a name="l00149"></a>00149 <span class="comment"></span>
+<a name="l00150"></a>00150 <span class="comment">/// InsertBinop - Insert the specified binary operator, doing a small amount</span>
+<a name="l00151"></a>00151 <span class="comment">/// of work to avoid inserting an obviously redundant operation.</span>
+<a name="l00152"></a>00152 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::InsertBinop(<a class="code" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> Opcode,
+<a name="l00153"></a>00153                                  <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS) {
+<a name="l00154"></a>00154   <span class="comment">// Fold a binop with constant operands.</span>
+<a name="l00155"></a>00155   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *CLHS = dyn_cast<Constant>(LHS))
+<a name="l00156"></a>00156     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *CRHS = dyn_cast<Constant>(RHS))
+<a name="l00157"></a>00157       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantExpr.html#afd44535c4ae204571d5721fa4a7042f2">ConstantExpr::get</a>(Opcode, CLHS, CRHS);
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159   <span class="comment">// Do a quick scan to see if we have this binop nearby.  If so, reuse it.</span>
+<a name="l00160"></a>00160   <span class="keywordtype">unsigned</span> ScanLimit = 6;
+<a name="l00161"></a>00161   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> BlockBegin = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l00162"></a>00162   <span class="comment">// Scanning starts from the last instruction before the insertion point.</span>
+<a name="l00163"></a>00163   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> IP = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00164"></a>00164   <span class="keywordflow">if</span> (IP != BlockBegin) {
+<a name="l00165"></a>00165     --IP;
+<a name="l00166"></a>00166     <span class="keywordflow">for</span> (; ScanLimit; --IP, --ScanLimit) {
+<a name="l00167"></a>00167       <span class="comment">// Don't count dbg.value against the ScanLimit, to avoid perturbing the</span>
+<a name="l00168"></a>00168       <span class="comment">// generated code.</span>
+<a name="l00169"></a>00169       <span class="keywordflow">if</span> (isa<DbgInfoIntrinsic>(IP))
+<a name="l00170"></a>00170         ScanLimit++;
+<a name="l00171"></a>00171       <span class="keywordflow">if</span> (IP->getOpcode() == (<a class="code" href="classunsigned.html">unsigned</a>)Opcode && IP->getOperand(0) == LHS &&
+<a name="l00172"></a>00172           IP->getOperand(1) == RHS)
+<a name="l00173"></a>00173         <span class="keywordflow">return</span> IP;
+<a name="l00174"></a>00174       <span class="keywordflow">if</span> (IP == BlockBegin) <span class="keywordflow">break</span>;
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176   }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178   <span class="comment">// Save the original insertion point so we can restore it when we're done.</span>
+<a name="l00179"></a>00179   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l00180"></a>00180   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182   <span class="comment">// Move the insertion point out of as many loops as we can.</span>
+<a name="l00183"></a>00183   <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = SE.LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>())) {
+<a name="l00184"></a>00184     <span class="keywordflow">if</span> (!L->isLoopInvariant(LHS) || !L->isLoopInvariant(RHS)) <span class="keywordflow">break</span>;
+<a name="l00185"></a>00185     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Preheader = L->getLoopPreheader();
+<a name="l00186"></a>00186     <span class="keywordflow">if</span> (!Preheader) <span class="keywordflow">break</span>;
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188     <span class="comment">// Ok, move up a level.</span>
+<a name="l00189"></a>00189     Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(Preheader, Preheader-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>());
+<a name="l00190"></a>00190   }
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192   <span class="comment">// If we haven't found this binop, insert it.</span>
+<a name="l00193"></a>00193   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *BO = cast<Instruction>(Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a2bd8d3ea479e99434bac72362a59f078">CreateBinOp</a>(Opcode, LHS, RHS));
+<a name="l00194"></a>00194   BO-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(SaveInsertPt->getDebugLoc());
+<a name="l00195"></a>00195   rememberInstruction(BO);
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197   <span class="comment">// Restore the original insert point.</span>
+<a name="l00198"></a>00198   <span class="keywordflow">if</span> (SaveInsertBB)
+<a name="l00199"></a>00199     restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201   <span class="keywordflow">return</span> BO;
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203 <span class="comment"></span>
+<a name="l00204"></a>00204 <span class="comment">/// FactorOutConstant - Test if S is divisible by Factor, using signed</span>
+<a name="l00205"></a>00205 <span class="comment">/// division. If so, update S with Factor divided out and return true.</span>
+<a name="l00206"></a>00206 <span class="comment">/// S need not be evenly divisible if a reasonable remainder can be</span>
+<a name="l00207"></a>00207 <span class="comment">/// computed.</span>
+<a name="l00208"></a>00208 <span class="comment">/// TODO: When ScalarEvolution gets a SCEVSDivExpr, this can be made</span>
+<a name="l00209"></a>00209 <span class="comment">/// unnecessary; in its place, just signed-divide Ops[i] by the scale and</span>
+<a name="l00210"></a>00210 <span class="comment">/// check to see if the divide was folded.</span>
+<a name="l00211"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">00211</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">FactorOutConstant</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *&S,
+<a name="l00212"></a>00212                               <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *&Remainder,
+<a name="l00213"></a>00213                               <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Factor,
+<a name="l00214"></a>00214                               <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE,
+<a name="l00215"></a>00215                               <span class="keyword">const</span> <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD) {
+<a name="l00216"></a>00216   <span class="comment">// Everything is divisible by one.</span>
+<a name="l00217"></a>00217   <span class="keywordflow">if</span> (Factor-><a class="code" href="classllvm_1_1SCEV.html#a3935a9de0ebdf3dc625cfb28e35bd009">isOne</a>())
+<a name="l00218"></a>00218     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220   <span class="comment">// x/x == 1.</span>
+<a name="l00221"></a>00221   <span class="keywordflow">if</span> (S == Factor) {
+<a name="l00222"></a>00222     S = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(S-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>(), 1);
+<a name="l00223"></a>00223     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00224"></a>00224   }
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226   <span class="comment">// For a Constant, check for a multiple of the given factor.</span>
+<a name="l00227"></a>00227   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<SCEVConstant>(S)) {
+<a name="l00228"></a>00228     <span class="comment">// 0/x == 0.</span>
+<a name="l00229"></a>00229     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->isZero())
+<a name="l00230"></a>00230       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00231"></a>00231     <span class="comment">// Check for divisibility.</span>
+<a name="l00232"></a>00232     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *<a class="code" href="namespacellvm_1_1MBlazeII.html#acaab6829aa42d4a0c4549b1832de1029a3528424d1b3a63ba9f7999db6a784bc6">FC</a> = dyn_cast<SCEVConstant>(Factor)) {
+<a name="l00233"></a>00233       <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI =
+<a name="l00234"></a>00234         <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#aa89f44fd7549e81b02f2be1be894f098">getContext</a>(),
+<a name="l00235"></a>00235                          <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue()->getValue().sdiv(
+<a name="l00236"></a>00236                                                    <a class="code" href="namespacellvm_1_1MBlazeII.html#acaab6829aa42d4a0c4549b1832de1029a3528424d1b3a63ba9f7999db6a784bc6">FC</a>->getValue()->getValue()));
+<a name="l00237"></a>00237       <span class="comment">// If the quotient is zero and the remainder is non-zero, reject</span>
+<a name="l00238"></a>00238       <span class="comment">// the value at this scale. It will be considered for subsequent</span>
+<a name="l00239"></a>00239       <span class="comment">// smaller scales.</span>
+<a name="l00240"></a>00240       <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1ConstantInt.html#ad4ea4748170f687710a54c919dde5625">isZero</a>()) {
+<a name="l00241"></a>00241         <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Div = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(CI);
+<a name="l00242"></a>00242         S = Div;
+<a name="l00243"></a>00243         Remainder =
+<a name="l00244"></a>00244           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(Remainder,
+<a name="l00245"></a>00245                         SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue()->getValue().srem(
+<a name="l00246"></a>00246                                                   <a class="code" href="namespacellvm_1_1MBlazeII.html#acaab6829aa42d4a0c4549b1832de1029a3528424d1b3a63ba9f7999db6a784bc6">FC</a>->getValue()->getValue())));
+<a name="l00247"></a>00247         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00248"></a>00248       }
+<a name="l00249"></a>00249     }
+<a name="l00250"></a>00250   }
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252   <span class="comment">// In a Mul, check if there is a constant operand which is a multiple</span>
+<a name="l00253"></a>00253   <span class="comment">// of the given factor.</span>
+<a name="l00254"></a>00254   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVMulExpr.html">SCEVMulExpr</a> *M = dyn_cast<SCEVMulExpr>(S)) {
+<a name="l00255"></a>00255     <span class="keywordflow">if</span> (TD) {
+<a name="l00256"></a>00256       <span class="comment">// With DataLayout, the size is known. Check if there is a constant</span>
+<a name="l00257"></a>00257       <span class="comment">// operand which is a multiple of the given factor. If so, we can</span>
+<a name="l00258"></a>00258       <span class="comment">// factor it.</span>
+<a name="l00259"></a>00259       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *<a class="code" href="namespacellvm_1_1MBlazeII.html#acaab6829aa42d4a0c4549b1832de1029a3528424d1b3a63ba9f7999db6a784bc6">FC</a> = cast<SCEVConstant>(Factor);
+<a name="l00260"></a>00260       <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<SCEVConstant>(M->getOperand(0)))
+<a name="l00261"></a>00261         <span class="keywordflow">if</span> (!<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue()->getValue().srem(FC-><a class="code" href="classllvm_1_1SCEVConstant.html#a64f0133adf37f9513005465580a19a66">getValue</a>()-><a class="code" href="classllvm_1_1ConstantInt.html#af8dde13a97efce293a7b04daf1e208fb" title="Return the constant's value.">getValue</a>())) {
+<a name="l00262"></a>00262           <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewMulOps(M->op_begin(), M->op_end());
+<a name="l00263"></a>00263           NewMulOps[0] =
+<a name="l00264"></a>00264             SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue()->getValue().sdiv(
+<a name="l00265"></a>00265                                                    FC-><a class="code" href="classllvm_1_1SCEVConstant.html#a64f0133adf37f9513005465580a19a66">getValue</a>()-><a class="code" href="classllvm_1_1ConstantInt.html#af8dde13a97efce293a7b04daf1e208fb" title="Return the constant's value.">getValue</a>()));
+<a name="l00266"></a>00266           S = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad5829d76e14852080c205f8b94d830f1">getMulExpr</a>(NewMulOps);
+<a name="l00267"></a>00267           <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00268"></a>00268         }
+<a name="l00269"></a>00269     } <span class="keywordflow">else</span> {
+<a name="l00270"></a>00270       <span class="comment">// Without DataLayout, check if Factor can be factored out of any of the</span>
+<a name="l00271"></a>00271       <span class="comment">// Mul's operands. If so, we can just remove it.</span>
+<a name="l00272"></a>00272       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = M->getNumOperands(); i != e; ++i) {
+<a name="l00273"></a>00273         <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *SOp = M->getOperand(i);
+<a name="l00274"></a>00274         <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Remainder = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(SOp-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>(), 0);
+<a name="l00275"></a>00275         <span class="keywordflow">if</span> (<a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">FactorOutConstant</a>(SOp, Remainder, Factor, SE, TD) &&
+<a name="l00276"></a>00276             Remainder-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>()) {
+<a name="l00277"></a>00277           <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewMulOps(M->op_begin(), M->op_end());
+<a name="l00278"></a>00278           NewMulOps[i] = SOp;
+<a name="l00279"></a>00279           S = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad5829d76e14852080c205f8b94d830f1">getMulExpr</a>(NewMulOps);
+<a name="l00280"></a>00280           <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00281"></a>00281         }
+<a name="l00282"></a>00282       }
+<a name="l00283"></a>00283     }
+<a name="l00284"></a>00284   }
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286   <span class="comment">// In an AddRec, check if both start and step are divisible.</span>
+<a name="l00287"></a>00287   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = dyn_cast<SCEVAddRecExpr>(S)) {
+<a name="l00288"></a>00288     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Step = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStepRecurrence(SE);
+<a name="l00289"></a>00289     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *StepRem = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Step-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>(), 0);
+<a name="l00290"></a>00290     <span class="keywordflow">if</span> (!<a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">FactorOutConstant</a>(Step, StepRem, Factor, SE, TD))
+<a name="l00291"></a>00291       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00292"></a>00292     <span class="keywordflow">if</span> (!StepRem-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>())
+<a name="l00293"></a>00293       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00294"></a>00294     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Start = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStart();
+<a name="l00295"></a>00295     <span class="keywordflow">if</span> (!<a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">FactorOutConstant</a>(Start, Remainder, Factor, SE, TD))
+<a name="l00296"></a>00296       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00297"></a>00297     <span class="comment">// FIXME: can use A->getNoWrapFlags(FlagNW)</span>
+<a name="l00298"></a>00298     S = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(Start, Step, <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getLoop(), <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>);
+<a name="l00299"></a>00299     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00300"></a>00300   }
+<a name="l00301"></a>00301 
+<a name="l00302"></a>00302   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00303"></a>00303 }
+<a name="l00304"></a>00304 <span class="comment"></span>
+<a name="l00305"></a>00305 <span class="comment">/// SimplifyAddOperands - Sort and simplify a list of add operands. NumAddRecs</span>
+<a name="l00306"></a>00306 <span class="comment">/// is the number of SCEVAddRecExprs present, which are kept at the end of</span>
+<a name="l00307"></a>00307 <span class="comment">/// the list.</span>
+<a name="l00308"></a>00308 <span class="comment">///</span>
+<a name="l00309"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#a9bc337eb05f0a2d638e1fe8e583db078">00309</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#a9bc337eb05f0a2d638e1fe8e583db078">SimplifyAddOperands</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<const SCEV *></a> &Ops,
+<a name="l00310"></a>00310                                 <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty,
+<a name="l00311"></a>00311                                 <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE) {
+<a name="l00312"></a>00312   <span class="keywordtype">unsigned</span> NumAddRecs = 0;
+<a name="l00313"></a>00313   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i > 0 && isa<SCEVAddRecExpr>(Ops[i-1]); --i)
+<a name="l00314"></a>00314     ++NumAddRecs;
+<a name="l00315"></a>00315   <span class="comment">// Group Ops into non-addrecs and addrecs.</span>
+<a name="l00316"></a>00316   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> NoAddRecs(Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>() - NumAddRecs);
+<a name="l00317"></a>00317   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> AddRecs(Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>() - NumAddRecs, Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>());
+<a name="l00318"></a>00318   <span class="comment">// Let ScalarEvolution sort and simplify the non-addrecs list.</span>
+<a name="l00319"></a>00319   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Sum = NoAddRecs.empty() ?
+<a name="l00320"></a>00320                     SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0) :
+<a name="l00321"></a>00321                     SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(NoAddRecs);
+<a name="l00322"></a>00322   <span class="comment">// If it returned an add, use the operands. Otherwise it simplified</span>
+<a name="l00323"></a>00323   <span class="comment">// the sum into a single value, so just use that.</span>
+<a name="l00324"></a>00324   Ops.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l00325"></a>00325   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddExpr.html">SCEVAddExpr</a> *Add = dyn_cast<SCEVAddExpr>(Sum))
+<a name="l00326"></a>00326     Ops.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a669d55980a7d4b6307b94596deeb0b1f">append</a>(Add->op_begin(), Add->op_end());
+<a name="l00327"></a>00327   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!Sum->isZero())
+<a name="l00328"></a>00328     Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Sum);
+<a name="l00329"></a>00329   <span class="comment">// Then append the addrecs.</span>
+<a name="l00330"></a>00330   Ops.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a669d55980a7d4b6307b94596deeb0b1f">append</a>(AddRecs.begin(), AddRecs.end());
+<a name="l00331"></a>00331 }
+<a name="l00332"></a>00332 <span class="comment"></span>
+<a name="l00333"></a>00333 <span class="comment">/// SplitAddRecs - Flatten a list of add operands, moving addrec start values</span>
+<a name="l00334"></a>00334 <span class="comment">/// out to the top level. For example, convert {a + b,+,c} to a, b, {0,+,d}.</span>
+<a name="l00335"></a>00335 <span class="comment">/// This helps expose more opportunities for folding parts of the expressions</span>
+<a name="l00336"></a>00336 <span class="comment">/// into GEP indices.</span>
+<a name="l00337"></a>00337 <span class="comment">///</span>
+<a name="l00338"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#ae138dd892b8a5f945944cdbd7d151304">00338</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#ae138dd892b8a5f945944cdbd7d151304">SplitAddRecs</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<const SCEV *></a> &Ops,
+<a name="l00339"></a>00339                          <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty,
+<a name="l00340"></a>00340                          <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE) {
+<a name="l00341"></a>00341   <span class="comment">// Find the addrecs.</span>
+<a name="l00342"></a>00342   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> AddRecs;
+<a name="l00343"></a>00343   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i)
+<a name="l00344"></a>00344     <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = dyn_cast<SCEVAddRecExpr>(Ops[i])) {
+<a name="l00345"></a>00345       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Start = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStart();
+<a name="l00346"></a>00346       <span class="keywordflow">if</span> (Start-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>()) <span class="keywordflow">break</span>;
+<a name="l00347"></a>00347       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Zero = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0);
+<a name="l00348"></a>00348       AddRecs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(Zero,
+<a name="l00349"></a>00349                                          <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStepRecurrence(SE),
+<a name="l00350"></a>00350                                          <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getLoop(),
+<a name="l00351"></a>00351                                          <span class="comment">// FIXME: A->getNoWrapFlags(FlagNW)</span>
+<a name="l00352"></a>00352                                          <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>));
+<a name="l00353"></a>00353       <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddExpr.html">SCEVAddExpr</a> *Add = dyn_cast<SCEVAddExpr>(Start)) {
+<a name="l00354"></a>00354         Ops[i] = Zero;
+<a name="l00355"></a>00355         Ops.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a669d55980a7d4b6307b94596deeb0b1f">append</a>(Add->op_begin(), Add->op_end());
+<a name="l00356"></a>00356         e += Add->getNumOperands();
+<a name="l00357"></a>00357       } <span class="keywordflow">else</span> {
+<a name="l00358"></a>00358         Ops[i] = Start;
+<a name="l00359"></a>00359       }
+<a name="l00360"></a>00360     }
+<a name="l00361"></a>00361   <span class="keywordflow">if</span> (!AddRecs.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>()) {
+<a name="l00362"></a>00362     <span class="comment">// Add the addrecs onto the end of the list.</span>
+<a name="l00363"></a>00363     Ops.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a669d55980a7d4b6307b94596deeb0b1f">append</a>(AddRecs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), AddRecs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>());
+<a name="l00364"></a>00364     <span class="comment">// Resort the operand list, moving any constants to the front.</span>
+<a name="l00365"></a>00365     <a class="code" href="ScalarEvolutionExpander_8cpp.html#a9bc337eb05f0a2d638e1fe8e583db078">SimplifyAddOperands</a>(Ops, Ty, SE);
+<a name="l00366"></a>00366   }
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368 <span class="comment"></span>
+<a name="l00369"></a>00369 <span class="comment">/// expandAddToGEP - Expand an addition expression with a pointer type into</span>
+<a name="l00370"></a>00370 <span class="comment">/// a GEP instead of using ptrtoint+arithmetic+inttoptr. This helps</span>
+<a name="l00371"></a>00371 <span class="comment">/// BasicAliasAnalysis and other passes analyze the result. See the rules</span>
+<a name="l00372"></a>00372 <span class="comment">/// for getelementptr vs. inttoptr in</span>
+<a name="l00373"></a>00373 <span class="comment">/// http://llvm.org/docs/LangRef.html#pointeraliasing</span>
+<a name="l00374"></a>00374 <span class="comment">/// for details.</span>
+<a name="l00375"></a>00375 <span class="comment">///</span>
+<a name="l00376"></a>00376 <span class="comment">/// Design note: The correctness of using getelementptr here depends on</span>
+<a name="l00377"></a>00377 <span class="comment">/// ScalarEvolution not recognizing inttoptr and ptrtoint operators, as</span>
+<a name="l00378"></a>00378 <span class="comment">/// they may introduce pointer arithmetic which may not be safely converted</span>
+<a name="l00379"></a>00379 <span class="comment">/// into getelementptr.</span>
+<a name="l00380"></a>00380 <span class="comment">///</span>
+<a name="l00381"></a>00381 <span class="comment">/// Design note: It might seem desirable for this function to be more</span>
+<a name="l00382"></a>00382 <span class="comment">/// loop-aware. If some of the indices are loop-invariant while others</span>
+<a name="l00383"></a>00383 <span class="comment">/// aren't, it might seem desirable to emit multiple GEPs, keeping the</span>
+<a name="l00384"></a>00384 <span class="comment">/// loop-invariant portions of the overall computation outside the loop.</span>
+<a name="l00385"></a>00385 <span class="comment">/// However, there are a few reasons this is not done here. Hoisting simple</span>
+<a name="l00386"></a>00386 <span class="comment">/// arithmetic is a low-level optimization that often isn't very</span>
+<a name="l00387"></a>00387 <span class="comment">/// important until late in the optimization process. In fact, passes</span>
+<a name="l00388"></a>00388 <span class="comment">/// like InstructionCombining will combine GEPs, even if it means</span>
+<a name="l00389"></a>00389 <span class="comment">/// pushing loop-invariant computation down into loops, so even if the</span>
+<a name="l00390"></a>00390 <span class="comment">/// GEPs were split here, the work would quickly be undone. The</span>
+<a name="l00391"></a>00391 <span class="comment">/// LoopStrengthReduction pass, which is usually run quite late (and</span>
+<a name="l00392"></a>00392 <span class="comment">/// after the last InstructionCombining pass), takes care of hoisting</span>
+<a name="l00393"></a>00393 <span class="comment">/// loop-invariant portions of expressions, after considering what</span>
+<a name="l00394"></a>00394 <span class="comment">/// can be folded using target addressing modes.</span>
+<a name="l00395"></a>00395 <span class="comment">///</span>
+<a name="l00396"></a>00396 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::expandAddToGEP(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<span class="keyword">const</span> *op_begin,
+<a name="l00397"></a>00397                                     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<span class="keyword">const</span> *op_end,
+<a name="l00398"></a>00398                                     <a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy,
+<a name="l00399"></a>00399                                     <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty,
+<a name="l00400"></a>00400                                     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V) {
+<a name="l00401"></a>00401   <a class="code" href="classllvm_1_1Type.html">Type</a> *ElTy = PTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>();
+<a name="l00402"></a>00402   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value *, 4></a> GepIndices;
+<a name="l00403"></a>00403   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> Ops(op_begin, op_end);
+<a name="l00404"></a>00404   <span class="keywordtype">bool</span> AnyNonZeroIndices = <span class="keyword">false</span>;
+<a name="l00405"></a>00405 
+<a name="l00406"></a>00406   <span class="comment">// Split AddRecs up into parts as either of the parts may be usable</span>
+<a name="l00407"></a>00407   <span class="comment">// without the other.</span>
+<a name="l00408"></a>00408   <a class="code" href="ScalarEvolutionExpander_8cpp.html#ae138dd892b8a5f945944cdbd7d151304">SplitAddRecs</a>(Ops, Ty, SE);
+<a name="l00409"></a>00409 
+<a name="l00410"></a>00410   <span class="comment">// Descend down the pointer's type and attempt to convert the other</span>
+<a name="l00411"></a>00411   <span class="comment">// operands into GEP indices, at each level. The first index in a GEP</span>
+<a name="l00412"></a>00412   <span class="comment">// indexes into the array implied by the pointer operand; the rest of</span>
+<a name="l00413"></a>00413   <span class="comment">// the indices index into the element or field type selected by the</span>
+<a name="l00414"></a>00414   <span class="comment">// preceding index.</span>
+<a name="l00415"></a>00415   <span class="keywordflow">for</span> (;;) {
+<a name="l00416"></a>00416     <span class="comment">// If the scale size is not 0, attempt to factor out a scale for</span>
+<a name="l00417"></a>00417     <span class="comment">// array indexing.</span>
+<a name="l00418"></a>00418     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> ScaledOps;
+<a name="l00419"></a>00419     <span class="keywordflow">if</span> (ElTy-><a class="code" href="classllvm_1_1Type.html#a9dc5111b1a9b1d5c4652d50f74fe850b">isSized</a>()) {
+<a name="l00420"></a>00420       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *ElSize = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a9cf9c4cf5a1a1750e4a93d765c05d975">getSizeOfExpr</a>(ElTy);
+<a name="l00421"></a>00421       <span class="keywordflow">if</span> (!ElSize-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>()) {
+<a name="l00422"></a>00422         <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> NewOps;
+<a name="l00423"></a>00423         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Ops.size(); i != e; ++i) {
+<a name="l00424"></a>00424           <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Op = Ops[i];
+<a name="l00425"></a>00425           <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Remainder = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0);
+<a name="l00426"></a>00426           <span class="keywordflow">if</span> (<a class="code" href="ScalarEvolutionExpander_8cpp.html#a496dd62afde2db64983c40c3a1d4a75b">FactorOutConstant</a>(Op, Remainder, ElSize, SE, SE.TD)) {
+<a name="l00427"></a>00427             <span class="comment">// Op now has ElSize factored out.</span>
+<a name="l00428"></a>00428             ScaledOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Op);
+<a name="l00429"></a>00429             <span class="keywordflow">if</span> (!Remainder-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>())
+<a name="l00430"></a>00430               NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Remainder);
+<a name="l00431"></a>00431             AnyNonZeroIndices = <span class="keyword">true</span>;
+<a name="l00432"></a>00432           } <span class="keywordflow">else</span> {
+<a name="l00433"></a>00433             <span class="comment">// The operand was not divisible, so add it to the list of operands</span>
+<a name="l00434"></a>00434             <span class="comment">// we'll scan next iteration.</span>
+<a name="l00435"></a>00435             NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Ops[i]);
+<a name="l00436"></a>00436           }
+<a name="l00437"></a>00437         }
+<a name="l00438"></a>00438         <span class="comment">// If we made any changes, update Ops.</span>
+<a name="l00439"></a>00439         <span class="keywordflow">if</span> (!ScaledOps.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>()) {
+<a name="l00440"></a>00440           Ops = NewOps;
+<a name="l00441"></a>00441           <a class="code" href="ScalarEvolutionExpander_8cpp.html#a9bc337eb05f0a2d638e1fe8e583db078">SimplifyAddOperands</a>(Ops, Ty, SE);
+<a name="l00442"></a>00442         }
+<a name="l00443"></a>00443       }
+<a name="l00444"></a>00444     }
+<a name="l00445"></a>00445 
+<a name="l00446"></a>00446     <span class="comment">// Record the scaled array index for this level of the type. If</span>
+<a name="l00447"></a>00447     <span class="comment">// we didn't find any operands that could be factored, tentatively</span>
+<a name="l00448"></a>00448     <span class="comment">// assume that element zero was selected (since the zero offset</span>
+<a name="l00449"></a>00449     <span class="comment">// would obviously be folded away).</span>
+<a name="l00450"></a>00450     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Scaled = ScaledOps.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>() ?
+<a name="l00451"></a>00451                     <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(Ty) :
+<a name="l00452"></a>00452                     <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(SE.getAddExpr(ScaledOps), Ty);
+<a name="l00453"></a>00453     GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Scaled);
+<a name="l00454"></a>00454 
+<a name="l00455"></a>00455     <span class="comment">// Collect struct field index operands.</span>
+<a name="l00456"></a>00456     <span class="keywordflow">while</span> (<a class="code" href="classllvm_1_1StructType.html">StructType</a> *STy = dyn_cast<StructType>(ElTy)) {
+<a name="l00457"></a>00457       <span class="keywordtype">bool</span> FoundFieldNo = <span class="keyword">false</span>;
+<a name="l00458"></a>00458       <span class="comment">// An empty struct has no fields.</span>
+<a name="l00459"></a>00459       <span class="keywordflow">if</span> (STy->getNumElements() == 0) <span class="keywordflow">break</span>;
+<a name="l00460"></a>00460       <span class="keywordflow">if</span> (SE.TD) {
+<a name="l00461"></a>00461         <span class="comment">// With DataLayout, field offsets are known. See if a constant offset</span>
+<a name="l00462"></a>00462         <span class="comment">// falls within any of the struct fields.</span>
+<a name="l00463"></a>00463         <span class="keywordflow">if</span> (Ops.empty()) <span class="keywordflow">break</span>;
+<a name="l00464"></a>00464         <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<SCEVConstant>(Ops[0]))
+<a name="l00465"></a>00465           <span class="keywordflow">if</span> (SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getType()) <= 64) {
+<a name="l00466"></a>00466             <span class="keyword">const</span> <a class="code" href="classllvm_1_1StructLayout.html">StructLayout</a> &SL = *SE.TD-><a class="code" href="classllvm_1_1DataLayout.html#a35c840104f32575e0d91422cf1ef3ce4">getStructLayout</a>(STy);
+<a name="l00467"></a>00467             uint64_t FullOffset = <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue()->getZExtValue();
+<a name="l00468"></a>00468             <span class="keywordflow">if</span> (FullOffset < SL.<a class="code" href="classllvm_1_1StructLayout.html#a582a5b21a8f91d7f713fa9d57c0525de">getSizeInBytes</a>()) {
+<a name="l00469"></a>00469               <span class="keywordtype">unsigned</span> ElIdx = SL.<a class="code" href="classllvm_1_1StructLayout.html#a795cfd43d30c44c33b97fe850bc0451f">getElementContainingOffset</a>(FullOffset);
+<a name="l00470"></a>00470               GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(
+<a name="l00471"></a>00471                   <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(Ty-><a class="code" href="classllvm_1_1Type.html#af348d5ea83429d08ba891ca3dd0e92b2" title="getContext - Return the LLVMContext in which this type was uniqued.">getContext</a>()), ElIdx));
+<a name="l00472"></a>00472               ElTy = STy->getTypeAtIndex(ElIdx);
+<a name="l00473"></a>00473               Ops[0] =
+<a name="l00474"></a>00474                 SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, FullOffset - SL.<a class="code" href="classllvm_1_1StructLayout.html#ae10c4483372a357a0d3411b3d64be10c">getElementOffset</a>(ElIdx));
+<a name="l00475"></a>00475               AnyNonZeroIndices = <span class="keyword">true</span>;
+<a name="l00476"></a>00476               FoundFieldNo = <span class="keyword">true</span>;
+<a name="l00477"></a>00477             }
+<a name="l00478"></a>00478           }
+<a name="l00479"></a>00479       } <span class="keywordflow">else</span> {
+<a name="l00480"></a>00480         <span class="comment">// Without DataLayout, just check for an offsetof expression of the</span>
+<a name="l00481"></a>00481         <span class="comment">// appropriate struct type.</span>
+<a name="l00482"></a>00482         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Ops.size(); i != e; ++i)
+<a name="l00483"></a>00483           <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUnknown.html">SCEVUnknown</a> *U = dyn_cast<SCEVUnknown>(Ops[i])) {
+<a name="l00484"></a>00484             <a class="code" href="classllvm_1_1Type.html">Type</a> *CTy;
+<a name="l00485"></a>00485             <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *FieldNo;
+<a name="l00486"></a>00486             <span class="keywordflow">if</span> (U->isOffsetOf(CTy, FieldNo) && CTy == STy) {
+<a name="l00487"></a>00487               GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(FieldNo);
+<a name="l00488"></a>00488               ElTy =
+<a name="l00489"></a>00489                 STy->getTypeAtIndex(cast<ConstantInt>(FieldNo)->getZExtValue());
+<a name="l00490"></a>00490               Ops[i] = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0);
+<a name="l00491"></a>00491               AnyNonZeroIndices = <span class="keyword">true</span>;
+<a name="l00492"></a>00492               FoundFieldNo = <span class="keyword">true</span>;
+<a name="l00493"></a>00493               <span class="keywordflow">break</span>;
+<a name="l00494"></a>00494             }
+<a name="l00495"></a>00495           }
+<a name="l00496"></a>00496       }
+<a name="l00497"></a>00497       <span class="comment">// If no struct field offsets were found, tentatively assume that</span>
+<a name="l00498"></a>00498       <span class="comment">// field zero was selected (since the zero offset would obviously</span>
+<a name="l00499"></a>00499       <span class="comment">// be folded away).</span>
+<a name="l00500"></a>00500       <span class="keywordflow">if</span> (!FoundFieldNo) {
+<a name="l00501"></a>00501         ElTy = STy->getTypeAtIndex(0u);
+<a name="l00502"></a>00502         GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(
+<a name="l00503"></a>00503           <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(Ty-><a class="code" href="classllvm_1_1Type.html#af348d5ea83429d08ba891ca3dd0e92b2" title="getContext - Return the LLVMContext in which this type was uniqued.">getContext</a>())));
+<a name="l00504"></a>00504       }
+<a name="l00505"></a>00505     }
+<a name="l00506"></a>00506 
+<a name="l00507"></a>00507     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ArrayType.html">ArrayType</a> *ATy = dyn_cast<ArrayType>(ElTy))
+<a name="l00508"></a>00508       ElTy = ATy->getElementType();
+<a name="l00509"></a>00509     <span class="keywordflow">else</span>
+<a name="l00510"></a>00510       <span class="keywordflow">break</span>;
+<a name="l00511"></a>00511   }
+<a name="l00512"></a>00512 
+<a name="l00513"></a>00513   <span class="comment">// If none of the operands were convertible to proper GEP indices, cast</span>
+<a name="l00514"></a>00514   <span class="comment">// the base to i8* and do an ugly getelementptr with that. It's still</span>
+<a name="l00515"></a>00515   <span class="comment">// better than ptrtoint+arithmetic+inttoptr at least.</span>
+<a name="l00516"></a>00516   <span class="keywordflow">if</span> (!AnyNonZeroIndices) {
+<a name="l00517"></a>00517     <span class="comment">// Cast the base to i8*.</span>
+<a name="l00518"></a>00518     V = InsertNoopCastOfTo(V,
+<a name="l00519"></a>00519        <a class="code" href="classllvm_1_1Type.html#a7fe9ccd4893f4e2caa826126c09545ea">Type::getInt8PtrTy</a>(Ty-><a class="code" href="classllvm_1_1Type.html#af348d5ea83429d08ba891ca3dd0e92b2" title="getContext - Return the LLVMContext in which this type was uniqued.">getContext</a>(), PTy-><a class="code" href="classllvm_1_1PointerType.html#a921061a57ec3cfbaf6422f09f7d79fc3" title="Return the address space of the Pointer type.">getAddressSpace</a>()));
+<a name="l00520"></a>00520 
+<a name="l00521"></a>00521     assert(!isa<Instruction>(V) ||
+<a name="l00522"></a>00522            SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(cast<Instruction>(V), Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>()));
+<a name="l00523"></a>00523 
+<a name="l00524"></a>00524     <span class="comment">// Expand the operands for a plain byte offset.</span>
+<a name="l00525"></a>00525     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Idx = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(Ops), Ty);
+<a name="l00526"></a>00526 
+<a name="l00527"></a>00527     <span class="comment">// Fold a GEP with constant operands.</span>
+<a name="l00528"></a>00528     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *CLHS = dyn_cast<Constant>(V))
+<a name="l00529"></a>00529       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *CRHS = dyn_cast<Constant>(Idx))
+<a name="l00530"></a>00530         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantExpr.html#a51940249c228e46f1f97932e5f4b8450">ConstantExpr::getGetElementPtr</a>(CLHS, CRHS);
+<a name="l00531"></a>00531 
+<a name="l00532"></a>00532     <span class="comment">// Do a quick scan to see if we have this GEP nearby.  If so, reuse it.</span>
+<a name="l00533"></a>00533     <span class="keywordtype">unsigned</span> ScanLimit = 6;
+<a name="l00534"></a>00534     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> BlockBegin = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l00535"></a>00535     <span class="comment">// Scanning starts from the last instruction before the insertion point.</span>
+<a name="l00536"></a>00536     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> IP = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00537"></a>00537     <span class="keywordflow">if</span> (IP != BlockBegin) {
+<a name="l00538"></a>00538       --IP;
+<a name="l00539"></a>00539       <span class="keywordflow">for</span> (; ScanLimit; --IP, --ScanLimit) {
+<a name="l00540"></a>00540         <span class="comment">// Don't count dbg.value against the ScanLimit, to avoid perturbing the</span>
+<a name="l00541"></a>00541         <span class="comment">// generated code.</span>
+<a name="l00542"></a>00542         <span class="keywordflow">if</span> (isa<DbgInfoIntrinsic>(IP))
+<a name="l00543"></a>00543           ScanLimit++;
+<a name="l00544"></a>00544         <span class="keywordflow">if</span> (IP->getOpcode() == Instruction::GetElementPtr &&
+<a name="l00545"></a>00545             IP->getOperand(0) == V && IP->getOperand(1) == Idx)
+<a name="l00546"></a>00546           <span class="keywordflow">return</span> IP;
+<a name="l00547"></a>00547         <span class="keywordflow">if</span> (IP == BlockBegin) <span class="keywordflow">break</span>;
+<a name="l00548"></a>00548       }
+<a name="l00549"></a>00549     }
+<a name="l00550"></a>00550 
+<a name="l00551"></a>00551     <span class="comment">// Save the original insertion point so we can restore it when we're done.</span>
+<a name="l00552"></a>00552     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l00553"></a>00553     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00554"></a>00554 
+<a name="l00555"></a>00555     <span class="comment">// Move the insertion point out of as many loops as we can.</span>
+<a name="l00556"></a>00556     <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = SE.LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>())) {
+<a name="l00557"></a>00557       <span class="keywordflow">if</span> (!L->isLoopInvariant(V) || !L->isLoopInvariant(Idx)) <span class="keywordflow">break</span>;
+<a name="l00558"></a>00558       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Preheader = L->getLoopPreheader();
+<a name="l00559"></a>00559       <span class="keywordflow">if</span> (!Preheader) <span class="keywordflow">break</span>;
+<a name="l00560"></a>00560 
+<a name="l00561"></a>00561       <span class="comment">// Ok, move up a level.</span>
+<a name="l00562"></a>00562       Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(Preheader, Preheader-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>());
+<a name="l00563"></a>00563     }
+<a name="l00564"></a>00564 
+<a name="l00565"></a>00565     <span class="comment">// Emit a GEP.</span>
+<a name="l00566"></a>00566     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *GEP = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#ac46176b523c8a76a9ccdb5683279db94">CreateGEP</a>(V, Idx, <span class="stringliteral">"uglygep"</span>);
+<a name="l00567"></a>00567     rememberInstruction(GEP);
+<a name="l00568"></a>00568 
+<a name="l00569"></a>00569     <span class="comment">// Restore the original insert point.</span>
+<a name="l00570"></a>00570     <span class="keywordflow">if</span> (SaveInsertBB)
+<a name="l00571"></a>00571       restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l00572"></a>00572 
+<a name="l00573"></a>00573     <span class="keywordflow">return</span> GEP;
+<a name="l00574"></a>00574   }
+<a name="l00575"></a>00575 
+<a name="l00576"></a>00576   <span class="comment">// Save the original insertion point so we can restore it when we're done.</span>
+<a name="l00577"></a>00577   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l00578"></a>00578   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l00579"></a>00579 
+<a name="l00580"></a>00580   <span class="comment">// Move the insertion point out of as many loops as we can.</span>
+<a name="l00581"></a>00581   <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = SE.LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>())) {
+<a name="l00582"></a>00582     <span class="keywordflow">if</span> (!L->isLoopInvariant(V)) <span class="keywordflow">break</span>;
+<a name="l00583"></a>00583 
+<a name="l00584"></a>00584     <span class="keywordtype">bool</span> AnyIndexNotLoopInvariant = <span class="keyword">false</span>;
+<a name="l00585"></a>00585     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Value *>::const_iterator</a> I = GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(),
+<a name="l00586"></a>00586          E = GepIndices.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(); I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00587"></a>00587       <span class="keywordflow">if</span> (!L->isLoopInvariant(*I)) {
+<a name="l00588"></a>00588         AnyIndexNotLoopInvariant = <span class="keyword">true</span>;
+<a name="l00589"></a>00589         <span class="keywordflow">break</span>;
+<a name="l00590"></a>00590       }
+<a name="l00591"></a>00591     <span class="keywordflow">if</span> (AnyIndexNotLoopInvariant)
+<a name="l00592"></a>00592       <span class="keywordflow">break</span>;
+<a name="l00593"></a>00593 
+<a name="l00594"></a>00594     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Preheader = L->getLoopPreheader();
+<a name="l00595"></a>00595     <span class="keywordflow">if</span> (!Preheader) <span class="keywordflow">break</span>;
+<a name="l00596"></a>00596 
+<a name="l00597"></a>00597     <span class="comment">// Ok, move up a level.</span>
+<a name="l00598"></a>00598     Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(Preheader, Preheader-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>());
+<a name="l00599"></a>00599   }
+<a name="l00600"></a>00600 
+<a name="l00601"></a>00601   <span class="comment">// Insert a pretty getelementptr. Note that this GEP is not marked inbounds,</span>
+<a name="l00602"></a>00602   <span class="comment">// because ScalarEvolution may have changed the address arithmetic to</span>
+<a name="l00603"></a>00603   <span class="comment">// compute a value which is beyond the end of the allocated object.</span>
+<a name="l00604"></a>00604   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Casted = V;
+<a name="l00605"></a>00605   <span class="keywordflow">if</span> (V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != PTy)
+<a name="l00606"></a>00606     Casted = InsertNoopCastOfTo(Casted, PTy);
+<a name="l00607"></a>00607   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *GEP = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#ac46176b523c8a76a9ccdb5683279db94">CreateGEP</a>(Casted,
+<a name="l00608"></a>00608                                  GepIndices,
+<a name="l00609"></a>00609                                  <span class="stringliteral">"scevgep"</span>);
+<a name="l00610"></a>00610   Ops.push_back(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(GEP));
+<a name="l00611"></a>00611   rememberInstruction(GEP);
+<a name="l00612"></a>00612 
+<a name="l00613"></a>00613   <span class="comment">// Restore the original insert point.</span>
+<a name="l00614"></a>00614   <span class="keywordflow">if</span> (SaveInsertBB)
+<a name="l00615"></a>00615     restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l00616"></a>00616 
+<a name="l00617"></a>00617   <span class="keywordflow">return</span> expand(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(Ops));
+<a name="l00618"></a>00618 }
+<a name="l00619"></a>00619 <span class="comment"></span>
+<a name="l00620"></a>00620 <span class="comment">/// PickMostRelevantLoop - Given two loops pick the one that's most relevant for</span>
+<a name="l00621"></a>00621 <span class="comment">/// SCEV expansion. If they are nested, this is the most nested. If they are</span>
+<a name="l00622"></a>00622 <span class="comment">/// neighboring, pick the later.</span>
+<a name="l00623"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#a0292c0709f879d1d205ac0b4f5d7e6ef">00623</a> <span class="comment"></span><span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *<a class="code" href="ScalarEvolutionExpander_8cpp.html#a0292c0709f879d1d205ac0b4f5d7e6ef">PickMostRelevantLoop</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>, <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *B,
+<a name="l00624"></a>00624                                         <a class="code" href="classllvm_1_1DominatorTree.html">DominatorTree</a> &DT) {
+<a name="l00625"></a>00625   <span class="keywordflow">if</span> (!A) <span class="keywordflow">return</span> B;
+<a name="l00626"></a>00626   <span class="keywordflow">if</span> (!B) <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>;
+<a name="l00627"></a>00627   <span class="keywordflow">if</span> (A-><a class="code" href="classllvm_1_1LoopBase.html#a92a38e2e3412bde7fd2b71db212b61aa">contains</a>(B)) <span class="keywordflow">return</span> B;
+<a name="l00628"></a>00628   <span class="keywordflow">if</span> (B-><a class="code" href="classllvm_1_1LoopBase.html#a92a38e2e3412bde7fd2b71db212b61aa">contains</a>(A)) <span class="keywordflow">return</span> A;
+<a name="l00629"></a>00629   <span class="keywordflow">if</span> (DT.<a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(A-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>(), B-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>())) <span class="keywordflow">return</span> B;
+<a name="l00630"></a>00630   <span class="keywordflow">if</span> (DT.<a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(B-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>(), A-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>())) <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>;
+<a name="l00631"></a>00631   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>; <span class="comment">// Arbitrarily break the tie.</span>
+<a name="l00632"></a>00632 }
+<a name="l00633"></a>00633 <span class="comment"></span>
+<a name="l00634"></a>00634 <span class="comment">/// getRelevantLoop - Get the most relevant loop associated with the given</span>
+<a name="l00635"></a>00635 <span class="comment">/// expression, according to PickMostRelevantLoop.</span>
+<a name="l00636"></a>00636 <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *SCEVExpander::getRelevantLoop(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S) {
+<a name="l00637"></a>00637   <span class="comment">// Test whether we've already computed the most relevant loop for this SCEV.</span>
+<a name="l00638"></a>00638   std::pair<DenseMap<const SCEV *, const Loop *>::iterator, <span class="keywordtype">bool</span>> Pair =
+<a name="l00639"></a>00639     RelevantLoops.<a class="code" href="classllvm_1_1DenseMapBase.html#a699a66e504b48fdeff124e82f6c61917">insert</a>(std::make_pair(S, static_cast<const Loop *>(0)));
+<a name="l00640"></a>00640   <span class="keywordflow">if</span> (!Pair.second)
+<a name="l00641"></a>00641     <span class="keywordflow">return</span> Pair.first->second;
+<a name="l00642"></a>00642 
+<a name="l00643"></a>00643   <span class="keywordflow">if</span> (isa<SCEVConstant>(S))
+<a name="l00644"></a>00644     <span class="comment">// A constant has no relevant loops.</span>
+<a name="l00645"></a>00645     <span class="keywordflow">return</span> 0;
+<a name="l00646"></a>00646   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUnknown.html">SCEVUnknown</a> *U = dyn_cast<SCEVUnknown>(S)) {
+<a name="l00647"></a>00647     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = dyn_cast<Instruction>(U->getValue()))
+<a name="l00648"></a>00648       <span class="keywordflow">return</span> Pair.first->second = SE.LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(I-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>());
+<a name="l00649"></a>00649     <span class="comment">// A non-instruction has no relevant loops.</span>
+<a name="l00650"></a>00650     <span class="keywordflow">return</span> 0;
+<a name="l00651"></a>00651   }
+<a name="l00652"></a>00652   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVNAryExpr.html">SCEVNAryExpr</a> *N = dyn_cast<SCEVNAryExpr>(S)) {
+<a name="l00653"></a>00653     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = 0;
+<a name="l00654"></a>00654     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AR = dyn_cast<SCEVAddRecExpr>(S))
+<a name="l00655"></a>00655       L = AR->getLoop();
+<a name="l00656"></a>00656     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SCEVNAryExpr.html#a82ad83d40ce0e57efef84b421c7f805a">SCEVNAryExpr::op_iterator</a> I = <a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>->op_begin(), E = <a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>->op_end();
+<a name="l00657"></a>00657          I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00658"></a>00658       L = <a class="code" href="ScalarEvolutionExpander_8cpp.html#a0292c0709f879d1d205ac0b4f5d7e6ef">PickMostRelevantLoop</a>(L, getRelevantLoop(*I), *SE.DT);
+<a name="l00659"></a>00659     <span class="keywordflow">return</span> RelevantLoops[<a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>] = L;
+<a name="l00660"></a>00660   }
+<a name="l00661"></a>00661   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVCastExpr.html">SCEVCastExpr</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<SCEVCastExpr>(S)) {
+<a name="l00662"></a>00662     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *Result = getRelevantLoop(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getOperand());
+<a name="l00663"></a>00663     <span class="keywordflow">return</span> RelevantLoops[<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>] = Result;
+<a name="l00664"></a>00664   }
+<a name="l00665"></a>00665   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUDivExpr.html">SCEVUDivExpr</a> *D = dyn_cast<SCEVUDivExpr>(S)) {
+<a name="l00666"></a>00666     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *Result =
+<a name="l00667"></a>00667       <a class="code" href="ScalarEvolutionExpander_8cpp.html#a0292c0709f879d1d205ac0b4f5d7e6ef">PickMostRelevantLoop</a>(getRelevantLoop(D->getLHS()),
+<a name="l00668"></a>00668                            getRelevantLoop(D->getRHS()),
+<a name="l00669"></a>00669                            *SE.DT);
+<a name="l00670"></a>00670     <span class="keywordflow">return</span> RelevantLoops[D] = Result;
+<a name="l00671"></a>00671   }
+<a name="l00672"></a>00672   <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unexpected SCEV type!"</span>);
+<a name="l00673"></a>00673 }
+<a name="l00674"></a>00674 
+<a name="l00675"></a>00675 <span class="keyword">namespace </span>{
+<a name="l00676"></a>00676 <span class="comment"></span>
+<a name="l00677"></a>00677 <span class="comment">/// LoopCompare - Compare loops by PickMostRelevantLoop.</span>
+<a name="l00678"></a>00678 <span class="comment"></span><span class="keyword">class </span>LoopCompare {
+<a name="l00679"></a>00679   <a class="code" href="classllvm_1_1DominatorTree.html">DominatorTree</a> &DT;
+<a name="l00680"></a>00680 <span class="keyword">public</span>:
+<a name="l00681"></a>00681   <span class="keyword">explicit</span> LoopCompare(<a class="code" href="classllvm_1_1DominatorTree.html">DominatorTree</a> &dt) : DT(dt) {}
+<a name="l00682"></a>00682 
+<a name="l00683"></a>00683   <span class="keywordtype">bool</span> operator()(std::pair<const Loop *, const SCEV *> LHS,
+<a name="l00684"></a>00684                   std::pair<const Loop *, const SCEV *> RHS)<span class="keyword"> const </span>{
+<a name="l00685"></a>00685     <span class="comment">// Keep pointer operands sorted at the end.</span>
+<a name="l00686"></a>00686     <span class="keywordflow">if</span> (LHS.second->getType()->isPointerTy() !=
+<a name="l00687"></a>00687         RHS.second->getType()->isPointerTy())
+<a name="l00688"></a>00688       <span class="keywordflow">return</span> LHS.second->getType()->isPointerTy();
+<a name="l00689"></a>00689 
+<a name="l00690"></a>00690     <span class="comment">// Compare loops with PickMostRelevantLoop.</span>
+<a name="l00691"></a>00691     <span class="keywordflow">if</span> (LHS.first != RHS.first)
+<a name="l00692"></a>00692       <span class="keywordflow">return</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#a0292c0709f879d1d205ac0b4f5d7e6ef">PickMostRelevantLoop</a>(LHS.first, RHS.first, DT) != LHS.first;
+<a name="l00693"></a>00693 
+<a name="l00694"></a>00694     <span class="comment">// If one operand is a non-constant negative and the other is not,</span>
+<a name="l00695"></a>00695     <span class="comment">// put the non-constant negative on the right so that a sub can</span>
+<a name="l00696"></a>00696     <span class="comment">// be used instead of a negate and add.</span>
+<a name="l00697"></a>00697     <span class="keywordflow">if</span> (LHS.second->isNonConstantNegative()) {
+<a name="l00698"></a>00698       <span class="keywordflow">if</span> (!RHS.second->isNonConstantNegative())
+<a name="l00699"></a>00699         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00700"></a>00700     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (RHS.second->isNonConstantNegative())
+<a name="l00701"></a>00701       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00702"></a>00702 
+<a name="l00703"></a>00703     <span class="comment">// Otherwise they are equivalent according to this comparison.</span>
+<a name="l00704"></a>00704     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00705"></a>00705   }
+<a name="l00706"></a>00706 };
+<a name="l00707"></a>00707 
+<a name="l00708"></a>00708 }
+<a name="l00709"></a>00709 
+<a name="l00710"></a>00710 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitAddExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddExpr.html">SCEVAddExpr</a> *S) {
+<a name="l00711"></a>00711   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVAddExpr.html#adaa7ea82a902c95919c4bb6f7f6bf904">getType</a>());
+<a name="l00712"></a>00712 
+<a name="l00713"></a>00713   <span class="comment">// Collect all the add operands in a loop, along with their associated loops.</span>
+<a name="l00714"></a>00714   <span class="comment">// Iterate in reverse so that constants are emitted last, all else equal, and</span>
+<a name="l00715"></a>00715   <span class="comment">// so that pointer operands are inserted first, which the code below relies on</span>
+<a name="l00716"></a>00716   <span class="comment">// to form more involved GEPs.</span>
+<a name="l00717"></a>00717   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<const Loop *, const SCEV *></a>, 8> OpsAndLoops;
+<a name="l00718"></a>00718   <span class="keywordflow">for</span> (std::reverse_iterator<SCEVAddExpr::op_iterator> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a5877c3a289aa71796140f54b73f654f7">op_end</a>()),
+<a name="l00719"></a>00719        E(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a107163b3c781d2b0137bf2021e7dc984">op_begin</a>()); I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00720"></a>00720     OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::make_pair(getRelevantLoop(*I), *I));
+<a name="l00721"></a>00721 
+<a name="l00722"></a>00722   <span class="comment">// Sort by loop. Use a stable sort so that constants follow non-constants and</span>
+<a name="l00723"></a>00723   <span class="comment">// pointer operands precede non-pointer operands.</span>
+<a name="l00724"></a>00724   std::stable_sort(OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), LoopCompare(*SE.DT));
+<a name="l00725"></a>00725 
+<a name="l00726"></a>00726   <span class="comment">// Emit instructions to add all the operands. Hoist as much as possible</span>
+<a name="l00727"></a>00727   <span class="comment">// out of loops, and form meaningful getelementptrs where possible.</span>
+<a name="l00728"></a>00728   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sum = 0;
+<a name="l00729"></a>00729   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a><std::pair<const Loop *, const SCEV *> >::<a class="code" href="classstd_1_1iterator.html">iterator</a>
+<a name="l00730"></a>00730        I = OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), E = OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(); I != E; ) {
+<a name="l00731"></a>00731     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *CurLoop = I->first;
+<a name="l00732"></a>00732     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Op = I->second;
+<a name="l00733"></a>00733     <span class="keywordflow">if</span> (!Sum) {
+<a name="l00734"></a>00734       <span class="comment">// This is the first operand. Just expand it.</span>
+<a name="l00735"></a>00735       Sum = expand(Op);
+<a name="l00736"></a>00736       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00737"></a>00737     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy = dyn_cast<PointerType>(Sum->getType())) {
+<a name="l00738"></a>00738       <span class="comment">// The running sum expression is a pointer. Try to form a getelementptr</span>
+<a name="l00739"></a>00739       <span class="comment">// at this level with that as the base.</span>
+<a name="l00740"></a>00740       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewOps;
+<a name="l00741"></a>00741       <span class="keywordflow">for</span> (; I != E && I->first == CurLoop; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00742"></a>00742         <span class="comment">// If the operand is SCEVUnknown and not instructions, peek through</span>
+<a name="l00743"></a>00743         <span class="comment">// it, to enable more of it to be folded into the GEP.</span>
+<a name="l00744"></a>00744         <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a> = I->second;
+<a name="l00745"></a>00745         <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUnknown.html">SCEVUnknown</a> *U = dyn_cast<SCEVUnknown>(X))
+<a name="l00746"></a>00746           <span class="keywordflow">if</span> (!isa<Instruction>(U->getValue()))
+<a name="l00747"></a>00747             X = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(U->getValue());
+<a name="l00748"></a>00748         NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(X);
+<a name="l00749"></a>00749       }
+<a name="l00750"></a>00750       Sum = expandAddToGEP(NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), PTy, Ty, Sum);
+<a name="l00751"></a>00751     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy = dyn_cast<PointerType>(Op-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>())) {
+<a name="l00752"></a>00752       <span class="comment">// The running sum is an integer, and there's a pointer at this level.</span>
+<a name="l00753"></a>00753       <span class="comment">// Try to form a getelementptr. If the running sum is instructions,</span>
+<a name="l00754"></a>00754       <span class="comment">// use a SCEVUnknown to avoid re-analyzing them.</span>
+<a name="l00755"></a>00755       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewOps;
+<a name="l00756"></a>00756       NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(isa<Instruction>(Sum) ? SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(Sum) :
+<a name="l00757"></a>00757                                                SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(Sum));
+<a name="l00758"></a>00758       <span class="keywordflow">for</span> (++I; I != E && I->first == CurLoop; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00759"></a>00759         NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(I->second);
+<a name="l00760"></a>00760       Sum = expandAddToGEP(NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), NewOps.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), PTy, Ty, expand(Op));
+<a name="l00761"></a>00761     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Op-><a class="code" href="classllvm_1_1SCEV.html#a004121efb296aedb4f06091d92b89442">isNonConstantNegative</a>()) {
+<a name="l00762"></a>00762       <span class="comment">// Instead of doing a negate and add, just do a subtract.</span>
+<a name="l00763"></a>00763       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *W = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#afb58ec6af347a7917618ff9c01d729bf">getNegativeSCEV</a>(Op), Ty);
+<a name="l00764"></a>00764       Sum = InsertNoopCastOfTo(Sum, Ty);
+<a name="l00765"></a>00765       Sum = InsertBinop(Instruction::Sub, Sum, W);
+<a name="l00766"></a>00766       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00767"></a>00767     } <span class="keywordflow">else</span> {
+<a name="l00768"></a>00768       <span class="comment">// A simple add.</span>
+<a name="l00769"></a>00769       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *W = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(Op, Ty);
+<a name="l00770"></a>00770       Sum = InsertNoopCastOfTo(Sum, Ty);
+<a name="l00771"></a>00771       <span class="comment">// Canonicalize a constant to the RHS.</span>
+<a name="l00772"></a>00772       <span class="keywordflow">if</span> (isa<Constant>(Sum)) <a class="code" href="namespacellvm.html#a39bdaf6372ed2ef16d951fc0f6d54dd4">std::swap</a>(Sum, W);
+<a name="l00773"></a>00773       Sum = InsertBinop(Instruction::Add, Sum, W);
+<a name="l00774"></a>00774       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00775"></a>00775     }
+<a name="l00776"></a>00776   }
+<a name="l00777"></a>00777 
+<a name="l00778"></a>00778   <span class="keywordflow">return</span> Sum;
+<a name="l00779"></a>00779 }
+<a name="l00780"></a>00780 
+<a name="l00781"></a>00781 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitMulExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVMulExpr.html">SCEVMulExpr</a> *S) {
+<a name="l00782"></a>00782   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>());
+<a name="l00783"></a>00783 
+<a name="l00784"></a>00784   <span class="comment">// Collect all the mul operands in a loop, along with their associated loops.</span>
+<a name="l00785"></a>00785   <span class="comment">// Iterate in reverse so that constants are emitted last, all else equal.</span>
+<a name="l00786"></a>00786   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<const Loop *, const SCEV *></a>, 8> OpsAndLoops;
+<a name="l00787"></a>00787   <span class="keywordflow">for</span> (std::reverse_iterator<SCEVMulExpr::op_iterator> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a5877c3a289aa71796140f54b73f654f7">op_end</a>()),
+<a name="l00788"></a>00788        E(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a107163b3c781d2b0137bf2021e7dc984">op_begin</a>()); I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00789"></a>00789     OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::make_pair(getRelevantLoop(*I), *I));
+<a name="l00790"></a>00790 
+<a name="l00791"></a>00791   <span class="comment">// Sort by loop. Use a stable sort so that constants follow non-constants.</span>
+<a name="l00792"></a>00792   std::stable_sort(OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), LoopCompare(*SE.DT));
+<a name="l00793"></a>00793 
+<a name="l00794"></a>00794   <span class="comment">// Emit instructions to mul all the operands. Hoist as much as possible</span>
+<a name="l00795"></a>00795   <span class="comment">// out of loops.</span>
+<a name="l00796"></a>00796   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Prod = 0;
+<a name="l00797"></a>00797   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a><std::pair<const Loop *, const SCEV *> >::<a class="code" href="classstd_1_1iterator.html">iterator</a>
+<a name="l00798"></a>00798        I = OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), E = OpsAndLoops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(); I != E; ) {
+<a name="l00799"></a>00799     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Op = I->second;
+<a name="l00800"></a>00800     <span class="keywordflow">if</span> (!Prod) {
+<a name="l00801"></a>00801       <span class="comment">// This is the first operand. Just expand it.</span>
+<a name="l00802"></a>00802       Prod = expand(Op);
+<a name="l00803"></a>00803       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00804"></a>00804     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Op-><a class="code" href="classllvm_1_1SCEV.html#a6e915d0a915541a818ab88b1fac7cbd1">isAllOnesValue</a>()) {
+<a name="l00805"></a>00805       <span class="comment">// Instead of doing a multiply by negative one, just do a negate.</span>
+<a name="l00806"></a>00806       Prod = InsertNoopCastOfTo(Prod, Ty);
+<a name="l00807"></a>00807       Prod = InsertBinop(Instruction::Sub, <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(Ty), Prod);
+<a name="l00808"></a>00808       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00809"></a>00809     } <span class="keywordflow">else</span> {
+<a name="l00810"></a>00810       <span class="comment">// A simple mul.</span>
+<a name="l00811"></a>00811       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *W = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(Op, Ty);
+<a name="l00812"></a>00812       Prod = InsertNoopCastOfTo(Prod, Ty);
+<a name="l00813"></a>00813       <span class="comment">// Canonicalize a constant to the RHS.</span>
+<a name="l00814"></a>00814       <span class="keywordflow">if</span> (isa<Constant>(Prod)) <a class="code" href="namespacellvm.html#a39bdaf6372ed2ef16d951fc0f6d54dd4">std::swap</a>(Prod, W);
+<a name="l00815"></a>00815       Prod = InsertBinop(Instruction::Mul, Prod, W);
+<a name="l00816"></a>00816       ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00817"></a>00817     }
+<a name="l00818"></a>00818   }
+<a name="l00819"></a>00819 
+<a name="l00820"></a>00820   <span class="keywordflow">return</span> Prod;
+<a name="l00821"></a>00821 }
+<a name="l00822"></a>00822 
+<a name="l00823"></a>00823 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitUDivExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUDivExpr.html">SCEVUDivExpr</a> *S) {
+<a name="l00824"></a>00824   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVUDivExpr.html#a38e73ccf223d1b8eec8fc3a026a7da1c">getType</a>());
+<a name="l00825"></a>00825 
+<a name="l00826"></a>00826   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVUDivExpr.html#a0556409bb7d6f1fb0e4681aaf5e88e1f">getLHS</a>(), Ty);
+<a name="l00827"></a>00827   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *SC = dyn_cast<SCEVConstant>(S-><a class="code" href="classllvm_1_1SCEVUDivExpr.html#a0745b63bdc2e2b907b936bf105e3eeb9">getRHS</a>())) {
+<a name="l00828"></a>00828     <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &RHS = SC->getValue()->getValue();
+<a name="l00829"></a>00829     <span class="keywordflow">if</span> (RHS.<a class="code" href="classllvm_1_1APInt.html#af3deb6522c4fe2043fe07af2ec90190c">isPowerOf2</a>())
+<a name="l00830"></a>00830       <span class="keywordflow">return</span> InsertBinop(<a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>, LHS,
+<a name="l00831"></a>00831                          <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Ty, RHS.<a class="code" href="classllvm_1_1APInt.html#a474f562a4871689af74b0fd1ae42daa1">logBase2</a>()));
+<a name="l00832"></a>00832   }
+<a name="l00833"></a>00833 
+<a name="l00834"></a>00834   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVUDivExpr.html#a0745b63bdc2e2b907b936bf105e3eeb9">getRHS</a>(), Ty);
+<a name="l00835"></a>00835   <span class="keywordflow">return</span> InsertBinop(Instruction::UDiv, LHS, RHS);
+<a name="l00836"></a>00836 }
+<a name="l00837"></a>00837 <span class="comment"></span>
+<a name="l00838"></a>00838 <span class="comment">/// Move parts of Base into Rest to leave Base with the minimal</span>
+<a name="l00839"></a>00839 <span class="comment">/// expression that provides a pointer operand suitable for a</span>
+<a name="l00840"></a>00840 <span class="comment">/// GEP expansion.</span>
+<a name="l00841"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#aeb811bb4a3e1c56acb04c713200c9a42">00841</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#aeb811bb4a3e1c56acb04c713200c9a42">ExposePointerBase</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *&Base, <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *&Rest,
+<a name="l00842"></a>00842                               <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE) {
+<a name="l00843"></a>00843   <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = dyn_cast<SCEVAddRecExpr>(Base)) {
+<a name="l00844"></a>00844     Base = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStart();
+<a name="l00845"></a>00845     Rest = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(Rest,
+<a name="l00846"></a>00846                          SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getType(), 0),
+<a name="l00847"></a>00847                                           <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getStepRecurrence(SE),
+<a name="l00848"></a>00848                                           <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getLoop(),
+<a name="l00849"></a>00849                                           <span class="comment">// FIXME: A->getNoWrapFlags(FlagNW)</span>
+<a name="l00850"></a>00850                                           <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>));
+<a name="l00851"></a>00851   }
+<a name="l00852"></a>00852   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddExpr.html">SCEVAddExpr</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = dyn_cast<SCEVAddExpr>(Base)) {
+<a name="l00853"></a>00853     Base = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getOperand(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->getNumOperands()-1);
+<a name="l00854"></a>00854     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 8></a> NewAddOps(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->op_begin(), <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a>->op_end());
+<a name="l00855"></a>00855     NewAddOps.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>() = Rest;
+<a name="l00856"></a>00856     Rest = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(NewAddOps);
+<a name="l00857"></a>00857     <a class="code" href="ScalarEvolutionExpander_8cpp.html#aeb811bb4a3e1c56acb04c713200c9a42">ExposePointerBase</a>(Base, Rest, SE);
+<a name="l00858"></a>00858   }
+<a name="l00859"></a>00859 }
+<a name="l00860"></a>00860 <span class="comment"></span>
+<a name="l00861"></a>00861 <span class="comment">/// Determine if this is a well-behaved chain of instructions leading back to</span>
+<a name="l00862"></a>00862 <span class="comment">/// the PHI. If so, it may be reused by expanded expressions.</span>
+<a name="l00863"></a>00863 <span class="comment"></span><span class="keywordtype">bool</span> SCEVExpander::isNormalAddRecExprPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IncV,
+<a name="l00864"></a>00864                                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L) {
+<a name="l00865"></a>00865   <span class="keywordflow">if</span> (IncV-><a class="code" href="classllvm_1_1User.html#a2f81e0c1fc6554df7ad2eafabf5fc5a5">getNumOperands</a>() == 0 || isa<PHINode>(IncV) ||
+<a name="l00866"></a>00866       (isa<CastInst>(IncV) && !isa<BitCastInst>(IncV)))
+<a name="l00867"></a>00867     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00868"></a>00868   <span class="comment">// If any of the operands don't dominate the insert position, bail.</span>
+<a name="l00869"></a>00869   <span class="comment">// Addrec operands are always loop-invariant, so this can only happen</span>
+<a name="l00870"></a>00870   <span class="comment">// if there are instructions which haven't been hoisted.</span>
+<a name="l00871"></a>00871   <span class="keywordflow">if</span> (L == IVIncInsertLoop) {
+<a name="l00872"></a>00872     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1Use.html">User::op_iterator</a> OI = IncV-><a class="code" href="classllvm_1_1User.html#a2eeb1c7ed1cfe403f2ae0470e36c07e2">op_begin</a>()+1,
+<a name="l00873"></a>00873            OE = IncV-><a class="code" href="classllvm_1_1User.html#af41f58e730804d10b91fcff39b035f74">op_end</a>(); OI != OE; ++OI)
+<a name="l00874"></a>00874       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OInst = dyn_cast<Instruction>(OI))
+<a name="l00875"></a>00875         <span class="keywordflow">if</span> (!SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(OInst, IVIncInsertPos))
+<a name="l00876"></a>00876           <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00877"></a>00877   }
+<a name="l00878"></a>00878   <span class="comment">// Advance to the next instruction.</span>
+<a name="l00879"></a>00879   IncV = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00880"></a>00880   <span class="keywordflow">if</span> (!IncV)
+<a name="l00881"></a>00881     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00882"></a>00882 
+<a name="l00883"></a>00883   <span class="keywordflow">if</span> (IncV-><a class="code" href="classllvm_1_1Instruction.html#a573063aad4c101462893d0490d867524">mayHaveSideEffects</a>())
+<a name="l00884"></a>00884     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00885"></a>00885 
+<a name="l00886"></a>00886   <span class="keywordflow">if</span> (IncV != PN)
+<a name="l00887"></a>00887     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00888"></a>00888 
+<a name="l00889"></a>00889   <span class="keywordflow">return</span> isNormalAddRecExprPHI(PN, IncV, L);
+<a name="l00890"></a>00890 }
+<a name="l00891"></a>00891 <span class="comment"></span>
+<a name="l00892"></a>00892 <span class="comment">/// getIVIncOperand returns an induction variable increment's induction</span>
+<a name="l00893"></a>00893 <span class="comment">/// variable operand.</span>
+<a name="l00894"></a>00894 <span class="comment">///</span>
+<a name="l00895"></a>00895 <span class="comment">/// If allowScale is set, any type of GEP is allowed as long as the nonIV</span>
+<a name="l00896"></a>00896 <span class="comment">/// operands dominate InsertPos.</span>
+<a name="l00897"></a>00897 <span class="comment">///</span>
+<a name="l00898"></a>00898 <span class="comment">/// If allowScale is not set, ensure that a GEP increment conforms to one of the</span>
+<a name="l00899"></a>00899 <span class="comment">/// simple patterns generated by getAddRecExprPHILiterally and</span>
+<a name="l00900"></a>00900 <span class="comment">/// expandAddtoGEP. If the pattern isn't recognized, return NULL.</span>
+<a name="l00901"></a><a class="code" href="classllvm_1_1SCEVExpander.html#aece02adc8e4cc74296bfe410eabe287b">00901</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1SCEVExpander.html#aece02adc8e4cc74296bfe410eabe287b" title="getIVIncOperand - Return the induction variable increment's IV operand.">SCEVExpander::getIVIncOperand</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IncV,
+<a name="l00902"></a>00902                                            <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InsertPos,
+<a name="l00903"></a>00903                                            <span class="keywordtype">bool</span> allowScale) {
+<a name="l00904"></a>00904   <span class="keywordflow">if</span> (IncV == InsertPos)
+<a name="l00905"></a>00905     <span class="keywordflow">return</span> NULL;
+<a name="l00906"></a>00906 
+<a name="l00907"></a>00907   <span class="keywordflow">switch</span> (IncV-><a class="code" href="classllvm_1_1Instruction.html#a021bb7c9aad6003fe8089f6327356c6c" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>()) {
+<a name="l00908"></a>00908   <span class="keywordflow">default</span>:
+<a name="l00909"></a>00909     <span class="keywordflow">return</span> NULL;
+<a name="l00910"></a>00910   <span class="comment">// Check for a simple Add/Sub or GEP of a loop invariant step.</span>
+<a name="l00911"></a>00911   <span class="keywordflow">case</span> Instruction::Add:
+<a name="l00912"></a>00912   <span class="keywordflow">case</span> Instruction::Sub: {
+<a name="l00913"></a>00913     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OInst = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00914"></a>00914     <span class="keywordflow">if</span> (!OInst || SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(OInst, InsertPos))
+<a name="l00915"></a>00915       <span class="keywordflow">return</span> dyn_cast<Instruction>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00916"></a>00916     <span class="keywordflow">return</span> NULL;
+<a name="l00917"></a>00917   }
+<a name="l00918"></a>00918   <span class="keywordflow">case</span> Instruction::BitCast:
+<a name="l00919"></a>00919     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00920"></a>00920   <span class="keywordflow">case</span> Instruction::GetElementPtr:
+<a name="l00921"></a>00921     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1Use.html">Instruction::op_iterator</a> I = IncV-><a class="code" href="classllvm_1_1User.html#a2eeb1c7ed1cfe403f2ae0470e36c07e2">op_begin</a>()+1, E = IncV-><a class="code" href="classllvm_1_1User.html#af41f58e730804d10b91fcff39b035f74">op_end</a>();
+<a name="l00922"></a>00922          I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00923"></a>00923       <span class="keywordflow">if</span> (isa<Constant>(*I))
+<a name="l00924"></a>00924         <span class="keywordflow">continue</span>;
+<a name="l00925"></a>00925       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OInst = dyn_cast<Instruction>(*I)) {
+<a name="l00926"></a>00926         <span class="keywordflow">if</span> (!SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(OInst, InsertPos))
+<a name="l00927"></a>00927           <span class="keywordflow">return</span> NULL;
+<a name="l00928"></a>00928       }
+<a name="l00929"></a>00929       <span class="keywordflow">if</span> (allowScale) {
+<a name="l00930"></a>00930         <span class="comment">// allow any kind of GEP as long as it can be hoisted.</span>
+<a name="l00931"></a>00931         <span class="keywordflow">continue</span>;
+<a name="l00932"></a>00932       }
+<a name="l00933"></a>00933       <span class="comment">// This must be a pointer addition of constants (pretty), which is already</span>
+<a name="l00934"></a>00934       <span class="comment">// handled, or some number of address-size elements (ugly). Ugly geps</span>
+<a name="l00935"></a>00935       <span class="comment">// have 2 operands. i1* is used by the expander to represent an</span>
+<a name="l00936"></a>00936       <span class="comment">// address-size element.</span>
+<a name="l00937"></a>00937       <span class="keywordflow">if</span> (IncV-><a class="code" href="classllvm_1_1User.html#a2f81e0c1fc6554df7ad2eafabf5fc5a5">getNumOperands</a>() != 2)
+<a name="l00938"></a>00938         <span class="keywordflow">return</span> NULL;
+<a name="l00939"></a>00939       <span class="keywordtype">unsigned</span> AS = cast<PointerType>(IncV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())->getAddressSpace();
+<a name="l00940"></a>00940       <span class="keywordflow">if</span> (IncV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != <a class="code" href="classllvm_1_1Type.html#a2ee2de2efa05f2abb95007892fc559a4">Type::getInt1PtrTy</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#aa89f44fd7549e81b02f2be1be894f098">getContext</a>(), AS)
+<a name="l00941"></a>00941           && IncV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != <a class="code" href="classllvm_1_1Type.html#a7fe9ccd4893f4e2caa826126c09545ea">Type::getInt8PtrTy</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#aa89f44fd7549e81b02f2be1be894f098">getContext</a>(), AS))
+<a name="l00942"></a>00942         <span class="keywordflow">return</span> NULL;
+<a name="l00943"></a>00943       <span class="keywordflow">break</span>;
+<a name="l00944"></a>00944     }
+<a name="l00945"></a>00945     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00946"></a>00946   }
+<a name="l00947"></a>00947 }
+<a name="l00948"></a>00948 <span class="comment"></span>
+<a name="l00949"></a>00949 <span class="comment">/// hoistStep - Attempt to hoist a simple IV increment above InsertPos to make</span>
+<a name="l00950"></a>00950 <span class="comment">/// it available to other uses in this loop. Recursively hoist any operands,</span>
+<a name="l00951"></a>00951 <span class="comment">/// until we reach a value that dominates InsertPos.</span>
+<a name="l00952"></a><a class="code" href="classllvm_1_1SCEVExpander.html#a9093ff54a20ae387e9643cc4ed615214">00952</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SCEVExpander.html#a9093ff54a20ae387e9643cc4ed615214" title="hoistIVInc - Utility for hoisting an IV increment.">SCEVExpander::hoistIVInc</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IncV, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InsertPos) {
+<a name="l00953"></a>00953   <span class="keywordflow">if</span> (SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(IncV, InsertPos))
+<a name="l00954"></a>00954       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00955"></a>00955 
+<a name="l00956"></a>00956   <span class="comment">// InsertPos must itself dominate IncV so that IncV's new position satisfies</span>
+<a name="l00957"></a>00957   <span class="comment">// its existing users.</span>
+<a name="l00958"></a>00958   <span class="keywordflow">if</span> (isa<PHINode>(InsertPos)
+<a name="l00959"></a>00959       || !SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(InsertPos-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>(), IncV-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()))
+<a name="l00960"></a>00960     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00961"></a>00961 
+<a name="l00962"></a>00962   <span class="comment">// Check that the chain of IV operands leading back to Phi can be hoisted.</span>
+<a name="l00963"></a>00963   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Instruction*, 4></a> IVIncs;
+<a name="l00964"></a>00964   <span class="keywordflow">for</span>(;;) {
+<a name="l00965"></a>00965     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Oper = <a class="code" href="classllvm_1_1SCEVExpander.html#aece02adc8e4cc74296bfe410eabe287b" title="getIVIncOperand - Return the induction variable increment's IV operand.">getIVIncOperand</a>(IncV, InsertPos, <span class="comment">/*allowScale*/</span><span class="keyword">true</span>);
+<a name="l00966"></a>00966     <span class="keywordflow">if</span> (!Oper)
+<a name="l00967"></a>00967       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00968"></a>00968     <span class="comment">// IncV is safe to hoist.</span>
+<a name="l00969"></a>00969     IVIncs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(IncV);
+<a name="l00970"></a>00970     IncV = Oper;
+<a name="l00971"></a>00971     <span class="keywordflow">if</span> (SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(IncV, InsertPos))
+<a name="l00972"></a>00972       <span class="keywordflow">break</span>;
+<a name="l00973"></a>00973   }
+<a name="l00974"></a>00974   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Instruction*>::reverse_iterator</a> I = IVIncs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a23aab542398091e1fcfd46b6006d64ac">rbegin</a>(),
+<a name="l00975"></a>00975          E = IVIncs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#ad696953257cf1c4e5bd12d02146e7287">rend</a>(); I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00976"></a>00976     (*I)-><a class="code" href="classllvm_1_1Instruction.html#af67d1f3a518964d80a109bb3d9d5cf1e">moveBefore</a>(InsertPos);
+<a name="l00977"></a>00977   }
+<a name="l00978"></a>00978   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00979"></a>00979 }
+<a name="l00980"></a>00980 <span class="comment"></span>
+<a name="l00981"></a>00981 <span class="comment">/// Determine if this cyclic phi is in a form that would have been generated by</span>
+<a name="l00982"></a>00982 <span class="comment">/// LSR. We don't care if the phi was actually expanded in this pass, as long</span>
+<a name="l00983"></a>00983 <span class="comment">/// as it is in a low-cost form, for example, no implied multiplication. This</span>
+<a name="l00984"></a>00984 <span class="comment">/// should match any patterns generated by getAddRecExprPHILiterally and</span>
+<a name="l00985"></a>00985 <span class="comment">/// expandAddtoGEP.</span>
+<a name="l00986"></a>00986 <span class="comment"></span><span class="keywordtype">bool</span> SCEVExpander::isExpandedAddRecExprPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IncV,
+<a name="l00987"></a>00987                                            <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L) {
+<a name="l00988"></a>00988   <span class="keywordflow">for</span>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOper = IncV;
+<a name="l00989"></a>00989       (IVOper = <a class="code" href="classllvm_1_1SCEVExpander.html#aece02adc8e4cc74296bfe410eabe287b" title="getIVIncOperand - Return the induction variable increment's IV operand.">getIVIncOperand</a>(IVOper, L-><a class="code" href="classllvm_1_1LoopBase.html#a1bc74c76b876ad387293ecde0f21ed45">getLoopPreheader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>(),
+<a name="l00990"></a>00990                                 <span class="comment">/*allowScale=*/</span><span class="keyword">false</span>));) {
+<a name="l00991"></a>00991     <span class="keywordflow">if</span> (IVOper == PN)
+<a name="l00992"></a>00992       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00993"></a>00993   }
+<a name="l00994"></a>00994   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00995"></a>00995 }
+<a name="l00996"></a>00996 <span class="comment"></span>
+<a name="l00997"></a>00997 <span class="comment">/// expandIVInc - Expand an IV increment at Builder's current InsertPos.</span>
+<a name="l00998"></a>00998 <span class="comment">/// Typically this is the LatchBlock terminator or IVIncInsertPos, but we may</span>
+<a name="l00999"></a>00999 <span class="comment">/// need to materialize IV increments elsewhere to handle difficult situations.</span>
+<a name="l01000"></a>01000 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::expandIVInc(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *StepV, <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L,
+<a name="l01001"></a>01001                                  <a class="code" href="classllvm_1_1Type.html">Type</a> *ExpandTy, <a class="code" href="classllvm_1_1Type.html">Type</a> *IntTy,
+<a name="l01002"></a>01002                                  <span class="keywordtype">bool</span> useSubtract) {
+<a name="l01003"></a>01003   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IncV;
+<a name="l01004"></a>01004   <span class="comment">// If the PHI is a pointer, use a GEP, otherwise use an add or sub.</span>
+<a name="l01005"></a>01005   <span class="keywordflow">if</span> (ExpandTy-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>()) {
+<a name="l01006"></a>01006     <a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *GEPPtrTy = cast<PointerType>(ExpandTy);
+<a name="l01007"></a>01007     <span class="comment">// If the step isn't constant, don't use an implicitly scaled GEP, because</span>
+<a name="l01008"></a>01008     <span class="comment">// that would require a multiply inside the loop.</span>
+<a name="l01009"></a>01009     <span class="keywordflow">if</span> (!isa<ConstantInt>(StepV))
+<a name="l01010"></a>01010       GEPPtrTy = <a class="code" href="classllvm_1_1PointerType.html#a050a395d1656e546679d8b144d951bb2">PointerType::get</a>(<a class="code" href="classllvm_1_1Type.html#aa75984a442f2379de0c66018201fa628">Type::getInt1Ty</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#aa89f44fd7549e81b02f2be1be894f098">getContext</a>()),
+<a name="l01011"></a>01011                                   GEPPtrTy-><a class="code" href="classllvm_1_1PointerType.html#a921061a57ec3cfbaf6422f09f7d79fc3" title="Return the address space of the Pointer type.">getAddressSpace</a>());
+<a name="l01012"></a>01012     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<span class="keyword">const</span> StepArray[1] = { SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(StepV) };
+<a name="l01013"></a>01013     IncV = expandAddToGEP(StepArray, StepArray+1, GEPPtrTy, IntTy, PN);
+<a name="l01014"></a>01014     <span class="keywordflow">if</span> (IncV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l01015"></a>01015       IncV = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a87b363b9dad9f5040ea7e29ea9e60ff5">CreateBitCast</a>(IncV, PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01016"></a>01016       rememberInstruction(IncV);
+<a name="l01017"></a>01017     }
+<a name="l01018"></a>01018   } <span class="keywordflow">else</span> {
+<a name="l01019"></a>01019     IncV = useSubtract ?
+<a name="l01020"></a>01020       Builder.<a class="code" href="classllvm_1_1IRBuilder.html#afa1cb82e021c7f516f65d40162fe6c53">CreateSub</a>(PN, StepV, <a class="code" href="classllvm_1_1Twine.html">Twine</a>(IVName) + <span class="stringliteral">".iv.next"</span>) :
+<a name="l01021"></a>01021       Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a112f87f5844b5d94c07940f3d47f1e99">CreateAdd</a>(PN, StepV, <a class="code" href="classllvm_1_1Twine.html">Twine</a>(IVName) + <span class="stringliteral">".iv.next"</span>);
+<a name="l01022"></a>01022     rememberInstruction(IncV);
+<a name="l01023"></a>01023   }
+<a name="l01024"></a>01024   <span class="keywordflow">return</span> IncV;
+<a name="l01025"></a>01025 }
+<a name="l01026"></a>01026 <span class="comment"></span>
+<a name="l01027"></a>01027 <span class="comment">/// getAddRecExprPHILiterally - Helper for expandAddRecExprLiterally. Expand</span>
+<a name="l01028"></a>01028 <span class="comment">/// the base addrec, which is the addrec without any non-loop-dominating</span>
+<a name="l01029"></a>01029 <span class="comment">/// values, and return the PHI.</span>
+<a name="l01030"></a>01030 <span class="comment"></span><a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *
+<a name="l01031"></a>01031 SCEVExpander::getAddRecExprPHILiterally(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *Normalized,
+<a name="l01032"></a>01032                                         <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L,
+<a name="l01033"></a>01033                                         <a class="code" href="classllvm_1_1Type.html">Type</a> *ExpandTy,
+<a name="l01034"></a>01034                                         <a class="code" href="classllvm_1_1Type.html">Type</a> *IntTy) {
+<a name="l01035"></a>01035   assert((!IVIncInsertLoop||IVIncInsertPos) && <span class="stringliteral">"Uninitialized insert position"</span>);
+<a name="l01036"></a>01036 
+<a name="l01037"></a>01037   <span class="comment">// Reuse a previously-inserted PHI, if present.</span>
+<a name="l01038"></a>01038   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *LatchBlock = L-><a class="code" href="classllvm_1_1LoopBase.html#a8917d359fc92f25eb0117386588c6f1c">getLoopLatch</a>();
+<a name="l01039"></a>01039   <span class="keywordflow">if</span> (LatchBlock) {
+<a name="l01040"></a>01040     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> I = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l01041"></a>01041          <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1PHINode.html">PHINode</a>>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>); ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l01042"></a>01042       <span class="keywordflow">if</span> (!SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ae9623974341419bfd1d185cfdc65bedd">isSCEVable</a>(PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) ||
+<a name="l01043"></a>01043           (SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) !=
+<a name="l01044"></a>01044            SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(Normalized-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>())) ||
+<a name="l01045"></a>01045           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(PN) != Normalized)
+<a name="l01046"></a>01046         <span class="keywordflow">continue</span>;
+<a name="l01047"></a>01047 
+<a name="l01048"></a>01048       <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IncV =
+<a name="l01049"></a>01049         cast<Instruction>(PN-><a class="code" href="classllvm_1_1PHINode.html#a21960167f529265a1cb02ac1e8ad10f6">getIncomingValueForBlock</a>(LatchBlock));
+<a name="l01050"></a>01050 
+<a name="l01051"></a>01051       <span class="keywordflow">if</span> (LSRMode) {
+<a name="l01052"></a>01052         <span class="keywordflow">if</span> (!isExpandedAddRecExprPHI(PN, IncV, L))
+<a name="l01053"></a>01053           <span class="keywordflow">continue</span>;
+<a name="l01054"></a>01054         <span class="keywordflow">if</span> (L == IVIncInsertLoop && !<a class="code" href="classllvm_1_1SCEVExpander.html#a9093ff54a20ae387e9643cc4ed615214" title="hoistIVInc - Utility for hoisting an IV increment.">hoistIVInc</a>(IncV, IVIncInsertPos))
+<a name="l01055"></a>01055           <span class="keywordflow">continue</span>;
+<a name="l01056"></a>01056       }
+<a name="l01057"></a>01057       <span class="keywordflow">else</span> {
+<a name="l01058"></a>01058         <span class="keywordflow">if</span> (!isNormalAddRecExprPHI(PN, IncV, L))
+<a name="l01059"></a>01059           <span class="keywordflow">continue</span>;
+<a name="l01060"></a>01060         <span class="keywordflow">if</span> (L == IVIncInsertLoop)
+<a name="l01061"></a>01061           <span class="keywordflow">do</span> {
+<a name="l01062"></a>01062             <span class="keywordflow">if</span> (SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(IncV, IVIncInsertPos))
+<a name="l01063"></a>01063               <span class="keywordflow">break</span>;
+<a name="l01064"></a>01064             <span class="comment">// Make sure the increment is where we want it. But don't move it</span>
+<a name="l01065"></a>01065             <span class="comment">// down past a potential existing post-inc user.</span>
+<a name="l01066"></a>01066             IncV-><a class="code" href="classllvm_1_1Instruction.html#af67d1f3a518964d80a109bb3d9d5cf1e">moveBefore</a>(IVIncInsertPos);
+<a name="l01067"></a>01067             IVIncInsertPos = IncV;
+<a name="l01068"></a>01068             IncV = cast<Instruction>(IncV-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01069"></a>01069           } <span class="keywordflow">while</span> (IncV != PN);
+<a name="l01070"></a>01070       }
+<a name="l01071"></a>01071       <span class="comment">// Ok, the add recurrence looks usable.</span>
+<a name="l01072"></a>01072       <span class="comment">// Remember this PHI, even in post-inc mode.</span>
+<a name="l01073"></a>01073       InsertedValues.insert(PN);
+<a name="l01074"></a>01074       <span class="comment">// Remember the increment.</span>
+<a name="l01075"></a>01075       rememberInstruction(IncV);
+<a name="l01076"></a>01076       <span class="keywordflow">return</span> PN;
+<a name="l01077"></a>01077     }
+<a name="l01078"></a>01078   }
+<a name="l01079"></a>01079 
+<a name="l01080"></a>01080   <span class="comment">// Save the original insertion point so we can restore it when we're done.</span>
+<a name="l01081"></a>01081   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l01082"></a>01082   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01083"></a>01083 
+<a name="l01084"></a>01084   <span class="comment">// Another AddRec may need to be recursively expanded below. For example, if</span>
+<a name="l01085"></a>01085   <span class="comment">// this AddRec is quadratic, the StepV may itself be an AddRec in this</span>
+<a name="l01086"></a>01086   <span class="comment">// loop. Remove this loop from the PostIncLoops set before expanding such</span>
+<a name="l01087"></a>01087   <span class="comment">// AddRecs. Otherwise, we cannot find a valid position for the step</span>
+<a name="l01088"></a>01088   <span class="comment">// (i.e. StepV can never dominate its loop header).  Ideally, we could do</span>
+<a name="l01089"></a>01089   <span class="comment">// SavedIncLoops.swap(PostIncLoops), but we generally have a single element,</span>
+<a name="l01090"></a>01090   <span class="comment">// so it's not worth implementing SmallPtrSet::swap.</span>
+<a name="l01091"></a>01091   <a class="code" href="classllvm_1_1SmallPtrSet.html">PostIncLoopSet</a> SavedPostIncLoops = PostIncLoops;
+<a name="l01092"></a>01092   PostIncLoops.<a class="code" href="classllvm_1_1SmallPtrSetImpl.html#aa72472422d95c7052d62432ec279ff85">clear</a>();
+<a name="l01093"></a>01093 
+<a name="l01094"></a>01094   <span class="comment">// Expand code for the start value.</span>
+<a name="l01095"></a>01095   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *StartV = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a0d53a749bd858b270d322b34b8d7e1e5">getStart</a>(), ExpandTy,
+<a name="l01096"></a>01096                                 L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>());
+<a name="l01097"></a>01097 
+<a name="l01098"></a>01098   <span class="comment">// StartV must be hoisted into L's preheader to dominate the new phi.</span>
+<a name="l01099"></a>01099   assert(!isa<Instruction>(StartV) ||
+<a name="l01100"></a>01100          SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#aa094180f7ac0ef9d4b8e1c78f850edd8">properlyDominates</a>(cast<Instruction>(StartV)->getParent(),
+<a name="l01101"></a>01101                                   L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()));
+<a name="l01102"></a>01102 
+<a name="l01103"></a>01103   <span class="comment">// Expand code for the step value. Do this before creating the PHI so that PHI</span>
+<a name="l01104"></a>01104   <span class="comment">// reuse code doesn't see an incomplete PHI.</span>
+<a name="l01105"></a>01105   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Step = Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a443e9130cd9f3e3baaa1b566e6aa5060">getStepRecurrence</a>(SE);
+<a name="l01106"></a>01106   <span class="comment">// If the stride is negative, insert a sub instead of an add for the increment</span>
+<a name="l01107"></a>01107   <span class="comment">// (unless it's a constant, because subtracts of constants are canonicalized</span>
+<a name="l01108"></a>01108   <span class="comment">// to adds).</span>
+<a name="l01109"></a>01109   <span class="keywordtype">bool</span> useSubtract = !ExpandTy-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() && Step-><a class="code" href="classllvm_1_1SCEV.html#a004121efb296aedb4f06091d92b89442">isNonConstantNegative</a>();
+<a name="l01110"></a>01110   <span class="keywordflow">if</span> (useSubtract)
+<a name="l01111"></a>01111     Step = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#afb58ec6af347a7917618ff9c01d729bf">getNegativeSCEV</a>(Step);
+<a name="l01112"></a>01112   <span class="comment">// Expand the step somewhere that dominates the loop header.</span>
+<a name="l01113"></a>01113   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *StepV = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(Step, IntTy, L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>());
+<a name="l01114"></a>01114 
+<a name="l01115"></a>01115   <span class="comment">// Create the PHI.</span>
+<a name="l01116"></a>01116   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Header = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>();
+<a name="l01117"></a>01117   Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(Header, Header->begin());
+<a name="l01118"></a>01118   <a class="code" href="classllvm_1_1PredIterator.html">pred_iterator</a> HPB = <a class="code" href="namespacellvm.html#a7e108932dc3da5294aed99a353aac9c4">pred_begin</a>(Header), HPE = <a class="code" href="namespacellvm.html#a5eeaf08e96168c2cac8960f87f0ef360">pred_end</a>(Header);
+<a name="l01119"></a>01119   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a2c0d745d9907486632823c56c5a23e86">CreatePHI</a>(ExpandTy, std::distance(HPB, HPE),
+<a name="l01120"></a>01120                                   <a class="code" href="classllvm_1_1Twine.html">Twine</a>(IVName) + <span class="stringliteral">".iv"</span>);
+<a name="l01121"></a>01121   rememberInstruction(PN);
+<a name="l01122"></a>01122 
+<a name="l01123"></a>01123   <span class="comment">// Create the step instructions and populate the PHI.</span>
+<a name="l01124"></a>01124   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1PredIterator.html">pred_iterator</a> HPI = HPB; HPI != HPE; ++HPI) {
+<a name="l01125"></a>01125     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Pred = *HPI;
+<a name="l01126"></a>01126 
+<a name="l01127"></a>01127     <span class="comment">// Add a start value.</span>
+<a name="l01128"></a>01128     <span class="keywordflow">if</span> (!L-><a class="code" href="classllvm_1_1LoopBase.html#a92a38e2e3412bde7fd2b71db212b61aa">contains</a>(Pred)) {
+<a name="l01129"></a>01129       PN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(StartV, Pred);
+<a name="l01130"></a>01130       <span class="keywordflow">continue</span>;
+<a name="l01131"></a>01131     }
+<a name="l01132"></a>01132 
+<a name="l01133"></a>01133     <span class="comment">// Create a step value and add it to the PHI.</span>
+<a name="l01134"></a>01134     <span class="comment">// If IVIncInsertLoop is non-null and equal to the addrec's loop, insert the</span>
+<a name="l01135"></a>01135     <span class="comment">// instructions at IVIncInsertPos.</span>
+<a name="l01136"></a>01136     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InsertPos = L == IVIncInsertLoop ?
+<a name="l01137"></a>01137       IVIncInsertPos : Pred-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>();
+<a name="l01138"></a>01138     Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(InsertPos);
+<a name="l01139"></a>01139     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IncV = expandIVInc(PN, StepV, L, ExpandTy, IntTy, useSubtract);
+<a name="l01140"></a>01140 
+<a name="l01141"></a>01141     PN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(IncV, Pred);
+<a name="l01142"></a>01142   }
+<a name="l01143"></a>01143 
+<a name="l01144"></a>01144   <span class="comment">// Restore the original insert point.</span>
+<a name="l01145"></a>01145   <span class="keywordflow">if</span> (SaveInsertBB)
+<a name="l01146"></a>01146     restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l01147"></a>01147 
+<a name="l01148"></a>01148   <span class="comment">// After expanding subexpressions, restore the PostIncLoops set so the caller</span>
+<a name="l01149"></a>01149   <span class="comment">// can ensure that IVIncrement dominates the current uses.</span>
+<a name="l01150"></a>01150   PostIncLoops = SavedPostIncLoops;
+<a name="l01151"></a>01151 
+<a name="l01152"></a>01152   <span class="comment">// Remember this PHI, even in post-inc mode.</span>
+<a name="l01153"></a>01153   InsertedValues.insert(PN);
+<a name="l01154"></a>01154 
+<a name="l01155"></a>01155   <span class="keywordflow">return</span> PN;
+<a name="l01156"></a>01156 }
+<a name="l01157"></a>01157 
+<a name="l01158"></a>01158 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::expandAddRecExprLiterally(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *S) {
+<a name="l01159"></a>01159   <a class="code" href="classllvm_1_1Type.html">Type</a> *STy = S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>();
+<a name="l01160"></a>01160   <a class="code" href="classllvm_1_1Type.html">Type</a> *IntTy = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(STy);
+<a name="l01161"></a>01161   <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>();
+<a name="l01162"></a>01162 
+<a name="l01163"></a>01163   <span class="comment">// Determine a normalized form of this expression, which is the expression</span>
+<a name="l01164"></a>01164   <span class="comment">// before any post-inc adjustment is made.</span>
+<a name="l01165"></a>01165   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *Normalized = S;
+<a name="l01166"></a>01166   <span class="keywordflow">if</span> (PostIncLoops.<a class="code" href="classllvm_1_1SmallPtrSet.html#a2ced6343b8ad006a757059554bbf9f37" title="count - Return true if the specified pointer is in the set.">count</a>(L)) {
+<a name="l01167"></a>01167     <a class="code" href="classllvm_1_1SmallPtrSet.html">PostIncLoopSet</a> Loops;
+<a name="l01168"></a>01168     Loops.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(L);
+<a name="l01169"></a>01169     Normalized =
+<a name="l01170"></a>01170       cast<SCEVAddRecExpr>(<a class="code" href="namespacellvm.html#adfac6898b7e6f186616ff5c337670296">TransformForPostIncUse</a>(<a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64aeb131ce4dfb8eeef7197e6b0afd145d4" title="Normalize - Normalize according to the given loops.">Normalize</a>, S, 0, 0,
+<a name="l01171"></a>01171                                                   Loops, SE, *SE.DT));
+<a name="l01172"></a>01172   }
+<a name="l01173"></a>01173 
+<a name="l01174"></a>01174   <span class="comment">// Strip off any non-loop-dominating component from the addrec start.</span>
+<a name="l01175"></a>01175   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Start = Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a0d53a749bd858b270d322b34b8d7e1e5">getStart</a>();
+<a name="l01176"></a>01176   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *PostLoopOffset = 0;
+<a name="l01177"></a>01177   <span class="keywordflow">if</span> (!SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ae0d036af111b8aafe90db0771b8e9ce3">properlyDominates</a>(Start, L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>())) {
+<a name="l01178"></a>01178     PostLoopOffset = Start;
+<a name="l01179"></a>01179     Start = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Normalized-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>(), 0);
+<a name="l01180"></a>01180     Normalized = cast<SCEVAddRecExpr>(
+<a name="l01181"></a>01181       SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(Start, Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a443e9130cd9f3e3baaa1b566e6aa5060">getStepRecurrence</a>(SE),
+<a name="l01182"></a>01182                        Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>(),
+<a name="l01183"></a>01183                        <span class="comment">// FIXME: Normalized->getNoWrapFlags(FlagNW)</span>
+<a name="l01184"></a>01184                        <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>));
+<a name="l01185"></a>01185   }
+<a name="l01186"></a>01186 
+<a name="l01187"></a>01187   <span class="comment">// Strip off any non-loop-dominating component from the addrec step.</span>
+<a name="l01188"></a>01188   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Step = Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a443e9130cd9f3e3baaa1b566e6aa5060">getStepRecurrence</a>(SE);
+<a name="l01189"></a>01189   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *PostLoopScale = 0;
+<a name="l01190"></a>01190   <span class="keywordflow">if</span> (!SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ac7ccf429f5c75676bdacadf3c9d1c7fa">dominates</a>(Step, L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>())) {
+<a name="l01191"></a>01191     PostLoopScale = Step;
+<a name="l01192"></a>01192     Step = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Normalized-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>(), 1);
+<a name="l01193"></a>01193     Normalized =
+<a name="l01194"></a>01194       cast<SCEVAddRecExpr>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(Start, Step,
+<a name="l01195"></a>01195                                             Normalized-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>(),
+<a name="l01196"></a>01196                                             <span class="comment">// FIXME: Normalized</span>
+<a name="l01197"></a>01197                                             <span class="comment">// ->getNoWrapFlags(FlagNW)</span>
+<a name="l01198"></a>01198                                             <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>));
+<a name="l01199"></a>01199   }
+<a name="l01200"></a>01200 
+<a name="l01201"></a>01201   <span class="comment">// Expand the core addrec. If we need post-loop scaling, force it to</span>
+<a name="l01202"></a>01202   <span class="comment">// expand to an integer type to avoid the need for additional casting.</span>
+<a name="l01203"></a>01203   <a class="code" href="classllvm_1_1Type.html">Type</a> *ExpandTy = PostLoopScale ? IntTy : STy;
+<a name="l01204"></a>01204   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = getAddRecExprPHILiterally(Normalized, L, ExpandTy, IntTy);
+<a name="l01205"></a>01205 
+<a name="l01206"></a>01206   <span class="comment">// Accommodate post-inc mode, if necessary.</span>
+<a name="l01207"></a>01207   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Result;
+<a name="l01208"></a>01208   <span class="keywordflow">if</span> (!PostIncLoops.<a class="code" href="classllvm_1_1SmallPtrSet.html#a2ced6343b8ad006a757059554bbf9f37" title="count - Return true if the specified pointer is in the set.">count</a>(L))
+<a name="l01209"></a>01209     Result = PN;
+<a name="l01210"></a>01210   <span class="keywordflow">else</span> {
+<a name="l01211"></a>01211     <span class="comment">// In PostInc mode, use the post-incremented value.</span>
+<a name="l01212"></a>01212     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *LatchBlock = L-><a class="code" href="classllvm_1_1LoopBase.html#a8917d359fc92f25eb0117386588c6f1c">getLoopLatch</a>();
+<a name="l01213"></a>01213     assert(LatchBlock && <span class="stringliteral">"PostInc mode requires a unique loop latch!"</span>);
+<a name="l01214"></a>01214     Result = PN-><a class="code" href="classllvm_1_1PHINode.html#a21960167f529265a1cb02ac1e8ad10f6">getIncomingValueForBlock</a>(LatchBlock);
+<a name="l01215"></a>01215 
+<a name="l01216"></a>01216     <span class="comment">// For an expansion to use the postinc form, the client must call</span>
+<a name="l01217"></a>01217     <span class="comment">// expandCodeFor with an InsertPoint that is either outside the PostIncLoop</span>
+<a name="l01218"></a>01218     <span class="comment">// or dominated by IVIncInsertPos.</span>
+<a name="l01219"></a>01219     <span class="keywordflow">if</span> (isa<Instruction>(Result)
+<a name="l01220"></a>01220         && !SE.DT-><a class="code" href="classllvm_1_1DominatorTree.html#a6fe9272dc67fe2ff4cafc33b895c4a6c">dominates</a>(cast<Instruction>(Result),
+<a name="l01221"></a>01221                              Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>())) {
+<a name="l01222"></a>01222       <span class="comment">// The induction variable's postinc expansion does not dominate this use.</span>
+<a name="l01223"></a>01223       <span class="comment">// IVUsers tries to prevent this case, so it is rare. However, it can</span>
+<a name="l01224"></a>01224       <span class="comment">// happen when an IVUser outside the loop is not dominated by the latch</span>
+<a name="l01225"></a>01225       <span class="comment">// block. Adjusting IVIncInsertPos before expansion begins cannot handle</span>
+<a name="l01226"></a>01226       <span class="comment">// all cases. Consider a phi outide whose operand is replaced during</span>
+<a name="l01227"></a>01227       <span class="comment">// expansion with the value of the postinc user. Without fundamentally</span>
+<a name="l01228"></a>01228       <span class="comment">// changing the way postinc users are tracked, the only remedy is</span>
+<a name="l01229"></a>01229       <span class="comment">// inserting an extra IV increment. StepV might fold into PostLoopOffset,</span>
+<a name="l01230"></a>01230       <span class="comment">// but hopefully expandCodeFor handles that.</span>
+<a name="l01231"></a>01231       <span class="keywordtype">bool</span> useSubtract =
+<a name="l01232"></a>01232         !ExpandTy-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() && Step-><a class="code" href="classllvm_1_1SCEV.html#a004121efb296aedb4f06091d92b89442">isNonConstantNegative</a>();
+<a name="l01233"></a>01233       <span class="keywordflow">if</span> (useSubtract)
+<a name="l01234"></a>01234         Step = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#afb58ec6af347a7917618ff9c01d729bf">getNegativeSCEV</a>(Step);
+<a name="l01235"></a>01235       <span class="comment">// Expand the step somewhere that dominates the loop header.</span>
+<a name="l01236"></a>01236       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l01237"></a>01237       <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01238"></a>01238       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *StepV = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(Step, IntTy, L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>());
+<a name="l01239"></a>01239       <span class="comment">// Restore the insertion point to the place where the caller has</span>
+<a name="l01240"></a>01240       <span class="comment">// determined dominates all uses.</span>
+<a name="l01241"></a>01241       restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l01242"></a>01242       Result = expandIVInc(PN, StepV, L, ExpandTy, IntTy, useSubtract);
+<a name="l01243"></a>01243     }
+<a name="l01244"></a>01244   }
+<a name="l01245"></a>01245 
+<a name="l01246"></a>01246   <span class="comment">// Re-apply any non-loop-dominating scale.</span>
+<a name="l01247"></a>01247   <span class="keywordflow">if</span> (PostLoopScale) {
+<a name="l01248"></a>01248     Result = InsertNoopCastOfTo(Result, IntTy);
+<a name="l01249"></a>01249     Result = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a94c18bf85a5105e0a22fba23b0bedafa">CreateMul</a>(Result,
+<a name="l01250"></a>01250                                <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(PostLoopScale, IntTy));
+<a name="l01251"></a>01251     rememberInstruction(Result);
+<a name="l01252"></a>01252   }
+<a name="l01253"></a>01253 
+<a name="l01254"></a>01254   <span class="comment">// Re-apply any non-loop-dominating offset.</span>
+<a name="l01255"></a>01255   <span class="keywordflow">if</span> (PostLoopOffset) {
+<a name="l01256"></a>01256     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy = dyn_cast<PointerType>(ExpandTy)) {
+<a name="l01257"></a>01257       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<span class="keyword">const</span> OffsetArray[1] = { PostLoopOffset };
+<a name="l01258"></a>01258       Result = expandAddToGEP(OffsetArray, OffsetArray+1, PTy, IntTy, Result);
+<a name="l01259"></a>01259     } <span class="keywordflow">else</span> {
+<a name="l01260"></a>01260       Result = InsertNoopCastOfTo(Result, IntTy);
+<a name="l01261"></a>01261       Result = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a112f87f5844b5d94c07940f3d47f1e99">CreateAdd</a>(Result,
+<a name="l01262"></a>01262                                  <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(PostLoopOffset, IntTy));
+<a name="l01263"></a>01263       rememberInstruction(Result);
+<a name="l01264"></a>01264     }
+<a name="l01265"></a>01265   }
+<a name="l01266"></a>01266 
+<a name="l01267"></a>01267   <span class="keywordflow">return</span> Result;
+<a name="l01268"></a>01268 }
+<a name="l01269"></a>01269 
+<a name="l01270"></a>01270 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitAddRecExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *S) {
+<a name="l01271"></a>01271   <span class="keywordflow">if</span> (!CanonicalMode) <span class="keywordflow">return</span> expandAddRecExprLiterally(S);
+<a name="l01272"></a>01272 
+<a name="l01273"></a>01273   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>());
+<a name="l01274"></a>01274   <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>();
+<a name="l01275"></a>01275 
+<a name="l01276"></a>01276   <span class="comment">// First check for an existing canonical IV in a suitable type.</span>
+<a name="l01277"></a>01277   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *CanonicalIV = 0;
+<a name="l01278"></a>01278   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = L-><a class="code" href="classllvm_1_1Loop.html#a72bbf45d2e00971f56bf8cfe4e1df01c">getCanonicalInductionVariable</a>())
+<a name="l01279"></a>01279     <span class="keywordflow">if</span> (SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) >= SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(Ty))
+<a name="l01280"></a>01280       CanonicalIV = PN;
+<a name="l01281"></a>01281 
+<a name="l01282"></a>01282   <span class="comment">// Rewrite an AddRec in terms of the canonical induction variable, if</span>
+<a name="l01283"></a>01283   <span class="comment">// its type is more narrow.</span>
+<a name="l01284"></a>01284   <span class="keywordflow">if</span> (CanonicalIV &&
+<a name="l01285"></a>01285       SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(CanonicalIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) >
+<a name="l01286"></a>01286       SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(Ty)) {
+<a name="l01287"></a>01287     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewOps(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>());
+<a name="l01288"></a>01288     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>(); i != e; ++i)
+<a name="l01289"></a>01289       NewOps[i] = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#aa35959e3f6bea8e35cffcfd8659e3156">getAnyExtendExpr</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a107163b3c781d2b0137bf2021e7dc984">op_begin</a>()[i], CanonicalIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01290"></a>01290     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = expand(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(NewOps, S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>(),
+<a name="l01291"></a>01291                                        <span class="comment">// FIXME: S->getNoWrapFlags(FlagNW)</span>
+<a name="l01292"></a>01292                                        <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>));
+<a name="l01293"></a>01293     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l01294"></a>01294     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01295"></a>01295     <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> NewInsertPt =
+<a name="l01296"></a>01296       <a class="code" href="namespacellvm.html#aa1704159f75e6eacd595962ea6d93ffe">llvm::next</a>(<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a>(cast<Instruction>(V)));
+<a name="l01297"></a>01297     <span class="keywordflow">while</span> (isa<PHINode>(NewInsertPt) || isa<DbgInfoIntrinsic>(NewInsertPt) ||
+<a name="l01298"></a>01298            isa<LandingPadInst>(NewInsertPt))
+<a name="l01299"></a>01299       ++NewInsertPt;
+<a name="l01300"></a>01300     V = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a8344b86f018c5c78a986fb97e1eaf20b">getTruncateExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(V), Ty), 0,
+<a name="l01301"></a>01301                       NewInsertPt);
+<a name="l01302"></a>01302     restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l01303"></a>01303     <span class="keywordflow">return</span> V;
+<a name="l01304"></a>01304   }
+<a name="l01305"></a>01305 
+<a name="l01306"></a>01306   <span class="comment">// {X,+,F} --> X + {0,+,F}</span>
+<a name="l01307"></a>01307   <span class="keywordflow">if</span> (!S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a0d53a749bd858b270d322b34b8d7e1e5">getStart</a>()-><a class="code" href="classllvm_1_1SCEV.html#a3f76d2fd4788225548dc36ef9e417030">isZero</a>()) {
+<a name="l01308"></a>01308     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const SCEV *, 4></a> NewOps(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a107163b3c781d2b0137bf2021e7dc984">op_begin</a>(), S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a5877c3a289aa71796140f54b73f654f7">op_end</a>());
+<a name="l01309"></a>01309     NewOps[0] = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0);
+<a name="l01310"></a>01310     <span class="comment">// FIXME: can use S->getNoWrapFlags()</span>
+<a name="l01311"></a>01311     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Rest = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(NewOps, L, <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>);
+<a name="l01312"></a>01312 
+<a name="l01313"></a>01313     <span class="comment">// Turn things like ptrtoint+arithmetic+inttoptr into GEP. See the</span>
+<a name="l01314"></a>01314     <span class="comment">// comments on expandAddToGEP for details.</span>
+<a name="l01315"></a>01315     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *Base = S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a0d53a749bd858b270d322b34b8d7e1e5">getStart</a>();
+<a name="l01316"></a>01316     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *RestArray[1] = { Rest };
+<a name="l01317"></a>01317     <span class="comment">// Dig into the expression to find the pointer base for a GEP.</span>
+<a name="l01318"></a>01318     <a class="code" href="ScalarEvolutionExpander_8cpp.html#aeb811bb4a3e1c56acb04c713200c9a42">ExposePointerBase</a>(Base, RestArray[0], SE);
+<a name="l01319"></a>01319     <span class="comment">// If we found a pointer, expand the AddRec with a GEP.</span>
+<a name="l01320"></a>01320     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy = dyn_cast<PointerType>(Base-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>())) {
+<a name="l01321"></a>01321       <span class="comment">// Make sure the Base isn't something exotic, such as a multiplied</span>
+<a name="l01322"></a>01322       <span class="comment">// or divided pointer value. In those cases, the result type isn't</span>
+<a name="l01323"></a>01323       <span class="comment">// actually a pointer type.</span>
+<a name="l01324"></a>01324       <span class="keywordflow">if</span> (!isa<SCEVMulExpr>(Base) && !isa<SCEVUDivExpr>(Base)) {
+<a name="l01325"></a>01325         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *StartV = expand(Base);
+<a name="l01326"></a>01326         assert(StartV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == PTy && <span class="stringliteral">"Pointer type mismatch for GEP!"</span>);
+<a name="l01327"></a>01327         <span class="keywordflow">return</span> expandAddToGEP(RestArray, RestArray+1, PTy, Ty, StartV);
+<a name="l01328"></a>01328       }
+<a name="l01329"></a>01329     }
+<a name="l01330"></a>01330 
+<a name="l01331"></a>01331     <span class="comment">// Just do a normal add. Pre-expand the operands to suppress folding.</span>
+<a name="l01332"></a>01332     <span class="keywordflow">return</span> expand(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a23541ecba66207184eaf2279a70c5b12">getAddExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(expand(S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a0d53a749bd858b270d322b34b8d7e1e5">getStart</a>())),
+<a name="l01333"></a>01333                                 SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(expand(Rest))));
+<a name="l01334"></a>01334   }
+<a name="l01335"></a>01335 
+<a name="l01336"></a>01336   <span class="comment">// If we don't yet have a canonical IV, create one.</span>
+<a name="l01337"></a>01337   <span class="keywordflow">if</span> (!CanonicalIV) {
+<a name="l01338"></a>01338     <span class="comment">// Create and insert the PHI node for the induction variable in the</span>
+<a name="l01339"></a>01339     <span class="comment">// specified loop.</span>
+<a name="l01340"></a>01340     <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Header = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>();
+<a name="l01341"></a>01341     <a class="code" href="classllvm_1_1PredIterator.html">pred_iterator</a> HPB = <a class="code" href="namespacellvm.html#a7e108932dc3da5294aed99a353aac9c4">pred_begin</a>(Header), HPE = <a class="code" href="namespacellvm.html#a5eeaf08e96168c2cac8960f87f0ef360">pred_end</a>(Header);
+<a name="l01342"></a>01342     CanonicalIV = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(Ty, std::distance(HPB, HPE), <span class="stringliteral">"indvar"</span>,
+<a name="l01343"></a>01343                                   Header-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>());
+<a name="l01344"></a>01344     rememberInstruction(CanonicalIV);
+<a name="l01345"></a>01345 
+<a name="l01346"></a>01346     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *One = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Ty, 1);
+<a name="l01347"></a>01347     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1PredIterator.html">pred_iterator</a> HPI = HPB; HPI != HPE; ++HPI) {
+<a name="l01348"></a>01348       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *HP = *HPI;
+<a name="l01349"></a>01349       <span class="keywordflow">if</span> (L-><a class="code" href="classllvm_1_1LoopBase.html#a92a38e2e3412bde7fd2b71db212b61aa">contains</a>(HP)) {
+<a name="l01350"></a>01350         <span class="comment">// Insert a unit add instruction right before the terminator</span>
+<a name="l01351"></a>01351         <span class="comment">// corresponding to the back-edge.</span>
+<a name="l01352"></a>01352         <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Add = BinaryOperator::CreateAdd(CanonicalIV, One,
+<a name="l01353"></a>01353                                                      <span class="stringliteral">"indvar.next"</span>,
+<a name="l01354"></a>01354                                                      HP-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>());
+<a name="l01355"></a>01355         Add-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(HP-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>()-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l01356"></a>01356         rememberInstruction(Add);
+<a name="l01357"></a>01357         CanonicalIV-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(Add, HP);
+<a name="l01358"></a>01358       } <span class="keywordflow">else</span> {
+<a name="l01359"></a>01359         CanonicalIV-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(<a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(Ty), HP);
+<a name="l01360"></a>01360       }
+<a name="l01361"></a>01361     }
+<a name="l01362"></a>01362   }
+<a name="l01363"></a>01363 
+<a name="l01364"></a>01364   <span class="comment">// {0,+,1} --> Insert a canonical induction variable into the loop!</span>
+<a name="l01365"></a>01365   <span class="keywordflow">if</span> (S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a88f514461ddb0af0fc59ac4639f644bc">isAffine</a>() && S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(1)-><a class="code" href="classllvm_1_1SCEV.html#a3935a9de0ebdf3dc625cfb28e35bd009">isOne</a>()) {
+<a name="l01366"></a>01366     assert(Ty == SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(CanonicalIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) &&
+<a name="l01367"></a>01367            <span class="stringliteral">"IVs with types different from the canonical IV should "</span>
+<a name="l01368"></a>01368            <span class="stringliteral">"already have been handled!"</span>);
+<a name="l01369"></a>01369     <span class="keywordflow">return</span> CanonicalIV;
+<a name="l01370"></a>01370   }
+<a name="l01371"></a>01371 
+<a name="l01372"></a>01372   <span class="comment">// {0,+,F} --> {0,+,1} * F</span>
+<a name="l01373"></a>01373 
+<a name="l01374"></a>01374   <span class="comment">// If this is a simple linear addrec, emit it now as a special case.</span>
+<a name="l01375"></a>01375   <span class="keywordflow">if</span> (S-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a88f514461ddb0af0fc59ac4639f644bc">isAffine</a>())    <span class="comment">// {0,+,F} --> i*F</span>
+<a name="l01376"></a>01376     <span class="keywordflow">return</span>
+<a name="l01377"></a>01377       expand(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a426976cfd81411f49f7e5fe77ee4e3a4">getTruncateOrNoop</a>(
+<a name="l01378"></a>01378         SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad5829d76e14852080c205f8b94d830f1">getMulExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(CanonicalIV),
+<a name="l01379"></a>01379                       SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a829bd04a95f833114e36a195c7e67f0a">getNoopOrAnyExtend</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(1),
+<a name="l01380"></a>01380                                             CanonicalIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())),
+<a name="l01381"></a>01381         Ty));
+<a name="l01382"></a>01382 
+<a name="l01383"></a>01383   <span class="comment">// If this is a chain of recurrences, turn it into a closed form, using the</span>
+<a name="l01384"></a>01384   <span class="comment">// folders, then expandCodeFor the closed form.  This allows the folders to</span>
+<a name="l01385"></a>01385   <span class="comment">// simplify the expression without having to build a bunch of special code</span>
+<a name="l01386"></a>01386   <span class="comment">// into this folder.</span>
+<a name="l01387"></a>01387   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *IH = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ad8e4f5b2ced08ad7d138b598aefdd338">getUnknown</a>(CanonicalIV);   <span class="comment">// Get I as a "symbolic" SCEV.</span>
+<a name="l01388"></a>01388 
+<a name="l01389"></a>01389   <span class="comment">// Promote S up to the canonical IV type, if the cast is foldable.</span>
+<a name="l01390"></a>01390   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *NewS = S;
+<a name="l01391"></a>01391   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<a class="code" href="namespacellvm_1_1MipsISD.html#a7a7035feda1dc16252a7a15a7e230122a88a797f57846adb2c382b3732b471913">Ext</a> = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a829bd04a95f833114e36a195c7e67f0a">getNoopOrAnyExtend</a>(S, CanonicalIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01392"></a>01392   <span class="keywordflow">if</span> (isa<SCEVAddRecExpr>(Ext))
+<a name="l01393"></a>01393     NewS = Ext;
+<a name="l01394"></a>01394 
+<a name="l01395"></a>01395   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *V = cast<SCEVAddRecExpr>(NewS)->evaluateAtIteration(IH, SE);
+<a name="l01396"></a>01396   <span class="comment">//cerr << "Evaluated: " << *this << "\n     to: " << *V << "\n";</span>
+<a name="l01397"></a>01397 
+<a name="l01398"></a>01398   <span class="comment">// Truncate the result down to the original type, if needed.</span>
+<a name="l01399"></a>01399   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *T = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a426976cfd81411f49f7e5fe77ee4e3a4">getTruncateOrNoop</a>(V, Ty);
+<a name="l01400"></a>01400   <span class="keywordflow">return</span> expand(T);
+<a name="l01401"></a>01401 }
+<a name="l01402"></a>01402 
+<a name="l01403"></a>01403 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitTruncateExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVTruncateExpr.html">SCEVTruncateExpr</a> *S) {
+<a name="l01404"></a>01404   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a43b64c3b800f1451fee1e2c42eb61f92">getType</a>());
+<a name="l01405"></a>01405   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>(),
+<a name="l01406"></a>01406                            SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>()-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>()));
+<a name="l01407"></a>01407   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *I = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#aa933549689e79685bb67de64dddc9f7c">CreateTrunc</a>(V, Ty);
+<a name="l01408"></a>01408   rememberInstruction(I);
+<a name="l01409"></a>01409   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l01410"></a>01410 }
+<a name="l01411"></a>01411 
+<a name="l01412"></a>01412 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitZeroExtendExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVZeroExtendExpr.html">SCEVZeroExtendExpr</a> *S) {
+<a name="l01413"></a>01413   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a43b64c3b800f1451fee1e2c42eb61f92">getType</a>());
+<a name="l01414"></a>01414   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>(),
+<a name="l01415"></a>01415                            SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>()-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>()));
+<a name="l01416"></a>01416   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *I = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a277dfeaad2a2ada72a6024b0eedc5301">CreateZExt</a>(V, Ty);
+<a name="l01417"></a>01417   rememberInstruction(I);
+<a name="l01418"></a>01418   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l01419"></a>01419 }
+<a name="l01420"></a>01420 
+<a name="l01421"></a>01421 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitSignExtendExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVSignExtendExpr.html">SCEVSignExtendExpr</a> *S) {
+<a name="l01422"></a>01422   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a43b64c3b800f1451fee1e2c42eb61f92">getType</a>());
+<a name="l01423"></a>01423   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>(),
+<a name="l01424"></a>01424                            SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(S-><a class="code" href="classllvm_1_1SCEVCastExpr.html#a84e9130d41f267f3f1bb29f432af267d">getOperand</a>()-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>()));
+<a name="l01425"></a>01425   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *I = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a2081b822b121723df82782c24314a37e">CreateSExt</a>(V, Ty);
+<a name="l01426"></a>01426   rememberInstruction(I);
+<a name="l01427"></a>01427   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l01428"></a>01428 }
+<a name="l01429"></a>01429 
+<a name="l01430"></a>01430 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitSMaxExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVSMaxExpr.html">SCEVSMaxExpr</a> *S) {
+<a name="l01431"></a>01431   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = expand(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>()-1));
+<a name="l01432"></a>01432   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = LHS-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01433"></a>01433   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>()-2; i >= 0; --i) {
+<a name="l01434"></a>01434     <span class="comment">// In the case of mixed integer and pointer types, do the</span>
+<a name="l01435"></a>01435     <span class="comment">// rest of the comparisons as integer.</span>
+<a name="l01436"></a>01436     <span class="keywordflow">if</span> (S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(i)-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>() != Ty) {
+<a name="l01437"></a>01437       Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(Ty);
+<a name="l01438"></a>01438       LHS = InsertNoopCastOfTo(LHS, Ty);
+<a name="l01439"></a>01439     }
+<a name="l01440"></a>01440     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(i), Ty);
+<a name="l01441"></a>01441     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6a4ce50f71e29df6dd1920cf067a2eb5">ICmp</a> = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a33a5c648796fb4593268c1d150f8582f">CreateICmpSGT</a>(LHS, RHS);
+<a name="l01442"></a>01442     rememberInstruction(ICmp);
+<a name="l01443"></a>01443     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sel = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#ae19d9d49f39d404703b42161ce788954">CreateSelect</a>(ICmp, LHS, RHS, <span class="stringliteral">"smax"</span>);
+<a name="l01444"></a>01444     rememberInstruction(Sel);
+<a name="l01445"></a>01445     LHS = Sel;
+<a name="l01446"></a>01446   }
+<a name="l01447"></a>01447   <span class="comment">// In the case of mixed integer and pointer types, cast the</span>
+<a name="l01448"></a>01448   <span class="comment">// final result back to the pointer type.</span>
+<a name="l01449"></a>01449   <span class="keywordflow">if</span> (LHS-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>())
+<a name="l01450"></a>01450     LHS = InsertNoopCastOfTo(LHS, S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>());
+<a name="l01451"></a>01451   <span class="keywordflow">return</span> LHS;
+<a name="l01452"></a>01452 }
+<a name="l01453"></a>01453 
+<a name="l01454"></a>01454 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::visitUMaxExpr(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUMaxExpr.html">SCEVUMaxExpr</a> *S) {
+<a name="l01455"></a>01455   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = expand(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>()-1));
+<a name="l01456"></a>01456   <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = LHS-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01457"></a>01457   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a97221eb4fea7333f0b7b35b35e1169b2">getNumOperands</a>()-2; i >= 0; --i) {
+<a name="l01458"></a>01458     <span class="comment">// In the case of mixed integer and pointer types, do the</span>
+<a name="l01459"></a>01459     <span class="comment">// rest of the comparisons as integer.</span>
+<a name="l01460"></a>01460     <span class="keywordflow">if</span> (S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(i)-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>() != Ty) {
+<a name="l01461"></a>01461       Ty = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#abb976145b00ae108c1d6b98c4f099d27">getEffectiveSCEVType</a>(Ty);
+<a name="l01462"></a>01462       LHS = InsertNoopCastOfTo(LHS, Ty);
+<a name="l01463"></a>01463     }
+<a name="l01464"></a>01464     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#a8d1a2d2a4d2f935841d226bbcbf54a48">getOperand</a>(i), Ty);
+<a name="l01465"></a>01465     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ICmp = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#adfd477104e7de105b3af3ee9b532d005">CreateICmpUGT</a>(LHS, RHS);
+<a name="l01466"></a>01466     rememberInstruction(ICmp);
+<a name="l01467"></a>01467     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sel = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#ae19d9d49f39d404703b42161ce788954">CreateSelect</a>(ICmp, LHS, RHS, <span class="stringliteral">"umax"</span>);
+<a name="l01468"></a>01468     rememberInstruction(Sel);
+<a name="l01469"></a>01469     LHS = Sel;
+<a name="l01470"></a>01470   }
+<a name="l01471"></a>01471   <span class="comment">// In the case of mixed integer and pointer types, cast the</span>
+<a name="l01472"></a>01472   <span class="comment">// final result back to the pointer type.</span>
+<a name="l01473"></a>01473   <span class="keywordflow">if</span> (LHS-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>())
+<a name="l01474"></a>01474     LHS = InsertNoopCastOfTo(LHS, S-><a class="code" href="classllvm_1_1SCEVNAryExpr.html#aed1b1d3b764c76210c67dd1b4a6be2f2">getType</a>());
+<a name="l01475"></a>01475   <span class="keywordflow">return</span> LHS;
+<a name="l01476"></a>01476 }
+<a name="l01477"></a>01477 
+<a name="l01478"></a><a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">01478</a> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">SCEVExpander::expandCodeFor</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *SH, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty,
+<a name="l01479"></a>01479                                    <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IP) {
+<a name="l01480"></a>01480   Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(IP-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>(), IP);
+<a name="l01481"></a>01481   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(SH, Ty);
+<a name="l01482"></a>01482 }
+<a name="l01483"></a>01483 
+<a name="l01484"></a>01484 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">SCEVExpander::expandCodeFor</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *SH, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l01485"></a>01485   <span class="comment">// Expand the code for this SCEV.</span>
+<a name="l01486"></a>01486   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = expand(SH);
+<a name="l01487"></a>01487   <span class="keywordflow">if</span> (Ty) {
+<a name="l01488"></a>01488     assert(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(Ty) == SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a983dbdce6af7840357ed33a20c8f30bb">getTypeSizeInBits</a>(SH-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>()) &&
+<a name="l01489"></a>01489            <span class="stringliteral">"non-trivial casts should be done with the SCEVs directly!"</span>);
+<a name="l01490"></a>01490     V = InsertNoopCastOfTo(V, Ty);
+<a name="l01491"></a>01491   }
+<a name="l01492"></a>01492   <span class="keywordflow">return</span> V;
+<a name="l01493"></a>01493 }
+<a name="l01494"></a>01494 
+<a name="l01495"></a>01495 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SCEVExpander::expand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S) {
+<a name="l01496"></a>01496   <span class="comment">// Compute an insertion point for this SCEV object. Hoist the instructions</span>
+<a name="l01497"></a>01497   <span class="comment">// as far out in the loop nest as possible.</span>
+<a name="l01498"></a>01498   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01499"></a>01499   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1Loop.html">Loop</a> *L = SE.LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()); ;
+<a name="l01500"></a>01500        L = L-><a class="code" href="classllvm_1_1LoopBase.html#a1431766de798501f107d9031821f311e">getParentLoop</a>())
+<a name="l01501"></a>01501     <span class="keywordflow">if</span> (SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a5a19768af81df7e5fe571bc08dcd48b3">isLoopInvariant</a>(S, L)) {
+<a name="l01502"></a>01502       <span class="keywordflow">if</span> (!L) <span class="keywordflow">break</span>;
+<a name="l01503"></a>01503       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Preheader = L-><a class="code" href="classllvm_1_1LoopBase.html#a1bc74c76b876ad387293ecde0f21ed45">getLoopPreheader</a>())
+<a name="l01504"></a>01504         InsertPt = Preheader-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>();
+<a name="l01505"></a>01505       <span class="keywordflow">else</span> {
+<a name="l01506"></a>01506         <span class="comment">// LSR sets the insertion point for AddRec start/step values to the</span>
+<a name="l01507"></a>01507         <span class="comment">// block start to simplify value reuse, even though it's an invalid</span>
+<a name="l01508"></a>01508         <span class="comment">// position. SCEVExpander must correct for this in all cases.</span>
+<a name="l01509"></a>01509         InsertPt = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#ab1cd5a3713b93a33f89a2086d473cf6e">getFirstInsertionPt</a>();
+<a name="l01510"></a>01510       }
+<a name="l01511"></a>01511     } <span class="keywordflow">else</span> {
+<a name="l01512"></a>01512       <span class="comment">// If the SCEV is computable at this level, insert it into the header</span>
+<a name="l01513"></a>01513       <span class="comment">// after the PHIs (and after any other instructions that we've inserted</span>
+<a name="l01514"></a>01514       <span class="comment">// there) so that it is guaranteed to dominate any user inside the loop.</span>
+<a name="l01515"></a>01515       <span class="keywordflow">if</span> (L && SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ac258f0361a1c35f5814a2b529139d15c">hasComputableLoopEvolution</a>(S, L) && !PostIncLoops.<a class="code" href="classllvm_1_1SmallPtrSet.html#a2ced6343b8ad006a757059554bbf9f37" title="count - Return true if the specified pointer is in the set.">count</a>(L))
+<a name="l01516"></a>01516         InsertPt = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#ab1cd5a3713b93a33f89a2086d473cf6e">getFirstInsertionPt</a>();
+<a name="l01517"></a>01517       <span class="keywordflow">while</span> (InsertPt != Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>()
+<a name="l01518"></a>01518              && (<a class="code" href="classllvm_1_1SCEVExpander.html#a6b023424193e702b745da77d6ead62e8">isInsertedInstruction</a>(InsertPt)
+<a name="l01519"></a>01519                  || isa<DbgInfoIntrinsic>(InsertPt))) {
+<a name="l01520"></a>01520         InsertPt = <a class="code" href="namespacellvm.html#aa1704159f75e6eacd595962ea6d93ffe">llvm::next</a>(<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a>(InsertPt));
+<a name="l01521"></a>01521       }
+<a name="l01522"></a>01522       <span class="keywordflow">break</span>;
+<a name="l01523"></a>01523     }
+<a name="l01524"></a>01524 
+<a name="l01525"></a>01525   <span class="comment">// Check to see if we already expanded this here.</span>
+<a name="l01526"></a>01526   std::map<std::pair<const SCEV *, Instruction *>,
+<a name="l01527"></a>01527            <a class="code" href="classllvm_1_1AssertingVH.html">AssertingVH<Value></a> ><a class="code" href="classstd_1_1iterator.html">::iterator</a> I =
+<a name="l01528"></a>01528     InsertedExpressions.find(std::make_pair(S, InsertPt));
+<a name="l01529"></a>01529   <span class="keywordflow">if</span> (I != InsertedExpressions.end())
+<a name="l01530"></a>01530     <span class="keywordflow">return</span> I->second;
+<a name="l01531"></a>01531 
+<a name="l01532"></a>01532   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l01533"></a>01533   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01534"></a>01534   Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(InsertPt-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>(), InsertPt);
+<a name="l01535"></a>01535 
+<a name="l01536"></a>01536   <span class="comment">// Expand the expression into instructions.</span>
+<a name="l01537"></a>01537   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="structllvm_1_1SCEVVisitor.html#a1e7a5297e3ded4db5e828ee4bd651b34">visit</a>(S);
+<a name="l01538"></a>01538 
+<a name="l01539"></a>01539   <span class="comment">// Remember the expanded value for this SCEV at this location.</span>
+<a name="l01540"></a>01540   <span class="comment">//</span>
+<a name="l01541"></a>01541   <span class="comment">// This is independent of PostIncLoops. The mapped value simply materializes</span>
+<a name="l01542"></a>01542   <span class="comment">// the expression at this insertion point. If the mapped value happened to be</span>
+<a name="l01543"></a>01543   <span class="comment">// a postinc expansion, it could be reused by a non postinc user, but only if</span>
+<a name="l01544"></a>01544   <span class="comment">// its insertion point was already at the head of the loop.</span>
+<a name="l01545"></a>01545   InsertedExpressions[std::make_pair(S, InsertPt)] = V;
+<a name="l01546"></a>01546 
+<a name="l01547"></a>01547   restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l01548"></a>01548   <span class="keywordflow">return</span> V;
+<a name="l01549"></a>01549 }
+<a name="l01550"></a>01550 
+<a name="l01551"></a>01551 <span class="keywordtype">void</span> SCEVExpander::rememberInstruction(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *I) {
+<a name="l01552"></a>01552   <span class="keywordflow">if</span> (!PostIncLoops.<a class="code" href="classllvm_1_1SmallPtrSetImpl.html#a956ca8bb95132e0131135d47a2d1f255">empty</a>())
+<a name="l01553"></a>01553     InsertedPostIncValues.insert(I);
+<a name="l01554"></a>01554   <span class="keywordflow">else</span>
+<a name="l01555"></a>01555     InsertedValues.insert(I);
+<a name="l01556"></a>01556 }
+<a name="l01557"></a>01557 
+<a name="l01558"></a>01558 <span class="keywordtype">void</span> SCEVExpander::restoreInsertPoint(<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BB, <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> I) {
+<a name="l01559"></a>01559   Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(BB, I);
+<a name="l01560"></a>01560 }
+<a name="l01561"></a>01561 <span class="comment"></span>
+<a name="l01562"></a>01562 <span class="comment">/// getOrInsertCanonicalInductionVariable - This method returns the</span>
+<a name="l01563"></a>01563 <span class="comment">/// canonical induction variable of the specified type for the specified</span>
+<a name="l01564"></a>01564 <span class="comment">/// loop (inserting one if there is none).  A canonical induction variable</span>
+<a name="l01565"></a>01565 <span class="comment">/// starts at zero and steps by one on each iteration.</span>
+<a name="l01566"></a>01566 <span class="comment"></span><a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *
+<a name="l01567"></a><a class="code" href="classllvm_1_1SCEVExpander.html#a48f2a886637b7ccf57c00ad89d4df1a7">01567</a> <a class="code" href="classllvm_1_1SCEVExpander.html#a48f2a886637b7ccf57c00ad89d4df1a7">SCEVExpander::getOrInsertCanonicalInductionVariable</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L,
+<a name="l01568"></a>01568                                                     <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l01569"></a>01569   assert(Ty-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() && <span class="stringliteral">"Can only insert integer induction variables!"</span>);
+<a name="l01570"></a>01570 
+<a name="l01571"></a>01571   <span class="comment">// Build a SCEV for {0,+,1}<L>.</span>
+<a name="l01572"></a>01572   <span class="comment">// Conservatively use FlagAnyWrap for now.</span>
+<a name="l01573"></a>01573   <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *H = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a659b27f6737fcb7eaf333b0279da1154">getAddRecExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 0),
+<a name="l01574"></a>01574                                    SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a2eb94d079d8416118f4aaed865ab05d7">getConstant</a>(Ty, 1), L, <a class="code" href="classllvm_1_1SCEV.html#af43000d4dcb7d6d63cb6e36933ed3f6fa23e74052c4d79cfdaa23460a3c946656">SCEV::FlagAnyWrap</a>);
+<a name="l01575"></a>01575 
+<a name="l01576"></a>01576   <span class="comment">// Emit code for it.</span>
+<a name="l01577"></a>01577   <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *SaveInsertBB = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>();
+<a name="l01578"></a>01578   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> SaveInsertPt = Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#ae2bfc7d05689f33b3f9cf2f2b3eca7dd">GetInsertPoint</a>();
+<a name="l01579"></a>01579   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *V = cast<PHINode>(<a class="code" href="classllvm_1_1SCEVExpander.html#a583d3ca95f83216d632a4d1ae0330dd0">expandCodeFor</a>(H, 0, L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>()));
+<a name="l01580"></a>01580   <span class="keywordflow">if</span> (SaveInsertBB)
+<a name="l01581"></a>01581     restoreInsertPoint(SaveInsertBB, SaveInsertPt);
+<a name="l01582"></a>01582 
+<a name="l01583"></a>01583   <span class="keywordflow">return</span> V;
+<a name="l01584"></a>01584 }
+<a name="l01585"></a>01585 <span class="comment"></span>
+<a name="l01586"></a>01586 <span class="comment">/// Sort values by integer width for replaceCongruentIVs.</span>
+<a name="l01587"></a><a class="code" href="ScalarEvolutionExpander_8cpp.html#ae1abc6cc8542d8d240fc78625714f330">01587</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ScalarEvolutionExpander_8cpp.html#ae1abc6cc8542d8d240fc78625714f330" title="Sort values by integer width for replaceCongruentIVs.">width_descending</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *lhs, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *rhs) {
+<a name="l01588"></a>01588   <span class="comment">// Put pointers at the back and make sure pointer < pointer = false.</span>
+<a name="l01589"></a>01589   <span class="keywordflow">if</span> (!lhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() || !rhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l01590"></a>01590     <span class="keywordflow">return</span> rhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() && !lhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>();
+<a name="l01591"></a>01591   <span class="keywordflow">return</span> rhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>()
+<a name="l01592"></a>01592     < lhs-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l01593"></a>01593 }
+<a name="l01594"></a>01594 <span class="comment"></span>
+<a name="l01595"></a>01595 <span class="comment">/// replaceCongruentIVs - Check for congruent phis in this loop header and</span>
+<a name="l01596"></a>01596 <span class="comment">/// replace them with their most canonical representative. Return the number of</span>
+<a name="l01597"></a>01597 <span class="comment">/// phis eliminated.</span>
+<a name="l01598"></a>01598 <span class="comment">///</span>
+<a name="l01599"></a>01599 <span class="comment">/// This does not depend on any SCEVExpander state but should be used in</span>
+<a name="l01600"></a>01600 <span class="comment">/// the same context that SCEVExpander is used.</span>
+<a name="l01601"></a><a class="code" href="classllvm_1_1SCEVExpander.html#a715265a34e5fc322b3e2a9f45ed12882">01601</a> <span class="comment"></span><span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1SCEVExpander.html#a715265a34e5fc322b3e2a9f45ed12882">SCEVExpander::replaceCongruentIVs</a>(<a class="code" href="classllvm_1_1Loop.html">Loop</a> *L, <span class="keyword">const</span> <a class="code" href="classllvm_1_1DominatorTree.html">DominatorTree</a> *DT,
+<a name="l01602"></a>01602                                            <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<WeakVH></a> &DeadInsts,
+<a name="l01603"></a>01603                                            <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLowering.html">TargetLowering</a> *TLI) {
+<a name="l01604"></a>01604   <span class="comment">// Find integer phis in order of increasing width.</span>
+<a name="l01605"></a>01605   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<PHINode*, 8></a> Phis;
+<a name="l01606"></a>01606   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> I = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l01607"></a>01607        <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *Phi = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1PHINode.html">PHINode</a>>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>); ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l01608"></a>01608     Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Phi);
+<a name="l01609"></a>01609   }
+<a name="l01610"></a>01610   <span class="keywordflow">if</span> (TLI)
+<a name="l01611"></a>01611     std::sort(Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), <a class="code" href="ScalarEvolutionExpander_8cpp.html#ae1abc6cc8542d8d240fc78625714f330" title="Sort values by integer width for replaceCongruentIVs.">width_descending</a>);
+<a name="l01612"></a>01612 
+<a name="l01613"></a>01613   <span class="keywordtype">unsigned</span> NumElim = 0;
+<a name="l01614"></a>01614   <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<const SCEV *, PHINode *></a> ExprToIVMap;
+<a name="l01615"></a>01615   <span class="comment">// Process phis from wide to narrow. Mapping wide phis to the their truncation</span>
+<a name="l01616"></a>01616   <span class="comment">// so narrow phis can reuse them.</span>
+<a name="l01617"></a>01617   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<PHINode*>::const_iterator</a> PIter = Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(),
+<a name="l01618"></a>01618          PEnd = Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(); PIter != PEnd; ++PIter) {
+<a name="l01619"></a>01619     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *Phi = *PIter;
+<a name="l01620"></a>01620 
+<a name="l01621"></a>01621     <span class="comment">// Fold constant phis. They may be congruent to other constant phis and</span>
+<a name="l01622"></a>01622     <span class="comment">// would confuse the logic below that expects proper IVs.</span>
+<a name="l01623"></a>01623     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = Phi-><a class="code" href="classllvm_1_1PHINode.html#ab421865744bd8b5aea08be18e86c6aa5">hasConstantValue</a>()) {
+<a name="l01624"></a>01624       Phi-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(V);
+<a name="l01625"></a>01625       DeadInsts.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Phi);
+<a name="l01626"></a>01626       ++NumElim;
+<a name="l01627"></a>01627       <a class="code" href="Debug_8h.html#a0e760853102aabaceef5ef82347c593c">DEBUG_WITH_TYPE</a>(DebugType, <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>()
+<a name="l01628"></a>01628                       << <span class="stringliteral">"INDVARS: Eliminated constant iv: "</span> << *Phi << <span class="charliteral">'\n'</span>);
+<a name="l01629"></a>01629       <span class="keywordflow">continue</span>;
+<a name="l01630"></a>01630     }
+<a name="l01631"></a>01631 
+<a name="l01632"></a>01632     <span class="keywordflow">if</span> (!SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#ae9623974341419bfd1d185cfdc65bedd">isSCEVable</a>(Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()))
+<a name="l01633"></a>01633       <span class="keywordflow">continue</span>;
+<a name="l01634"></a>01634 
+<a name="l01635"></a>01635     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *&OrigPhiRef = ExprToIVMap[SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(Phi)];
+<a name="l01636"></a>01636     <span class="keywordflow">if</span> (!OrigPhiRef) {
+<a name="l01637"></a>01637       OrigPhiRef = Phi;
+<a name="l01638"></a>01638       <span class="keywordflow">if</span> (Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() && TLI
+<a name="l01639"></a>01639           && TLI-><a class="code" href="classllvm_1_1TargetLowering.html#a237303fc30bd8d66e77d2f9019c387cb">isTruncateFree</a>(Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>()->getType())) {
+<a name="l01640"></a>01640         <span class="comment">// This phi can be freely truncated to the narrowest phi type. Map the</span>
+<a name="l01641"></a>01641         <span class="comment">// truncated expression to it so it will be reused for narrow types.</span>
+<a name="l01642"></a>01642         <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *TruncExpr =
+<a name="l01643"></a>01643           SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a8344b86f018c5c78a986fb97e1eaf20b">getTruncateExpr</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(Phi), Phis.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>()->getType());
+<a name="l01644"></a>01644         ExprToIVMap[TruncExpr] = Phi;
+<a name="l01645"></a>01645       }
+<a name="l01646"></a>01646       <span class="keywordflow">continue</span>;
+<a name="l01647"></a>01647     }
+<a name="l01648"></a>01648 
+<a name="l01649"></a>01649     <span class="comment">// Replacing a pointer phi with an integer phi or vice-versa doesn't make</span>
+<a name="l01650"></a>01650     <span class="comment">// sense.</span>
+<a name="l01651"></a>01651     <span class="keywordflow">if</span> (OrigPhiRef-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() != Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01652"></a>01652       <span class="keywordflow">continue</span>;
+<a name="l01653"></a>01653 
+<a name="l01654"></a>01654     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *LatchBlock = L-><a class="code" href="classllvm_1_1LoopBase.html#a8917d359fc92f25eb0117386588c6f1c">getLoopLatch</a>()) {
+<a name="l01655"></a>01655       <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OrigInc =
+<a name="l01656"></a>01656         cast<Instruction>(OrigPhiRef-><a class="code" href="classllvm_1_1PHINode.html#a21960167f529265a1cb02ac1e8ad10f6">getIncomingValueForBlock</a>(LatchBlock));
+<a name="l01657"></a>01657       <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IsomorphicInc =
+<a name="l01658"></a>01658         cast<Instruction>(Phi-><a class="code" href="classllvm_1_1PHINode.html#a21960167f529265a1cb02ac1e8ad10f6">getIncomingValueForBlock</a>(LatchBlock));
+<a name="l01659"></a>01659 
+<a name="l01660"></a>01660       <span class="comment">// If this phi has the same width but is more canonical, replace the</span>
+<a name="l01661"></a>01661       <span class="comment">// original with it. As part of the "more canonical" determination,</span>
+<a name="l01662"></a>01662       <span class="comment">// respect a prior decision to use an IV chain.</span>
+<a name="l01663"></a>01663       <span class="keywordflow">if</span> (OrigPhiRef-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()
+<a name="l01664"></a>01664           && !(ChainedPhis.count(Phi)
+<a name="l01665"></a>01665                || isExpandedAddRecExprPHI(OrigPhiRef, OrigInc, L))
+<a name="l01666"></a>01666           && (ChainedPhis.count(Phi)
+<a name="l01667"></a>01667               || isExpandedAddRecExprPHI(Phi, IsomorphicInc, L))) {
+<a name="l01668"></a>01668         <a class="code" href="namespacellvm.html#a39bdaf6372ed2ef16d951fc0f6d54dd4">std::swap</a>(OrigPhiRef, Phi);
+<a name="l01669"></a>01669         <a class="code" href="namespacellvm.html#a39bdaf6372ed2ef16d951fc0f6d54dd4">std::swap</a>(OrigInc, IsomorphicInc);
+<a name="l01670"></a>01670       }
+<a name="l01671"></a>01671       <span class="comment">// Replacing the congruent phi is sufficient because acyclic redundancy</span>
+<a name="l01672"></a>01672       <span class="comment">// elimination, CSE/GVN, should handle the rest. However, once SCEV proves</span>
+<a name="l01673"></a>01673       <span class="comment">// that a phi is congruent, it's often the head of an IV user cycle that</span>
+<a name="l01674"></a>01674       <span class="comment">// is isomorphic with the original phi. It's worth eagerly cleaning up the</span>
+<a name="l01675"></a>01675       <span class="comment">// common case of a single IV increment so that DeleteDeadPHIs can remove</span>
+<a name="l01676"></a>01676       <span class="comment">// cycles that had postinc uses.</span>
+<a name="l01677"></a>01677       <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *TruncExpr = SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a426976cfd81411f49f7e5fe77ee4e3a4">getTruncateOrNoop</a>(SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(OrigInc),
+<a name="l01678"></a>01678                                                    IsomorphicInc-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>());
+<a name="l01679"></a>01679       <span class="keywordflow">if</span> (OrigInc != IsomorphicInc
+<a name="l01680"></a>01680           && TruncExpr == SE.<a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(IsomorphicInc)
+<a name="l01681"></a>01681           && ((isa<PHINode>(OrigInc) && isa<PHINode>(IsomorphicInc))
+<a name="l01682"></a>01682               || <a class="code" href="classllvm_1_1SCEVExpander.html#a9093ff54a20ae387e9643cc4ed615214" title="hoistIVInc - Utility for hoisting an IV increment.">hoistIVInc</a>(OrigInc, IsomorphicInc))) {
+<a name="l01683"></a>01683         <a class="code" href="Debug_8h.html#a0e760853102aabaceef5ef82347c593c">DEBUG_WITH_TYPE</a>(DebugType, <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>()
+<a name="l01684"></a>01684                         << <span class="stringliteral">"INDVARS: Eliminated congruent iv.inc: "</span>
+<a name="l01685"></a>01685                         << *IsomorphicInc << <span class="charliteral">'\n'</span>);
+<a name="l01686"></a>01686         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewInc = OrigInc;
+<a name="l01687"></a>01687         <span class="keywordflow">if</span> (OrigInc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != IsomorphicInc->getType()) {
+<a name="l01688"></a>01688           <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IP = isa<PHINode>(OrigInc)
+<a name="l01689"></a>01689             ? (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>*)L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#ab1cd5a3713b93a33f89a2086d473cf6e">getFirstInsertionPt</a>()
+<a name="l01690"></a>01690             : OrigInc-><a class="code" href="classllvm_1_1ilist__node.html#a6ac308903849239f2f308aa180dda61b" title="Get the next node, or 0 for the list tail.">getNextNode</a>();
+<a name="l01691"></a>01691           <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> Builder(IP);
+<a name="l01692"></a>01692           Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a571ae7ebae7038da7f6073efc65aaa50">SetCurrentDebugLocation</a>(IsomorphicInc->getDebugLoc());
+<a name="l01693"></a>01693           NewInc = Builder.
+<a name="l01694"></a>01694             CreateTruncOrBitCast(OrigInc, IsomorphicInc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), IVName);
+<a name="l01695"></a>01695         }
+<a name="l01696"></a>01696         IsomorphicInc->replaceAllUsesWith(NewInc);
+<a name="l01697"></a>01697         DeadInsts.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(IsomorphicInc);
+<a name="l01698"></a>01698       }
+<a name="l01699"></a>01699     }
+<a name="l01700"></a>01700     <a class="code" href="Debug_8h.html#a0e760853102aabaceef5ef82347c593c">DEBUG_WITH_TYPE</a>(DebugType, <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>()
+<a name="l01701"></a>01701                     << <span class="stringliteral">"INDVARS: Eliminated congruent iv: "</span> << *Phi << <span class="charliteral">'\n'</span>);
+<a name="l01702"></a>01702     ++NumElim;
+<a name="l01703"></a>01703     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewIV = OrigPhiRef;
+<a name="l01704"></a>01704     <span class="keywordflow">if</span> (OrigPhiRef-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l01705"></a>01705       <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> Builder(L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#ab1cd5a3713b93a33f89a2086d473cf6e">getFirstInsertionPt</a>());
+<a name="l01706"></a>01706       Builder.<a class="code" href="classllvm_1_1IRBuilderBase.html#a571ae7ebae7038da7f6073efc65aaa50">SetCurrentDebugLocation</a>(Phi-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l01707"></a>01707       NewIV = Builder.<a class="code" href="classllvm_1_1IRBuilder.html#a51a6054b262122a73eee4892ed34e30f">CreateTruncOrBitCast</a>(OrigPhiRef, Phi-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), IVName);
+<a name="l01708"></a>01708     }
+<a name="l01709"></a>01709     Phi-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(NewIV);
+<a name="l01710"></a>01710     DeadInsts.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(Phi);
+<a name="l01711"></a>01711   }
+<a name="l01712"></a>01712   <span class="keywordflow">return</span> NumElim;
+<a name="l01713"></a>01713 }
+<a name="l01714"></a>01714 
+<a name="l01715"></a>01715 <span class="keyword">namespace </span>{
+<a name="l01716"></a>01716 <span class="comment">// Search for a SCEV subexpression that is not safe to expand.  Any expression</span>
+<a name="l01717"></a>01717 <span class="comment">// that may expand to a !isSafeToSpeculativelyExecute value is unsafe, namely</span>
+<a name="l01718"></a>01718 <span class="comment">// UDiv expressions. We don't know if the UDiv is derived from an IR divide</span>
+<a name="l01719"></a>01719 <span class="comment">// instruction, but the important thing is that we prove the denominator is</span>
+<a name="l01720"></a>01720 <span class="comment">// nonzero before expansion.</span>
+<a name="l01721"></a>01721 <span class="comment">//</span>
+<a name="l01722"></a>01722 <span class="comment">// IVUsers already checks that IV-derived expressions are safe. So this check is</span>
+<a name="l01723"></a>01723 <span class="comment">// only needed when the expression includes some subexpression that is not IV</span>
+<a name="l01724"></a>01724 <span class="comment">// derived.</span>
+<a name="l01725"></a>01725 <span class="comment">//</span>
+<a name="l01726"></a>01726 <span class="comment">// Currently, we only allow division by a nonzero constant here. If this is</span>
+<a name="l01727"></a>01727 <span class="comment">// inadequate, we could easily allow division by SCEVUnknown by using</span>
+<a name="l01728"></a>01728 <span class="comment">// ValueTracking to check isKnownNonZero().</span>
+<a name="l01729"></a>01729 <span class="keyword">struct </span>SCEVFindUnsafe {
+<a name="l01730"></a>01730   <span class="keywordtype">bool</span> IsUnsafe;
+<a name="l01731"></a>01731 
+<a name="l01732"></a>01732   SCEVFindUnsafe(): IsUnsafe(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>) {}
+<a name="l01733"></a>01733 
+<a name="l01734"></a>01734   <span class="keywordtype">bool</span> follow(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S) {
+<a name="l01735"></a>01735     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVUDivExpr.html">SCEVUDivExpr</a> *D = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1SCEVUDivExpr.html">SCEVUDivExpr</a>>(S);
+<a name="l01736"></a>01736     <span class="keywordflow">if</span> (!D)
+<a name="l01737"></a>01737       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01738"></a>01738     <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a> *SC = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1SCEVConstant.html">SCEVConstant</a>>(D-><a class="code" href="classllvm_1_1SCEVUDivExpr.html#a0745b63bdc2e2b907b936bf105e3eeb9">getRHS</a>());
+<a name="l01739"></a>01739     <span class="keywordflow">if</span> (SC && !SC-><a class="code" href="classllvm_1_1SCEVConstant.html#a64f0133adf37f9513005465580a19a66">getValue</a>()-><a class="code" href="classllvm_1_1ConstantInt.html#ad4ea4748170f687710a54c919dde5625">isZero</a>())
+<a name="l01740"></a>01740       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01741"></a>01741     IsUnsafe = <span class="keyword">true</span>;
+<a name="l01742"></a>01742     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01743"></a>01743   }
+<a name="l01744"></a>01744   <span class="keywordtype">bool</span> isDone()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> IsUnsafe; }
+<a name="l01745"></a>01745 };
+<a name="l01746"></a>01746 }
+<a name="l01747"></a>01747 
+<a name="l01748"></a>01748 <span class="keyword">namespace </span>llvm {
+<a name="l01749"></a><a class="code" href="namespacellvm.html#a2f52e91adf99a4081aea8908ecd1baf4">01749</a> <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#a2f52e91adf99a4081aea8908ecd1baf4">isSafeToExpand</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S) {
+<a name="l01750"></a>01750   SCEVFindUnsafe Search;
+<a name="l01751"></a>01751   <a class="code" href="namespacellvm.html#a002c7b1beef8b58691fe7aa42ffa2fe7" title="Use SCEVTraversal to visit all nodes in the givien expression tree.">visitAll</a>(S, Search);
+<a name="l01752"></a>01752   <span class="keywordflow">return</span> !Search.IsUnsafe;
+<a name="l01753"></a>01753 }
+<a name="l01754"></a>01754 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:24 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpander_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,19 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ScalarEvolutionExpander.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ScalarEvolutionExpander.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolutionExpander_8cpp.html"];
+  Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="IndVarSimplify.cpp",height=0.2,width=0.4,color="black",URL="$IndVarSimplify_8cpp.html"];
+  Node1 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="LoopIdiomRecognize.cpp",height=0.2,width=0.4,color="black",URL="$LoopIdiomRecognize_8cpp.html"];
+  Node1 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="LoopStrengthReduce.cpp",height=0.2,width=0.4,color="black",URL="$LoopStrengthReduce_8cpp.html"];
+  Node1 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="LoopUnrollRuntime.cpp",height=0.2,width=0.4,color="black",URL="$LoopUnrollRuntime_8cpp.html"];
+  Node1 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="LoopVectorize.cpp",height=0.2,width=0.4,color="black",URL="$LoopVectorize_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ScalarEvolutionExpressions.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_a884da034f1b4859d4f2a35ae0ac2045.html">Analysis</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ScalarEvolutionExpressions.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ScalarEvolution_8h_source.html">llvm/Analysis/ScalarEvolution.h</a>"</code><br/>
+<code>#include "<a class="el" href="SmallPtrSet_8h_source.html">llvm/ADT/SmallPtrSet.h</a>"</code><br/>
+<code>#include "<a class="el" href="ErrorHandling_8h_source.html">llvm/Support/ErrorHandling.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ScalarEvolutionExpressions.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="ScalarEvolutionExpressions_8h__incl.png" border="0" usemap="#ScalarEvolutionExpressions_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="ScalarEvolutionExpressions_8h__dep__incl.png" border="0" usemap="#ScalarEvolutionExpressions_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="ScalarEvolutionExpressions_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVConstant.html">llvm::SCEVConstant</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVCastExpr.html">llvm::SCEVCastExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVTruncateExpr.html">llvm::SCEVTruncateExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVZeroExtendExpr.html">llvm::SCEVZeroExtendExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVSignExtendExpr.html">llvm::SCEVSignExtendExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVNAryExpr.html">llvm::SCEVNAryExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVCommutativeExpr.html">llvm::SCEVCommutativeExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVAddExpr.html">llvm::SCEVAddExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVMulExpr.html">llvm::SCEVMulExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVUDivExpr.html">llvm::SCEVUDivExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVAddRecExpr.html">llvm::SCEVAddRecExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVSMaxExpr.html">llvm::SCEVSMaxExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVUMaxExpr.html">llvm::SCEVUMaxExpr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVUnknown.html">llvm::SCEVUnknown</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1SCEVVisitor.html">llvm::SCEVVisitor< SC, RetVal ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SCEVTraversal.html">llvm::SCEVTraversal< SV ></a></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5">llvm::SCEVTypes</a> { <br/>
+  <a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5abcb1f797cb330e61a5879fc260aaec5b">llvm::scConstant</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5ad3656bcc84af213cc488acb56c60de22">llvm::scTruncate</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5add4a8d5cb0d78c9be22d01e1546bafc6">llvm::scZeroExtend</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5ad05711646a19cb20775cfbc8ef0a8c09">llvm::scSignExtend</a>, 
+<br/>
+  <a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5a3a80b1a7dda48464be1849ee1fb85868">llvm::scAddExpr</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5afd56f054da3d1f9b827ae1003da3a38b">llvm::scMulExpr</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5aee62cac87c0dc1f483d783aae69101c4">llvm::scUDivExpr</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5a222c9c7b5d5e742d5d1238a3256b1ea5">llvm::scAddRecExpr</a>, 
+<br/>
+  <a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5ad3d0abdf8125de904320df332dbefedb">llvm::scUMaxExpr</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5a684b8e2484b12d494e82f7053d005754">llvm::scSMaxExpr</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5a80488550b42b6548ec4d5c7118c7ff1d">llvm::scUnknown</a>, 
+<a class="el" href="namespacellvm.html#a7ef747666d6938cb47b3c5544011a4e5ab6b4550f8ae7180f0e83ebb40a9882ec">llvm::scCouldNotCompute</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memTemplParams" colspan="2">template<typename SV > </td></tr>
+<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a002c7b1beef8b58691fe7aa42ffa2fe7">llvm::visitAll</a> (const SCEV *Root, SV &Visitor)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Use.html">Use</a> <a class="el" href="classllvm_1_1SCEVTraversal.html">SCEVTraversal</a> to visit all nodes in the givien expression tree.  <a href="#a002c7b1beef8b58691fe7aa42ffa2fe7"></a><br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:39 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,37 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ScalarEvolutionExpressions.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ScalarEvolutionExpander.h",height=0.2,width=0.4,color="black",URL="$ScalarEvolutionExpander_8h.html"];
+  Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="ScalarEvolutionExpander.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolutionExpander_8cpp.html"];
+  Node2 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="IndVarSimplify.cpp",height=0.2,width=0.4,color="black",URL="$IndVarSimplify_8cpp.html"];
+  Node2 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="LoopIdiomRecognize.cpp",height=0.2,width=0.4,color="black",URL="$LoopIdiomRecognize_8cpp.html"];
+  Node2 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="LoopStrengthReduce.cpp",height=0.2,width=0.4,color="black",URL="$LoopStrengthReduce_8cpp.html"];
+  Node2 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="LoopUnrollRuntime.cpp",height=0.2,width=0.4,color="black",URL="$LoopUnrollRuntime_8cpp.html"];
+  Node2 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="LoopVectorize.cpp",height=0.2,width=0.4,color="black",URL="$LoopVectorize_8cpp.html"];
+  Node1 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="DependenceAnalysis.cpp",height=0.2,width=0.4,color="black",URL="$DependenceAnalysis_8cpp.html"];
+  Node1 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="IVUsers.cpp",height=0.2,width=0.4,color="black",URL="$IVUsers_8cpp.html"];
+  Node1 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="ScalarEvolution.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolution_8cpp.html"];
+  Node1 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="ScalarEvolutionAliasAnalysis.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolutionAliasAnalysis_8cpp.html"];
+  Node1 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="ScalarEvolutionNormalization.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolutionNormalization_8cpp.html"];
+  Node1 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="SimplifyIndVar.cpp",height=0.2,width=0.4,color="black",URL="$SimplifyIndVar_8cpp.html"];
+  Node1 -> Node15 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="BBVectorize.cpp",height=0.2,width=0.4,color="black",URL="$BBVectorize_8cpp.html"];
+  Node1 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionExpressions_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,165 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ScalarEvolutionExpressions.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/Analysis/ScalarEvolution.h",height=0.2,width=0.4,color="black",URL="$ScalarEvolution_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="red",URL="$PassSupport_8h.html"];
+  Node6 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="red",URL="$PassAnalysisSupport_8h.html"];
+  Node7 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+  Node9 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node16 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Instructions.h",height=0.2,width=0.4,color="black",URL="$Instructions_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/InstrTypes.h",height=0.2,width=0.4,color="red",URL="$InstrTypes_8h.html"];
+  Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/Instruction.h",height=0.2,width=0.4,color="red",URL="$Instruction_8h.html"];
+  Node18 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="black",URL="$DerivedTypes_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/Type.h",height=0.2,width=0.4,color="red",URL="$Type_8h.html"];
+  Node21 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node22 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node22 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node22 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node20 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Attributes.h",height=0.2,width=0.4,color="black",URL="$Attributes_8h.html"];
+  Node27 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="red",URL="$MathExtras_8h.html"];
+  Node27 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="red",URL="$ArrayRef_8h.html"];
+  Node29 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/CallingConv.h",height=0.2,width=0.4,color="black",URL="$CallingConv_8h.html"];
+  Node17 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Support/IntegersSubset.h",height=0.2,width=0.4,color="red",URL="$IntegersSubset_8h.html"];
+  Node31 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/Constants.h",height=0.2,width=0.4,color="red",URL="$Constants_8h.html"];
+  Node32 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/Support/IntegersSubsetMapping.h",height=0.2,width=0.4,color="red",URL="$IntegersSubsetMapping_8h.html"];
+  Node33 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="map",height=0.2,width=0.4,color="grey75"];
+  Node17 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node35 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/Function.h",height=0.2,width=0.4,color="black",URL="$Function_8h.html"];
+  Node36 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/GlobalValue.h",height=0.2,width=0.4,color="red",URL="$GlobalValue_8h.html"];
+  Node36 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/BasicBlock.h",height=0.2,width=0.4,color="red",URL="$BasicBlock_8h.html"];
+  Node38 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Argument.h",height=0.2,width=0.4,color="red",URL="$Argument_8h.html"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/Value.h",height=0.2,width=0.4,color="red",URL="$Value_8h.html"];
+  Node40 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Operator.h",height=0.2,width=0.4,color="black",URL="$Operator_8h.html"];
+  Node41 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Support/ValueHandle.h",height=0.2,width=0.4,color="black",URL="$ValueHandle_8h.html"];
+  Node42 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="red",URL="$DenseMapInfo_8h.html"];
+  Node43 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+  Node44 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/ADT/PointerIntPair.h",height=0.2,width=0.4,color="black",URL="$PointerIntPair_8h.html"];
+  Node45 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/Allocator.h",height=0.2,width=0.4,color="black",URL="$Allocator_8h.html"];
+  Node46 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/ConstantRange.h",height=0.2,width=0.4,color="red",URL="$ConstantRange_8h.html"];
+  Node47 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/ADT/FoldingSet.h",height=0.2,width=0.4,color="black",URL="$FoldingSet_8h.html"];
+  Node48 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/ADT/DenseSet.h",height=0.2,width=0.4,color="red",URL="$DenseSet_8h.html"];
+  Node2 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/ADT/SmallPtrSet.h",height=0.2,width=0.4,color="black",URL="$SmallPtrSet_8h.html"];
+  Node50 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+00e4a83a3ccb48a021526ef61c2ae5df
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,32 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ScalarEvolutionNormalization.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/ADT/SmallPtrSet.h",height=0.2,width=0.4,color="black",URL="$SmallPtrSet_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+  Node9 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="iterator",height=0.2,width=0.4,color="grey75"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolutionNormalization_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ScalarEvolutionNormalization.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_a884da034f1b4859d4f2a35ae0ac2045.html">Analysis</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">ScalarEvolutionNormalization.h</div>  </div>
+</div>
+<div class="contents">
+<a href="ScalarEvolutionNormalization_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- llvm/Analysis/ScalarEvolutionNormalization.h - See below -*- C++ -*-===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file defines utilities for working with "normalized" ScalarEvolution</span>
+<a name="l00011"></a>00011 <span class="comment">// expressions.</span>
+<a name="l00012"></a>00012 <span class="comment">//</span>
+<a name="l00013"></a>00013 <span class="comment">// The following example illustrates post-increment uses and how normalized</span>
+<a name="l00014"></a>00014 <span class="comment">// expressions help.</span>
+<a name="l00015"></a>00015 <span class="comment">//</span>
+<a name="l00016"></a>00016 <span class="comment">//   for (i=0; i!=n; ++i) {</span>
+<a name="l00017"></a>00017 <span class="comment">//     ...</span>
+<a name="l00018"></a>00018 <span class="comment">//   }</span>
+<a name="l00019"></a>00019 <span class="comment">//   use(i);</span>
+<a name="l00020"></a>00020 <span class="comment">//</span>
+<a name="l00021"></a>00021 <span class="comment">// While the expression for most uses of i inside the loop is {0,+,1}<%L>, the</span>
+<a name="l00022"></a>00022 <span class="comment">// expression for the use of i outside the loop is {1,+,1}<%L>, since i is</span>
+<a name="l00023"></a>00023 <span class="comment">// incremented at the end of the loop body. This is inconveient, since it</span>
+<a name="l00024"></a>00024 <span class="comment">// suggests that we need two different induction variables, one that starts</span>
+<a name="l00025"></a>00025 <span class="comment">// at 0 and one that starts at 1. We'd prefer to be able to think of these as</span>
+<a name="l00026"></a>00026 <span class="comment">// the same induction variable, with uses inside the loop using the</span>
+<a name="l00027"></a>00027 <span class="comment">// "pre-incremented" value, and uses after the loop using the</span>
+<a name="l00028"></a>00028 <span class="comment">// "post-incremented" value.</span>
+<a name="l00029"></a>00029 <span class="comment">//</span>
+<a name="l00030"></a>00030 <span class="comment">// Expressions for post-incremented uses are represented as an expression</span>
+<a name="l00031"></a>00031 <span class="comment">// paired with a set of loops for which the expression is in "post-increment"</span>
+<a name="l00032"></a>00032 <span class="comment">// mode (there may be multiple loops).</span>
+<a name="l00033"></a>00033 <span class="comment">//</span>
+<a name="l00034"></a>00034 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#ifndef LLVM_ANALYSIS_SCALAREVOLUTION_NORMALIZATION_H</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_ANALYSIS_SCALAREVOLUTION_NORMALIZATION_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="SmallPtrSet_8h.html">llvm/ADT/SmallPtrSet.h</a>"</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>llvm {
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="keyword">class </span>Instruction;
+<a name="l00044"></a>00044 <span class="keyword">class </span>DominatorTree;
+<a name="l00045"></a>00045 <span class="keyword">class </span><a class="code" href="namespacellvm_1_1GC.html#a5f606a2b04c809f789a574660cd25213a960eba6a93af558b44d3d14e8393d324" title="Instr is a loop (backwards branch).">Loop</a>;
+<a name="l00046"></a>00046 <span class="keyword">class </span>ScalarEvolution;
+<a name="l00047"></a>00047 <span class="keyword">class </span>SCEV;
+<a name="l00048"></a>00048 <span class="keyword">class </span>Value;
+<a name="l00049"></a>00049 <span class="comment"></span>
+<a name="l00050"></a>00050 <span class="comment">/// TransformKind - Different types of transformations that</span>
+<a name="l00051"></a>00051 <span class="comment">/// TransformForPostIncUse can do.</span>
+<a name="l00052"></a><a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64">00052</a> <span class="comment"></span><span class="keyword">enum</span> <a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64">TransformKind</a> {<span class="comment"></span>
+<a name="l00053"></a>00053 <span class="comment">  /// Normalize - Normalize according to the given loops.</span>
+<a name="l00054"></a><a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64aeb131ce4dfb8eeef7197e6b0afd145d4">00054</a> <span class="comment"></span>  <a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64aeb131ce4dfb8eeef7197e6b0afd145d4" title="Normalize - Normalize according to the given loops.">Normalize</a>,<span class="comment"></span>
+<a name="l00055"></a>00055 <span class="comment">  /// NormalizeAutodetect - Detect post-inc opportunities on new expressions,</span>
+<a name="l00056"></a>00056 <span class="comment">  /// update the given loop set, and normalize.</span>
+<a name="l00057"></a><a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64a95a812e0cc74d25095baf41c758404cc">00057</a> <span class="comment"></span>  <a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64a95a812e0cc74d25095baf41c758404cc">NormalizeAutodetect</a>,<span class="comment"></span>
+<a name="l00058"></a>00058 <span class="comment">  /// Denormalize - Perform the inverse transform on the expression with the</span>
+<a name="l00059"></a>00059 <span class="comment">  /// given loop set.</span>
+<a name="l00060"></a><a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64a4e61e68aee514bee49f2930447338b31">00060</a> <span class="comment"></span>  <a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64a4e61e68aee514bee49f2930447338b31">Denormalize</a>
+<a name="l00061"></a>00061 };
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/// PostIncLoopSet - A set of loops.</span>
+<a name="l00064"></a><a class="code" href="namespacellvm.html#ac765465998d0f34ed6123631bda54fab">00064</a> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<const Loop *, 2></a> <a class="code" href="namespacellvm.html#ac765465998d0f34ed6123631bda54fab" title="PostIncLoopSet - A set of loops.">PostIncLoopSet</a>;
+<a name="l00065"></a>00065 <span class="comment"></span>
+<a name="l00066"></a>00066 <span class="comment">/// TransformForPostIncUse - Transform the given expression according to the</span>
+<a name="l00067"></a>00067 <span class="comment">/// given transformation kind.</span>
+<a name="l00068"></a>00068 <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<a class="code" href="namespacellvm.html#adfac6898b7e6f186616ff5c337670296">TransformForPostIncUse</a>(<a class="code" href="namespacellvm.html#a72e1beba38b6627c9307ab8b5141ac64">TransformKind</a> <a class="code" href="namespacellvm_1_1EngineKind.html#a9df47239a42cd9621ac26d9ecbd57441">Kind</a>,
+<a name="l00069"></a>00069                                    <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S,
+<a name="l00070"></a>00070                                    <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1User.html">User</a>,
+<a name="l00071"></a>00071                                    <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OperandValToReplace,
+<a name="l00072"></a>00072                                    <a class="code" href="classllvm_1_1SmallPtrSet.html">PostIncLoopSet</a> &Loops,
+<a name="l00073"></a>00073                                    <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE,
+<a name="l00074"></a>00074                                    <a class="code" href="classllvm_1_1DominatorTree.html">DominatorTree</a> &DT);
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 }
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:24 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1291 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ScalarEvolution.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_59dd179f705c75b7b821c61754f4942c.html">Analysis</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#define-members">Defines</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">ScalarEvolution.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ScalarEvolutionExpressions_8h_source.html">llvm/Analysis/ScalarEvolutionExpressions.h</a>"</code><br/>
+<code>#include "<a class="el" href="Constants_8h_source.html">llvm/Constants.h</a>"</code><br/>
+<code>#include "<a class="el" href="DerivedTypes_8h_source.html">llvm/DerivedTypes.h</a>"</code><br/>
+<code>#include "<a class="el" href="GlobalVariable_8h_source.html">llvm/GlobalVariable.h</a>"</code><br/>
+<code>#include "<a class="el" href="GlobalAlias_8h_source.html">llvm/GlobalAlias.h</a>"</code><br/>
+<code>#include "<a class="el" href="Instructions_8h_source.html">llvm/Instructions.h</a>"</code><br/>
+<code>#include "<a class="el" href="LLVMContext_8h_source.html">llvm/LLVMContext.h</a>"</code><br/>
+<code>#include "<a class="el" href="Operator_8h_source.html">llvm/Operator.h</a>"</code><br/>
+<code>#include "<a class="el" href="ConstantFolding_8h_source.html">llvm/Analysis/ConstantFolding.h</a>"</code><br/>
+<code>#include "<a class="el" href="Dominators_8h_source.html">llvm/Analysis/Dominators.h</a>"</code><br/>
+<code>#include "<a class="el" href="InstructionSimplify_8h_source.html">llvm/Analysis/InstructionSimplify.h</a>"</code><br/>
+<code>#include "<a class="el" href="LoopInfo_8h_source.html">llvm/Analysis/LoopInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="ValueTracking_8h_source.html">llvm/Analysis/ValueTracking.h</a>"</code><br/>
+<code>#include "<a class="el" href="Writer_8h_source.html">llvm/Assembly/Writer.h</a>"</code><br/>
+<code>#include "<a class="el" href="DataLayout_8h_source.html">llvm/DataLayout.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetLibraryInfo_8h_source.html">llvm/Target/TargetLibraryInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="CommandLine_8h_source.html">llvm/Support/CommandLine.h</a>"</code><br/>
+<code>#include "<a class="el" href="ConstantRange_8h_source.html">llvm/Support/ConstantRange.h</a>"</code><br/>
+<code>#include "<a class="el" href="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="ErrorHandling_8h_source.html">llvm/Support/ErrorHandling.h</a>"</code><br/>
+<code>#include "<a class="el" href="GetElementPtrTypeIterator_8h_source.html">llvm/Support/GetElementPtrTypeIterator.h</a>"</code><br/>
+<code>#include "<a class="el" href="InstIterator_8h_source.html">llvm/Support/InstIterator.h</a>"</code><br/>
+<code>#include "<a class="el" href="MathExtras_8h_source.html">llvm/Support/MathExtras.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include "<a class="el" href="Statistic_8h_source.html">llvm/ADT/Statistic.h</a>"</code><br/>
+<code>#include "<a class="el" href="STLExtras_8h_source.html">llvm/ADT/STLExtras.h</a>"</code><br/>
+<code>#include "<a class="el" href="SmallPtrSet_8h_source.html">llvm/ADT/SmallPtrSet.h</a>"</code><br/>
+<code>#include <algorithm></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ScalarEvolution.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="ScalarEvolution_8cpp__incl.png" border="0" usemap="#ScalarEvolution_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="ScalarEvolution_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structMarkPendingLoopPredicate.html">MarkPendingLoopPredicate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a>   "scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>"</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< const <a class="el" href="classllvm_1_1Loop.html">Loop</a> <br class="typebreak"/>
+*, std::string > </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aa1c8b51d90e47c669fb34ac12e808e54">VerifyMap</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a2e762a8d9c438420a709c5c23f7b0b0c">STATISTIC</a> (NumArrayLenItCounts,"Number of trip counts computed with array length")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a0632c132990e2eb3a245f84fb61c4685">STATISTIC</a> (NumTripCountsComputed,"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> with predictable loop counts")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a58efee95012b0f967da74e4da6feae92">STATISTIC</a> (NumTripCountsNotComputed,"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> without predictable loop counts")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a171d243931d6624f63d9b82094921792">STATISTIC</a> (NumBruteForceTripCountsComputed,"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> with trip counts computed by force")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a9ce57443956e69ceb421686abf513aa8">INITIALIZE_PASS_BEGIN</a> (<a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a>,"scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>","Scalar Evolution Analysis", false, <a class="el" href="LoopSimplify_8cpp.html#a13f020c6a40eb04f1b4f9ddfbb004ce0">true</a>) INITIALIZE_PASS_END(<a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aba5433b11fed6a0d8f02e985b34b612b">GroupByComplexity</a> (<a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * > &Ops, <a class="el" href="classllvm_1_1LoopInfo.html">LoopInfo</a> *<a class="el" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aecbc2422e34b76c4d73f6ae64ce3951f">BinomialCoefficient</a> (const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *It, <a class="el" href="classunsigned.html">unsigned</a> K, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE, <a class="el" href="classllvm_1_1Type.html">Type</a> *ResultTy)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a26b60b007df3a21de84404f81a992496">getOverflowLimitForStep</a> (const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *Step, ICmpInst::Predicate *Pred, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a80378bffde4634fdd6aff28a7d5047a2">getPreStartForSignExtend</a> (const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AR, <a class="el" href="classllvm_1_1Type.html">Type</a> *Ty, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a0ae6e08328e2f64a19a505ea5bfd6f2c">getSignExtendAddRecStart</a> (const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AR, <a class="el" href="classllvm_1_1Type.html">Type</a> *Ty, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a1e95c53ffc835ce35d78a9ce8d475d22">CollectAddOperandsWithScales</a> (<a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *, <a class="el" href="classllvm_1_1APInt.html">APInt</a> > &M, <a class="el" href="classllvm_1_1SmallVector.html">SmallVector</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *, 8 > &NewOps, <a class="el" href="classllvm_1_1APInt.html">APInt</a> &AccumulatedConstant, const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *const *Ops, size_t NumOperands, const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Scale, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</
 a> &SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static uint64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a6c073d72f1aa69d68ffb88bf12a9c1b0">umul_ov</a> (uint64_t i, uint64_t j, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> &Overflow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static uint64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aeab53b73cc54e312fd1745ebffccc7dc">Choose</a> (uint64_t n, uint64_t k, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> &Overflow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#af50d189708d19a31f6c189c947c45dcc">PushDefUseChildren</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I, <a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * > &Worklist)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a649011f27bb212ab1bdd0ec7e041da79">PushLoopPHIs</a> (const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * > &Worklist)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aa36876236477c7bad67f378bec7373a0">EvaluateConstantChrecAtConstant</a> (const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AddRec, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *C, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a250f5c0dbc15e78bded9c6bbd4354185">CanConstantFold</a> (const <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#af1691ba36ec490f734755ccc9c0d4c95">canConstantEvolve</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I, const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ad9a1ad295ab838d446053a356002098d">getConstantEvolvingPHIOperands</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *UseInst, const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * > &PHIMap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#adb9a8e03cbf26bc06a1be8770914e63b">getConstantEvolvingPHI</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ae22e7e38d649dbb2f90e20df7a2294c4">EvaluateExpression</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > &Vals, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ab93b7360d5b3cc22548317dc5b6b285e">BuildConstantFromSCEV</a> (const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *V)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ad618f8b1d1ddca11c0faa9ff26bd9e61">SolveLinEquationWithOverflow</a> (const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &A, const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &B, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static std::pair< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> <br class="typebreak"/>
+*, const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a67c8a10b1b2a753341ddf1db52f28a5b">SolveQuadraticEquation</a> (const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AddRec, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#aea8979aa7e40386835642f9f5f9f36d2">HasSameValue</a> (const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *A, const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *B)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a7170e1b99a9c472642f756b8cf098afa">PrintLoopInfo</a> (<a class="el" href="classllvm_1_1raw__ostream.html">raw_ostream</a> &OS, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE, const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *L)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#acbf7b12e086d64750b0bbc87a79d834a">replaceSubString</a> (std::string &Str, <a class="el" href="classllvm_1_1StringRef.html">StringRef</a> From, <a class="el" href="classllvm_1_1StringRef.html">StringRef</a> To)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">replaceSubString - Replaces all occurences of From in Str with To.  <a href="#acbf7b12e086d64750b0bbc87a79d834a"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a82dff98be5b02f5601920431972b5cf4">getLoopBackedgeTakenCounts</a> (<a class="el" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="el" href="ScalarEvolution_8cpp.html#aa1c8b51d90e47c669fb34ac12e808e54">VerifyMap</a> &Map, <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> &SE)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">getLoopBackedgeTakenCounts - Helper method for verifyAnalysis.  <a href="#a82dff98be5b02f5601920431972b5cf4"></a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1cl_1_1opt.html">cl::opt</a>< <a class="el" href="classunsigned.html">unsigned</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a1c75b3f59d1f60387c0e3dd3aaf1ba9a">MaxBruteForceIterations</a> ("scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>-max-iterations", cl::ReallyHidden, <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Maximum number of iterations <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> will ""symbolically execute a constant ""derived loop"), cl::init(100))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1cl_1_1opt.html">cl::opt</a>< <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a07df02be5b2e877418f82b80a81d8800">VerifySCEV</a> ("verify-scev", cl::desc("Verify <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a>'s backedge taken counts (slow)"))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">scalar </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">scalar Scalar Evolution </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#a503499d4ac1af5de3ac8a7e4805e14aa">Analysis</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">scalar Scalar Evolution </td><td class="memItemRight" valign="bottom"><a class="el" href="ScalarEvolution_8cpp.html#ab98634f319efc49e653ccb25caaf4090">false</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="ScalarEvolution.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_TYPE   "scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>"</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00061">61</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="aa1c8b51d90e47c669fb34ac12e808e54"></a><!-- doxytag: member="ScalarEvolution.cpp::VerifyMap" ref="aa1c8b51d90e47c669fb34ac12e808e54" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a><const <a class="el" href="classllvm_1_1Loop.html">Loop</a> *, std::string> <a class="el" href="ScalarEvolution_8cpp.html#aa1c8b51d90e47c669fb34ac12e808e54">VerifyMap</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l06944">6944</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aecbc2422e34b76c4d73f6ae64ce3951f"></a><!-- doxytag: member="ScalarEvolution.cpp::BinomialCoefficient" ref="aecbc2422e34b76c4d73f6ae64ce3951f" args="(const SCEV *It, unsigned K, ScalarEvolution &SE, Type *ResultTy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a>* BinomialCoefficient </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td>
+          <td class="paramname"><em>It</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>K</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Type.html">Type</a> * </td>
+          <td class="paramname"><em>ResultTy</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>BinomialCoefficient - Compute BC(It, K). The result has width W. Assume, K > 0. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00679">679</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8cpp_source.html#l00736">llvm::APInt::countTrailingZeros()</a>, <a class="el" href="Type_8cpp_source.html#l00304">llvm::IntegerType::get()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00313">llvm::ScalarEvolution::getConstant()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00546">llvm::ScalarEvolution::getContext()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02713">llvm::ScalarEvolution::getCouldNotCompute()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02761">llvm::ScalarEvolution::getMinusSCEV()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01860">llvm::ScalarEvolution::getMulExpr()</a>, <a class="el" href="APInt_8h_source.html#l00414">llvm::APInt::getSignedMinValue()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02777">llvm::ScalarEvolution::getTruncateOrZeroExtend()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00248">llvm::SCEV::getType()</
 a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02678">llvm::ScalarEvolution::getTypeSizeInBits()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02122">llvm::ScalarEvolution::getUDivExpr()</a>, <a class="el" href="APInt_8cpp_source.html#l01127">llvm::APInt::lshr()</a>, <a class="el" href="APInt_8cpp_source.html#l01352">llvm::APInt::multiplicativeInverse()</a>, <a class="el" href="APInt_8h_source.html#l00760">llvm::APInt::shl()</a>, <a class="el" href="APInt_8cpp_source.html#l00919">llvm::APInt::trunc()</a>, and <a class="el" href="APInt_8cpp_source.html#l00983">llvm::APInt::zext()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l00798">llvm::SCEVAddRecExpr::evaluateAtIteration()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab93b7360d5b3cc22548317dc5b6b285e"></a><!-- doxytag: member="ScalarEvolution.cpp::BuildConstantFromSCEV" ref="ab93b7360d5b3cc22548317dc5b6b285e" args="(const SCEV *V)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* BuildConstantFromSCEV </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td>
+          <td class="paramname"><em>V</em></td><td>)</td>
+          <td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>This builds up a Constant using the ConstantExpr interface. That way, we will return Constants for objects which aren't represented by a SCEVConstant, because SCEVConstant is restricted to ConstantInt. Returns NULL if the SCEV isn't representable as a Constant. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l05007">5007</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Constants_8cpp_source.html#l01949">llvm::ConstantExpr::getAdd()</a>, <a class="el" href="Constants_8cpp_source.html#l01599">llvm::ConstantExpr::getBitCast()</a>, <a class="el" href="Constants_8h_source.html#l01004">llvm::ConstantExpr::getGetElementPtr()</a>, <a class="el" href="Type_8cpp_source.html#l00240">llvm::Type::getInt32Ty()</a>, <a class="el" href="Type_8cpp_source.html#l00283">llvm::Type::getInt8PtrTy()</a>, <a class="el" href="Constants_8cpp_source.html#l01440">llvm::ConstantExpr::getIntegerCast()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00255">llvm::SCEVUDivExpr::getLHS()</a>, <a class="el" href="Constants_8cpp_source.html#l01971">llvm::ConstantExpr::getMul()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00147">llvm::SCEVNAryExpr::
 getNumOperands()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00066">llvm::SCEVCastExpr::getOperand()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00148">llvm::SCEVNAryExpr::getOperand()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00256">llvm::SCEVUDivExpr::getRHS()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00103">llvm::SCEV::getSCEVType()</a>, <a class="el" href="Constants_8cpp_source.html#l01479">llvm::ConstantExpr::getSExt()</a>, <a class="el" href="Constants_8cpp_source.html#l01465">llvm::ConstantExpr::getTrunc()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00067">llvm::SCEVCastExpr::getType()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Constants_8cpp_source.html#l01982">llvm::ConstantExpr::getUDiv()</a>, <a class="el" href="Constants_8cpp_source.html#l01493">llvm::ConstantExpr::getZExt()</a>, <a class="el" 
 href="Type_8h_source.html#l00204">llvm::Type::isPointerTy()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scAddExpr</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00030">llvm::scAddRecExpr</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scConstant</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00031">llvm::scCouldNotCompute</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scMulExpr</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scSignExtend</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scTruncate</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00030">llvm::scUDivExpr</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00031">llvm::scUnknown</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00029">llvm::scZeroExtend
 </a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00137">llvm::ARM_MB::ST</a>, and <a class="el" href="OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af1691ba36ec490f734755ccc9c0d4c95"></a><!-- doxytag: member="ScalarEvolution.cpp::canConstantEvolve" ref="af1691ba36ec490f734755ccc9c0d4c95" args="(Instruction *I, const Loop *L)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> canConstantEvolve </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Determine whether this instruction can constant evolve within this loop assuming its operands can all constant evolve. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04683">4683</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l04669">CanConstantFold()</a>, <a class="el" href="LoopInfo_8h_source.html#l00105">llvm::LoopBase< BlockT, LoopT >::contains()</a>, <a class="el" href="LoopInfo_8h_source.html#l00096">llvm::LoopBase< BlockT, LoopT >::getHeader()</a>, and <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l04760">EvaluateExpression()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l04743">getConstantEvolvingPHI()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l04704">getConstantEvolvingPHIOperands()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a250f5c0dbc15e78bded9c6bbd4354185"></a><!-- doxytag: member="ScalarEvolution.cpp::CanConstantFold" ref="a250f5c0dbc15e78bded9c6bbd4354185" args="(const Instruction *I)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> CanConstantFold </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>I</em></td><td>)</td>
+          <td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>CanConstantFold - Return true if we can constant fold an instruction of the specified type, assuming that all operands were constants. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04669">4669</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ConstantFolding_8cpp_source.html#l01105">llvm::canConstantFoldCallTo()</a>, and <a class="el" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l04683">canConstantEvolve()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeab53b73cc54e312fd1745ebffccc7dc"></a><!-- doxytag: member="ScalarEvolution.cpp::Choose" ref="aeab53b73cc54e312fd1745ebffccc7dc" args="(uint64_t n, uint64_t k, bool &Overflow)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static uint64_t Choose </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> & </td>
+          <td class="paramname"><em>Overflow</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Compute the result of "n choose k", the binomial coefficient. If an intermediate computation overflows, Overflow will be set and the return will be garbage. Overflow is not cleared on absence of overflow. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01835">1835</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l01826">umul_ov()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01860">llvm::ScalarEvolution::getMulExpr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e95c53ffc835ce35d78a9ce8d475d22"></a><!-- doxytag: member="ScalarEvolution.cpp::CollectAddOperandsWithScales" ref="a1e95c53ffc835ce35d78a9ce8d475d22" args="(DenseMap< const SCEV *, APInt > &M, SmallVector< const SCEV *, 8 > &NewOps, APInt &AccumulatedConstant, const SCEV *const *Ops, size_t NumOperands, const APInt &Scale, ScalarEvolution &SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> CollectAddOperandsWithScales </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *, <a class="el" href="classllvm_1_1APInt.html">APInt</a> > & </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SmallVector.html">SmallVector</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *, 8 > & </td>
+          <td class="paramname"><em>NewOps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>AccumulatedConstant</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *const * </td>
+          <td class="paramname"><em>Ops</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>NumOperands</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>Scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>CollectAddOperandsWithScales - Process the given Ops list, which is a list of operands to be added under the given scale, update the given map. This is a helper function for getAddRecExpr. As an example of what it does, given a sequence of operands that would form an add expression like this:</p>
+<p>m + n + 13 + (A * (o + p + (B * q + m + 29))) + r + (-1 * r)</p>
+<p>where A and B are constants, update the map with these values:</p>
+<p>(m, 1+A*B), (n, 1), (o, A), (p, A), (q, A*B), (r, 0)</p>
+<p>and add 13 + A*B*29 to AccumulatedConstant. This will allow getAddRecExpr to produce this:</p>
+<p>13+A*B*29 + n + (m * (1+A*B)) + ((o + p) * A) + (q * A*B)</p>
+<p>This form often exposes folding opportunities that are hidden in the original operand list.</p>
+<p>Return true iff it appears that any interesting folding opportunities may be exposed. This helps getAddRecExpr short-circuit extra work in the common case where no interesting opportunities are present, and is also used as a check to avoid infinite recursion. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01381">1381</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01860">llvm::ScalarEvolution::getMulExpr()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00147">llvm::SCEVNAryExpr::getNumOperands()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00148">llvm::SCEVNAryExpr::getOperand()</a>, <a class="el" href="DenseMap_8h_source.html#l00151">llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT >, KeyT, ValueT, KeyInfoT >::insert()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00154">llvm::SCEVNAryExpr::op_begin()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00155">llvm::SCEVNAryExpr::op_end()</a>, and <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike >::push_back()</a>.<
 /p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01457">llvm::ScalarEvolution::getAddExpr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa36876236477c7bad67f378bec7373a0"></a><!-- doxytag: member="ScalarEvolution.cpp::EvaluateConstantChrecAtConstant" ref="aa36876236477c7bad67f378bec7373a0" args="(const SCEVAddRecExpr *AddRec, ConstantInt *C, ScalarEvolution &SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a>* EvaluateConstantChrecAtConstant </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> * </td>
+          <td class="paramname"><em>AddRec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+          <td class="paramname"><em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04572">4572</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l00798">llvm::SCEVAddRecExpr::evaluateAtIteration()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l00313">llvm::ScalarEvolution::getConstant()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06417">llvm::SCEVAddRecExpr::getNumIterationsInRange()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae22e7e38d649dbb2f90e20df7a2294c4"></a><!-- doxytag: member="ScalarEvolution.cpp::EvaluateExpression" ref="ae22e7e38d649dbb2f90e20df7a2294c4" args="(Value *V, const Loop *L, DenseMap< Instruction *, Constant * > &Vals, const DataLayout *TD, const TargetLibraryInfo *TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* EvaluateExpression </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > & </td>
+          <td class="paramname"><em>Vals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> * </td>
+          <td class="paramname"><em>TD</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> * </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>EvaluateExpression - Given an expression that passes the getConstantEvolvingPHI predicate, evaluate its value assuming the PHI node in the loop has the value PHIVal. If we can't fold this expression for some reason, return null. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04760">4760</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l04683">canConstantEvolve()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00987">llvm::ConstantFoldCompareInstOperands()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00900">llvm::ConstantFoldInstOperands()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00469">llvm::ConstantFoldLoadFromConstPtr()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="User_8h_source.html#l00108">llvm::User::getNumOperands()</a>, <a class="el" href="Instruction_8h_source.html#l00082">llvm::Instruction::getOpcode()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Instructions_8h_source.html#l00171">llvm::LoadInst::isVolatile()</a>, and <a cl
 ass="el" href="DenseMap_8h_source.html#l00141">llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT >, KeyT, ValueT, KeyInfoT >::lookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adb9a8e03cbf26bc06a1be8770914e63b"></a><!-- doxytag: member="ScalarEvolution.cpp::getConstantEvolvingPHI" ref="adb9a8e03cbf26bc06a1be8770914e63b" args="(Value *V, const Loop *L)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1PHINode.html">PHINode</a>* getConstantEvolvingPHI </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>getConstantEvolvingPHI - Given an LLVM value and a loop, return a PHI node in the loop that V is derived from. We allow arbitrary operations along the way, but the operands of an operation must either be constants or a value derived from a constant PHI. If this expression does not fit with these constraints, return null. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04743">4743</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l04683">canConstantEvolve()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l04704">getConstantEvolvingPHIOperands()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad9a1ad295ab838d446053a356002098d"></a><!-- doxytag: member="ScalarEvolution.cpp::getConstantEvolvingPHIOperands" ref="ad9a1ad295ab838d446053a356002098d" args="(Instruction *UseInst, const Loop *L, DenseMap< Instruction *, PHINode * > &PHIMap)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1PHINode.html">PHINode</a>* getConstantEvolvingPHIOperands </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>UseInst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1DenseMap.html">DenseMap</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * > & </td>
+          <td class="paramname"><em>PHIMap</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>getConstantEvolvingPHIOperands - Implement getConstantEvolvingPHI by recursing through each instruction operand until reaching a loop header phi. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04704">4704</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l04683">canConstantEvolve()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="DenseMap_8h_source.html#l00141">llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT >, KeyT, ValueT, KeyInfoT >::lookup()</a>, <a class="el" href="User_8h_source.html#l00116">llvm::User::op_begin()</a>, <a class="el" href="User_8h_source.html#l00118">llvm::User::op_end()</a>, and <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l04743">getConstantEvolvingPHI()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a82dff98be5b02f5601920431972b5cf4"></a><!-- doxytag: member="ScalarEvolution.cpp::getLoopBackedgeTakenCounts" ref="a82dff98be5b02f5601920431972b5cf4" args="(Loop *L, VerifyMap &Map, ScalarEvolution &SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void getLoopBackedgeTakenCounts </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="ScalarEvolution_8cpp.html#aa1c8b51d90e47c669fb34ac12e808e54">VerifyMap</a> & </td>
+          <td class="paramname"><em>Map</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>getLoopBackedgeTakenCounts - Helper method for verifyAnalysis. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l06957">6957</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l04016">llvm::ScalarEvolution::getBackedgeTakenCount()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00137">llvm::SCEV::print()</a>, <a class="el" href="LoopInfo_8h_source.html#l00133">llvm::LoopBase< BlockT, LoopT >::rbegin()</a>, <a class="el" href="LoopInfo_8h_source.html#l00134">llvm::LoopBase< BlockT, LoopT >::rend()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l06947">replaceSubString()</a>, and <a class="el" href="raw__ostream_8h_source.html#l00457">llvm::raw_string_ostream::str()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06977">llvm::ScalarEvolution::verifyAnalysis()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a26b60b007df3a21de84404f81a992496"></a><!-- doxytag: member="ScalarEvolution.cpp::getOverflowLimitForStep" ref="a26b60b007df3a21de84404f81a992496" args="(const SCEV *Step, ICmpInst::Predicate *Pred, ScalarEvolution *SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a>* getOverflowLimitForStep </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td>
+          <td class="paramname"><em>Step</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ICmpInst::Predicate * </td>
+          <td class="paramname"><em>Pred</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> * </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01059">1059</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l00313">llvm::ScalarEvolution::getConstant()</a>, <a class="el" href="ConstantRange_8cpp_source.html#l00180">llvm::ConstantRange::getSignedMax()</a>, <a class="el" href="APInt_8h_source.html#l00402">llvm::APInt::getSignedMaxValue()</a>, <a class="el" href="ConstantRange_8cpp_source.html#l00195">llvm::ConstantRange::getSignedMin()</a>, <a class="el" href="APInt_8h_source.html#l00414">llvm::APInt::getSignedMinValue()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l03413">llvm::ScalarEvolution::getSignedRange()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00248">llvm::SCEV::getType()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02678">llvm::ScalarEvolution::getTypeSizeInBits()</a>, <a class="el" href="InstrTypes_8h_source.html#l00672">llvm::CmpInst::ICMP_SGT</a>, <a class="el" href="InstrTypes_8h_source.html#l00674">llvm::CmpInst::ICMP_SLT</a>, <a class="el" href="ScalarEvo
 lution_8cpp_source.html#l05888">llvm::ScalarEvolution::isKnownNegative()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l05892">llvm::ScalarEvolution::isKnownPositive()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01082">getPreStartForSignExtend()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l01155">llvm::ScalarEvolution::getSignExtendExpr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a80378bffde4634fdd6aff28a7d5047a2"></a><!-- doxytag: member="ScalarEvolution.cpp::getPreStartForSignExtend" ref="a80378bffde4634fdd6aff28a7d5047a2" args="(const SCEVAddRecExpr *AR, Type *Ty, ScalarEvolution *SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a>* getPreStartForSignExtend </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> * </td>
+          <td class="paramname"><em>AR</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Type.html">Type</a> * </td>
+          <td class="paramname"><em>Ty</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> * </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01082">1082</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="Debug_8cpp_source.html#l00101">llvm::dbgs()</a>, <a class="el" href="Debug_8h_source.html#l00097">DEBUG</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00094">llvm::SCEV::FlagAnyWrap</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00097">llvm::SCEV::FlagNSW</a>, <a class="el" href="Type_8cpp_source.html#l00304">llvm::IntegerType::get()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01457">llvm::ScalarEvolution::getAddExpr()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02242">llvm::ScalarEvolution::getAddRecExpr()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00546">llvm::ScalarEvolution::getContext()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00294">llvm::SCEVAddRecExpr::getLoop()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00159">llvm::SCEVNAryExpr::getNoWrapFlags()<
 /a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00147">llvm::SCEVNAryExpr::getNumOperands()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01059">getOverflowLimitForStep()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01155">llvm::ScalarEvolution::getSignExtendExpr()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00293">llvm::SCEVAddRecExpr::getStart()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00300">llvm::SCEVAddRecExpr::getStepRecurrence()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00157">llvm::SCEVNAryExpr::getType()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02678">llvm::ScalarEvolution::getTypeSizeInBits()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l06040">llvm::ScalarEvolution::isLoopEntryGuardedByCond()</a>, <a class="el" href="ScalarEvolutionExp
 ressions_8h_source.html#l00154">llvm::SCEVNAryExpr::op_begin()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00155">llvm::SCEVNAryExpr::op_end()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back()</a>, and <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01144">getSignExtendAddRecStart()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ae6e08328e2f64a19a505ea5bfd6f2c"></a><!-- doxytag: member="ScalarEvolution.cpp::getSignExtendAddRecStart" ref="a0ae6e08328e2f64a19a505ea5bfd6f2c" args="(const SCEVAddRecExpr *AR, Type *Ty, ScalarEvolution *SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a>* getSignExtendAddRecStart </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> * </td>
+          <td class="paramname"><em>AR</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Type.html">Type</a> * </td>
+          <td class="paramname"><em>Ty</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> * </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01144">1144</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ScalarEvolution_8cpp_source.html#l01457">llvm::ScalarEvolution::getAddExpr()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01082">getPreStartForSignExtend()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01155">llvm::ScalarEvolution::getSignExtendExpr()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00293">llvm::SCEVAddRecExpr::getStart()</a>, and <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00300">llvm::SCEVAddRecExpr::getStepRecurrence()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01155">llvm::ScalarEvolution::getSignExtendExpr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba5433b11fed6a0d8f02e985b34b612b"></a><!-- doxytag: member="ScalarEvolution.cpp::GroupByComplexity" ref="aba5433b11fed6a0d8f02e985b34b612b" args="(SmallVectorImpl< const SCEV * > &Ops, LoopInfo *LI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void GroupByComplexity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * > & </td>
+          <td class="paramname"><em>Ops</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1LoopInfo.html">LoopInfo</a> * </td>
+          <td class="paramname"><em>LI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>GroupByComplexity - Given a list of SCEV objects, order them by their complexity, and group objects of the same complexity together by value. When this routine is finished, we know that any duplicates in the vector are consecutive and that complexity is monotonically increasing.</p>
+<p>Note that we go take special precautions to ensure that we get deterministic results from this routine. In other words, we don't want the results of this to depend on where the addresses of various SCEV objects happened to land in memory. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00635">635</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00111">llvm::SmallVectorTemplateCommon< T, typename >::begin()</a>, <a class="el" href="SmallVector_8h_source.html#l00113">llvm::SmallVectorTemplateCommon< T, typename >::end()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00103">llvm::SCEV::getSCEVType()</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T, typename >::size()</a>, and <a class="el" href="OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01457">llvm::ScalarEvolution::getAddExpr()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l01860">llvm::ScalarEvolution::getMulExpr()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02378">llvm::ScalarEvolution::getSMaxExpr()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l02482">llvm::ScalarEvolution::getUMaxExpr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aea8979aa7e40386835642f9f5f9f36d2"></a><!-- doxytag: member="ScalarEvolution.cpp::HasSameValue" ref="aea8979aa7e40386835642f9f5f9f36d2" args="(const SCEV *A, const SCEV *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> HasSameValue </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> * </td>
+          <td class="paramname"><em>B</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>HasSameValue - SCEV structural equivalence is usually sufficient for testing whether two expressions are equal, however for the purposes of looking for a condition guarding a loop, it can be useful to be a little more general, since a front-end may have replicated the controlling expression. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l05591">5591</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l05611">llvm::ScalarEvolution::SimplifyICmpOperands()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ce57443956e69ceb421686abf513aa8"></a><!-- doxytag: member="ScalarEvolution.cpp::INITIALIZE_PASS_BEGIN" ref="a9ce57443956e69ceb421686abf513aa8" args="(ScalarEvolution,"scalar-evolution","Scalar Evolution Analysis", false, true) INITIALIZE_PASS_END(ScalarEvolution" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">INITIALIZE_PASS_BEGIN </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>" </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Scalar Evolution Analysis" </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="LoopSimplify_8cpp.html#a13f020c6a40eb04f1b4f9ddfbb004ce0">true</a> </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7170e1b99a9c472642f756b8cf098afa"></a><!-- doxytag: member="ScalarEvolution.cpp::PrintLoopInfo" ref="a7170e1b99a9c472642f756b8cf098afa" args="(raw_ostream &OS, ScalarEvolution *SE, const Loop *L)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void PrintLoopInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1raw__ostream.html">raw_ostream</a> & </td>
+          <td class="paramname"><em>OS</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> * </td>
+          <td class="paramname"><em>SE</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l06648">6648</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="LoopInfo_8h_source.html#l00131">llvm::LoopBase< BlockT, LoopT >::begin()</a>, <a class="el" href="LoopInfo_8h_source.html#l00132">llvm::LoopBase< BlockT, LoopT >::end()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l04016">llvm::ScalarEvolution::getBackedgeTakenCount()</a>, <a class="el" href="LoopInfoImpl_8h_source.html#l00066">llvm::LoopBase< BlockT, LoopT >::getExitBlocks()</a>, <a class="el" href="LoopInfo_8h_source.html#l00096">llvm::LoopBase< BlockT, LoopT >::getHeader()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l04023">llvm::ScalarEvolution::getMaxBackedgeTakenCount()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l06644">llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>, a
 nd <a class="el" href="AsmWriter_8cpp_source.html#l01135">llvm::WriteAsOperand()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06683">llvm::ScalarEvolution::print()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af50d189708d19a31f6c189c947c45dcc"></a><!-- doxytag: member="ScalarEvolution.cpp::PushDefUseChildren" ref="af50d189708d19a31f6c189c947c45dcc" args="(Instruction *I, SmallVectorImpl< Instruction * > &Worklist)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void PushDefUseChildren </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * > & </td>
+          <td class="paramname"><em>Worklist</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>PushDefUseChildren - Push users of the given Instruction onto the given Worklist. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l02935">2935</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike >::push_back()</a>, <a class="el" href="Value_8h_source.html#l00145">llvm::Value::use_begin()</a>, and <a class="el" href="Value_8h_source.html#l00147">llvm::Value::use_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l04116">llvm::ScalarEvolution::forgetLoop()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l04155">llvm::ScalarEvolution::forgetValue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a649011f27bb212ab1bdd0ec7e041da79"></a><!-- doxytag: member="ScalarEvolution.cpp::PushLoopPHIs" ref="a649011f27bb212ab1bdd0ec7e041da79" args="(const Loop *L, SmallVectorImpl< Instruction * > &Worklist)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void PushLoopPHIs </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Loop.html">Loop</a> * </td>
+          <td class="paramname"><em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * > & </td>
+          <td class="paramname"><em>Worklist</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>PushLoopPHIs - Push PHI nodes in the header of the given loop onto the given Worklist. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l04030">4030</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="LoopInfo_8h_source.html#l00096">llvm::LoopBase< BlockT, LoopT >::getHeader()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, and <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike >::push_back()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l04116">llvm::ScalarEvolution::forgetLoop()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acbf7b12e086d64750b0bbc87a79d834a"></a><!-- doxytag: member="ScalarEvolution.cpp::replaceSubString" ref="acbf7b12e086d64750b0bbc87a79d834a" args="(std::string &Str, StringRef From, StringRef To)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void replaceSubString </td>
+          <td>(</td>
+          <td class="paramtype">std::string & </td>
+          <td class="paramname"><em>Str</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1StringRef.html">StringRef</a> </td>
+          <td class="paramname"><em>From</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1StringRef.html">StringRef</a> </td>
+          <td class="paramname"><em>To</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>replaceSubString - Replaces all occurences of From in Str with To. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l06947">6947</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="StringRef_8h_source.html#l00108">llvm::StringRef::data()</a>, and <a class="el" href="StringRef_8h_source.html#l00114">llvm::StringRef::size()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06957">getLoopBackedgeTakenCounts()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad618f8b1d1ddca11c0faa9ff26bd9e61"></a><!-- doxytag: member="ScalarEvolution.cpp::SolveLinEquationWithOverflow" ref="ad618f8b1d1ddca11c0faa9ff26bd9e61" args="(const APInt &A, const APInt &B, ScalarEvolution &SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a>* SolveLinEquationWithOverflow </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>SolveLinEquationWithOverflow - Finds the minimum unsigned root of the following equation:</p>
+<p>A * X = B (mod N)</p>
+<p>where N = 2^BW and BW is the common bit width of A and B. The signedness of A and B isn't important.</p>
+<p>If the equation does not have a solution, SCEVCouldNotCompute is returned. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l05304">5304</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8cpp_source.html#l00736">llvm::APInt::countTrailingZeros()</a>, <a class="el" href="APInt_8h_source.html#l01163">llvm::APInt::getBitWidth()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00313">llvm::ScalarEvolution::getConstant()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02713">llvm::ScalarEvolution::getCouldNotCompute()</a>, <a class="el" href="APInt_8cpp_source.html#l01127">llvm::APInt::lshr()</a>, <a class="el" href="APInt_8cpp_source.html#l01352">llvm::APInt::multiplicativeInverse()</a>, <a class="el" href="APInt_8cpp_source.html#l00583">llvm::APInt::setBit()</a>, <a class="el" href="APInt_8cpp_source.html#l00919">llvm::APInt::trunc()</a>, <a class="el" href="APInt_8h_source.html#l01734">llvm::APIntOps::urem()</a>, and <a class="el" href="APInt_8cpp_source.html#l00983">llvm::APInt::zext()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a67c8a10b1b2a753341ddf1db52f28a5b"></a><!-- doxytag: member="ScalarEvolution.cpp::SolveQuadraticEquation" ref="a67c8a10b1b2a753341ddf1db52f28a5b" args="(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static std::pair<const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *,const <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> *> SolveQuadraticEquation </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> * </td>
+          <td class="paramname"><em>AddRec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> & </td>
+          <td class="paramname"><em>SE</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>SolveQuadraticEquation - Find the roots of the quadratic equation for the given quadratic chrec {L,+,M,+,N}. This returns either the two roots (which might be the same) or two SCEVCouldNotCompute objects. </p>
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l05348">5348</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>References <a class="el" href="ARMBaseInfo_8h_source.html#l00098">llvm::ARM_PROC::A</a>, <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l00313">llvm::ScalarEvolution::getConstant()</a>, <a class="el" href="ScalarEvolution_8h_source.html#l00546">llvm::ScalarEvolution::getContext()</a>, <a class="el" href="ScalarEvolution_8cpp_source.html#l02713">llvm::ScalarEvolution::getCouldNotCompute()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00147">llvm::SCEVNAryExpr::getNumOperands()</a>, <a class="el" href="ScalarEvolutionExpressions_8h_source.html#l00148">llvm::SCEVNAryExpr::getOperand()</a>, <a class="el" href="APInt_8h_source.html#l00346">llvm::APInt::isMinValue()</a>, <a class="el" href="regcomp_8c.html#a0240ac85
 1181b84ac374872dc5434ee4">N</a>, <a class="el" href="regutils_8h_source.html#l00039">NC</a>, <a class="el" href="APInt_8h_source.html#l00802">llvm::APInt::sdiv()</a>, and <a class="el" href="APInt_8h_source.html#l01716">llvm::APIntOps::sdiv()</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06417">llvm::SCEVAddRecExpr::getNumIterationsInRange()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2e762a8d9c438420a709c5c23f7b0b0c"></a><!-- doxytag: member="ScalarEvolution.cpp::STATISTIC" ref="a2e762a8d9c438420a709c5c23f7b0b0c" args="(NumArrayLenItCounts,"Number of trip counts computed with array length")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumArrayLenItCounts </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of trip counts computed with array length" </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0632c132990e2eb3a245f84fb61c4685"></a><!-- doxytag: member="ScalarEvolution.cpp::STATISTIC" ref="a0632c132990e2eb3a245f84fb61c4685" args="(NumTripCountsComputed,"Number of loops with predictable loop counts")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumTripCountsComputed </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> with predictable loop counts" </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58efee95012b0f967da74e4da6feae92"></a><!-- doxytag: member="ScalarEvolution.cpp::STATISTIC" ref="a58efee95012b0f967da74e4da6feae92" args="(NumTripCountsNotComputed,"Number of loops without predictable loop counts")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumTripCountsNotComputed </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> without predictable loop counts" </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a171d243931d6624f63d9b82094921792"></a><!-- doxytag: member="ScalarEvolution.cpp::STATISTIC" ref="a171d243931d6624f63d9b82094921792" args="(NumBruteForceTripCountsComputed,"Number of loops with trip counts computed by force")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumBruteForceTripCountsComputed </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of <a class="el" href="LoopSimplify_8cpp.html#ac68567aa12ef395f71061eff8f6dd7df">loops</a> with trip counts computed by force" </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6c073d72f1aa69d68ffb88bf12a9c1b0"></a><!-- doxytag: member="ScalarEvolution.cpp::umul_ov" ref="a6c073d72f1aa69d68ffb88bf12a9c1b0" args="(uint64_t i, uint64_t j, bool &Overflow)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static uint64_t umul_ov </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>j</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> & </td>
+          <td class="paramname"><em>Overflow</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l01826">1826</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l01835">Choose()</a>, and <a class="el" href="ScalarEvolution_8cpp_source.html#l01860">llvm::ScalarEvolution::getMulExpr()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a503499d4ac1af5de3ac8a7e4805e14aa"></a><!-- doxytag: member="ScalarEvolution.cpp::Analysis" ref="a503499d4ac1af5de3ac8a7e4805e14aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">scalar Scalar Evolution Analysis</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00118">118</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa04c31b8a224e9f4e66ba448f05e9d0"></a><!-- doxytag: member="ScalarEvolution.cpp::evolution" ref="afa04c31b8a224e9f4e66ba448f05e9d0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">scalar <a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00118">118</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab98634f319efc49e653ccb25caaf4090"></a><!-- doxytag: member="ScalarEvolution.cpp::false" ref="ab98634f319efc49e653ccb25caaf4090" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">scalar Scalar Evolution <a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ScalarEvolution_8cpp_source.html#l00118">118</a> of file <a class="el" href="ScalarEvolution_8cpp_source.html">ScalarEvolution.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c75b3f59d1f60387c0e3dd3aaf1ba9a"></a><!-- doxytag: member="ScalarEvolution.cpp::MaxBruteForceIterations" ref="a1c75b3f59d1f60387c0e3dd3aaf1ba9a" args="("scalar-evolution-max-iterations", cl::ReallyHidden, cl::desc("Maximum number of iterations SCEV will ""symbolically execute a constant ""derived loop"), cl::init(100))" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classllvm_1_1cl_1_1opt.html">cl::opt</a><<a class="el" href="classunsigned.html">unsigned</a>> <a class="el" href="ScalarEvolution_8cpp.html#a1c75b3f59d1f60387c0e3dd3aaf1ba9a">MaxBruteForceIterations</a>("scalar-<a class="el" href="ScalarEvolution_8cpp.html#afa04c31b8a224e9f4e66ba448f05e9d0">evolution</a>-max-iterations", cl::ReallyHidden, <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Maximum number of iterations <a class="el" href="classllvm_1_1SCEV.html">SCEV</a> will ""symbolically execute a constant ""derived loop"), cl::init(100))<code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a07df02be5b2e877418f82b80a81d8800"></a><!-- doxytag: member="ScalarEvolution.cpp::VerifySCEV" ref="a07df02be5b2e877418f82b80a81d8800" args="("verify-scev", cl::desc("Verify ScalarEvolution's backedge taken counts (slow)"))" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classllvm_1_1cl_1_1opt.html">cl::opt</a><<a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a>> <a class="el" href="ScalarEvolution_8cpp.html#a07df02be5b2e877418f82b80a81d8800">VerifySCEV</a>("verify-scev", cl::desc("Verify <a class="el" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a>'s backedge taken counts (slow)"))<code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="ScalarEvolution_8cpp_source.html#l06977">llvm::ScalarEvolution::verifyAnalysis()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:39 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarEvolution_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+9bb9af33c589efeac59e74b9db3048e2
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ScalarReplAggregates_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScalarReplAggregates_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScalarReplAggregates_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScalarReplAggregates_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,184 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ScalarReplAggregates.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/Transforms/Scalar.h",height=0.2,width=0.4,color="black",URL="$Transforms_2Scalar_8h.html"];
+  Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/Constants.h",height=0.2,width=0.4,color="black",URL="$Constants_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Constant.h",height=0.2,width=0.4,color="red",URL="$Constant_8h.html"];
+  Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/OperandTraits.h",height=0.2,width=0.4,color="red",URL="$OperandTraits_8h.html"];
+  Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/ADT/APInt.h",height=0.2,width=0.4,color="red",URL="$APInt_8h.html"];
+  Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="red",URL="$ArrayRef_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node6 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="red",URL="$MathExtras_8h.html"];
+  Node3 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/ADT/APFloat.h",height=0.2,width=0.4,color="black",URL="$APFloat_8h.html"];
+  Node11 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/DIBuilder.h",height=0.2,width=0.4,color="black",URL="$DIBuilder_8h.html"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node12 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node1 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="llvm/DebugInfo.h",height=0.2,width=0.4,color="black",URL="$DebugInfo_8h.html"];
+  Node15 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/ADT/SmallPtrSet.h",height=0.2,width=0.4,color="red",URL="$SmallPtrSet_8h.html"];
+  Node16 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Support/Dwarf.h",height=0.2,width=0.4,color="black",URL="$Dwarf_8h.html"];
+  Node1 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="black",URL="$DerivedTypes_8h.html"];
+  Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/Type.h",height=0.2,width=0.4,color="red",URL="$Type_8h.html"];
+  Node19 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/Function.h",height=0.2,width=0.4,color="black",URL="$Function_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/GlobalValue.h",height=0.2,width=0.4,color="black",URL="$GlobalValue_8h.html"];
+  Node21 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/CallingConv.h",height=0.2,width=0.4,color="black",URL="$CallingConv_8h.html"];
+  Node20 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/BasicBlock.h",height=0.2,width=0.4,color="red",URL="$BasicBlock_8h.html"];
+  Node23 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="red",URL="$Twine_8h.html"];
+  Node24 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="red",URL="$ErrorHandling_8h.html"];
+  Node25 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Argument.h",height=0.2,width=0.4,color="red",URL="$Argument_8h.html"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Attributes.h",height=0.2,width=0.4,color="red",URL="$Attributes_8h.html"];
+  Node27 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/ADT/ilist_node.h",height=0.2,width=0.4,color="black",URL="$ilist__node_8h.html"];
+  Node26 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/GlobalVariable.h",height=0.2,width=0.4,color="black",URL="$GlobalVariable_8h.html"];
+  Node29 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/IRBuilder.h",height=0.2,width=0.4,color="black",URL="$IRBuilder_8h.html"];
+  Node30 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Instructions.h",height=0.2,width=0.4,color="red",URL="$Instructions_8h.html"];
+  Node31 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/DataLayout.h",height=0.2,width=0.4,color="red",URL="$DataLayout_8h.html"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/Pass.h",height=0.2,width=0.4,color="red",URL="$Pass_8h.html"];
+  Node33 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="llvm/LLVMContext.h",height=0.2,width=0.4,color="black",URL="$LLVMContext_8h.html"];
+  Node34 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/Support/ConstantFolder.h",height=0.2,width=0.4,color="red",URL="$ConstantFolder_8h.html"];
+  Node35 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/IntrinsicInst.h",height=0.2,width=0.4,color="red",URL="$IntrinsicInst_8h.html"];
+  Node36 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Module.h",height=0.2,width=0.4,color="red",URL="$Module_8h.html"];
+  Node37 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Operator.h",height=0.2,width=0.4,color="red",URL="$Operator_8h.html"];
+  Node38 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/ADT/SetVector.h",height=0.2,width=0.4,color="red",URL="$SetVector_8h.html"];
+  Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/ADT/Statistic.h",height=0.2,width=0.4,color="red",URL="$Statistic_8h.html"];
+  Node1 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Analysis/Dominators.h",height=0.2,width=0.4,color="red",URL="$Dominators_8h.html"];
+  Node41 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="black",URL="$raw__ostream_8h.html"];
+  Node42 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/Analysis/Loads.h",height=0.2,width=0.4,color="black",URL="$Loads_8h.html"];
+  Node43 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Analysis/ValueTracking.h",height=0.2,width=0.4,color="black",URL="$ValueTracking_8h.html"];
+  Node44 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/Support/CallSite.h",height=0.2,width=0.4,color="red",URL="$CallSite_8h.html"];
+  Node45 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node1 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/GetElementPtrTypeIterator.h",height=0.2,width=0.4,color="red",URL="$GetElementPtrTypeIterator_8h.html"];
+  Node47 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Transforms/Utils/Local.h",height=0.2,width=0.4,color="black",URL="$Local_8h.html"];
+  Node48 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/Transforms/Utils/PromoteMemToReg.h",height=0.2,width=0.4,color="red",URL="$PromoteMemToReg_8h.html"];
+  Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/Transforms/Utils/SSAUpdater.h",height=0.2,width=0.4,color="black",URL="$SSAUpdater_8h.html"];
+  Node50 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/Scalar_2SimplifyLibCalls_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Scalar_2SimplifyLibCalls_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Scalar_2SimplifyLibCalls_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Scalar_2SimplifyLibCalls_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1766 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: SimplifyLibCalls.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_22ea62e2015f6a823fddac4ac38ba517.html">Transforms</a>      </li>
+      <li class="navelem"><a class="el" href="dir_19df7bbd99eeba0b048ee47f392d9ea7.html">Scalar</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">Scalar/SimplifyLibCalls.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="Scalar_2SimplifyLibCalls_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- SimplifyLibCalls.cpp - Optimize specific well-known library calls --===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file implements a simple pass that applies a variety of small</span>
+<a name="l00011"></a>00011 <span class="comment">// optimizations for calls to specific well-known function calls (e.g. runtime</span>
+<a name="l00012"></a>00012 <span class="comment">// library functions).   Any optimization that takes the very simple form</span>
+<a name="l00013"></a>00013 <span class="comment">// "replace call to library function with simpler code that provides the same</span>
+<a name="l00014"></a>00014 <span class="comment">// result" belongs in this file.</span>
+<a name="l00015"></a>00015 <span class="comment">//</span>
+<a name="l00016"></a>00016 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00017"></a>00017 
+<a name="l00018"></a><a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">00018</a> <span class="preprocessor">#define DEBUG_TYPE "simplify-libcalls"</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="Transforms_2Scalar_8h.html">llvm/Transforms/Scalar.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="BuildLibCalls_8h.html">llvm/Transforms/Utils/BuildLibCalls.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="IRBuilder_8h.html">llvm/IRBuilder.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="Intrinsics_8h.html">llvm/Intrinsics.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="LLVMContext_8h.html">llvm/LLVMContext.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="Module_8h.html">llvm/Module.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="Pass_8h.html">llvm/Pass.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="STLExtras_8h.html">llvm/ADT/STLExtras.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="SmallPtrSet_8h.html">llvm/ADT/SmallPtrSet.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="Statistic_8h.html">llvm/ADT/Statistic.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="StringMap_8h.html">llvm/ADT/StringMap.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="ValueTracking_8h.html">llvm/Analysis/ValueTracking.h</a>"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="CommandLine_8h.html">llvm/Support/CommandLine.h</a>"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="DataLayout_8h.html">llvm/DataLayout.h</a>"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="TargetLibraryInfo_8h.html">llvm/Target/TargetLibraryInfo.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="config_8h.html">llvm/Config/config.h</a>"</span>            <span class="comment">// FIXME: Shouldn't depend on host!</span>
+<a name="l00037"></a>00037 <span class="keyword">using namespace </span>llvm;
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumSimplified, <span class="stringliteral">"Number of library calls simplified"</span>);
+<a name="l00040"></a>00040 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumAnnotated, <span class="stringliteral">"Number of attributes added to library functions"</span>);
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a> <a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a85b6b7c082723d74f04ac701c91daa47">UnsafeFPShrink</a>(<span class="stringliteral">"enable-double-float-shrink"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00043"></a>00043                                    <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(<span class="keyword">false</span>),
+<a name="l00044"></a>00044                                    <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable unsafe double to float "</span>
+<a name="l00045"></a>00045                                             <span class="stringliteral">"shrinking for math lib calls"</span>));
+<a name="l00046"></a>00046 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00047"></a>00047 <span class="comment">// Optimizer Base Class</span>
+<a name="l00048"></a>00048 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00049"></a>00049 <span class="comment"></span>
+<a name="l00050"></a>00050 <span class="comment">/// This class is the abstract base class for the set of optimizations that</span>
+<a name="l00051"></a>00051 <span class="comment">/// corresponds to one library call.</span>
+<a name="l00052"></a>00052 <span class="comment"></span><span class="keyword">namespace </span>{
+<a name="l00053"></a>00053 <span class="keyword">class </span>LibCallOptimization {
+<a name="l00054"></a>00054 <span class="keyword">protected</span>:
+<a name="l00055"></a>00055   <a class="code" href="classllvm_1_1Function.html">Function</a> *Caller;
+<a name="l00056"></a>00056   <span class="keyword">const</span> <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD;
+<a name="l00057"></a>00057   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI;
+<a name="l00058"></a>00058   <a class="code" href="classllvm_1_1LLVMContext.html">LLVMContext</a>* Context;
+<a name="l00059"></a>00059 <span class="keyword">public</span>:
+<a name="l00060"></a>00060   LibCallOptimization() { }
+<a name="l00061"></a>00061   <span class="keyword">virtual</span> ~LibCallOptimization() {}
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">  /// CallOptimizer - This pure virtual method is implemented by base classes to</span>
+<a name="l00064"></a>00064 <span class="comment">  /// do various optimizations.  If this returns null then no transformation was</span>
+<a name="l00065"></a>00065 <span class="comment">  /// performed.  If it returns CI, then it transformed the call and CI is to be</span>
+<a name="l00066"></a>00066 <span class="comment">  /// deleted.  If it returns something else, replace CI with the new value and</span>
+<a name="l00067"></a>00067 <span class="comment">  /// delete CI.</span>
+<a name="l00068"></a>00068 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B)
+<a name="l00069"></a>00069     =0;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OptimizeCall(<a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <span class="keyword">const</span> <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD,
+<a name="l00072"></a>00072                       <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00073"></a>00073     Caller = CI-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#aca229503e4f5c83a187a6a921c625fa8">getParent</a>();
+<a name="l00074"></a>00074     this->TD = TD;
+<a name="l00075"></a>00075     this->TLI = TLI;
+<a name="l00076"></a>00076     <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>())
+<a name="l00077"></a>00077       Context = &CI-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>()-><a class="code" href="classllvm_1_1Function.html#a2da53ac53516a3f16191f4c8a8eaa3e5">getContext</a>();
+<a name="l00078"></a>00078 
+<a name="l00079"></a>00079     <span class="comment">// We never change the calling convention.</span>
+<a name="l00080"></a>00080     <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1CallInst.html#a2a65eaf09953a013c2820f6857c647f0">getCallingConv</a>() != <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">llvm::CallingConv::C</a>)
+<a name="l00081"></a>00081       <span class="keywordflow">return</span> NULL;
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083     <span class="keywordflow">return</span> CallOptimizer(CI-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>(), CI, B);
+<a name="l00084"></a>00084   }
+<a name="l00085"></a>00085 };
+<a name="l00086"></a>00086 } <span class="comment">// End anonymous namespace.</span>
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00090"></a>00090 <span class="comment">// Helper Functions</span>
+<a name="l00091"></a>00091 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00092"></a>00092 
+<a name="l00093"></a><a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#af1f232eeeb83780c2e2b0f65dc03e3f1">00093</a> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#af1f232eeeb83780c2e2b0f65dc03e3f1">CallHasFloatingPointArgument</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI) {
+<a name="l00094"></a>00094   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1User.html#ab829c5fd1bbf60f869608ba1143be151">CallInst::const_op_iterator</a> it = CI-><a class="code" href="classllvm_1_1User.html#a2eeb1c7ed1cfe403f2ae0470e36c07e2">op_begin</a>(), e = CI-><a class="code" href="classllvm_1_1User.html#af41f58e730804d10b91fcff39b035f74">op_end</a>();
+<a name="l00095"></a>00095        it != e; ++it) {
+<a name="l00096"></a>00096     <span class="keywordflow">if</span> ((*it)->getType()->isFloatingPointTy())
+<a name="l00097"></a>00097       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00098"></a>00098   }
+<a name="l00099"></a>00099   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102 <span class="keyword">namespace </span>{
+<a name="l00103"></a>00103 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00104"></a>00104 <span class="comment">// Math Library Optimizations</span>
+<a name="l00105"></a>00105 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00108"></a>00108 <span class="comment">// Double -> Float Shrinking Optimizations for Unary Functions like 'floor'</span>
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="keyword">struct </span>UnaryDoubleFPOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00111"></a>00111   <span class="keywordtype">bool</span> CheckRetType;
+<a name="l00112"></a>00112   UnaryDoubleFPOpt(<span class="keywordtype">bool</span> CheckReturnType): CheckRetType(CheckReturnType) {}
+<a name="l00113"></a>00113   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00114"></a>00114     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00115"></a>00115     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>() ||
+<a name="l00116"></a>00116         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>())
+<a name="l00117"></a>00117       <span class="keywordflow">return</span> 0;
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119     <span class="keywordflow">if</span> (CheckRetType) {
+<a name="l00120"></a>00120       <span class="comment">// Check if all the uses for function like 'sin' are converted to float.</span>
+<a name="l00121"></a>00121       <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UseI = CI-><a class="code" href="classllvm_1_1Value.html#a413abcab8dbc3900fc2fde96a5d8fca6">use_begin</a>(); UseI != CI-><a class="code" href="classllvm_1_1Value.html#ad86469939d2a8bdd4169be9403b89f5a">use_end</a>();
+<a name="l00122"></a>00122           ++UseI) {
+<a name="l00123"></a>00123         <a class="code" href="classllvm_1_1FPTruncInst.html" title="This class represents a truncation of floating point types.">FPTruncInst</a> *Cast = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1FPTruncInst.html" title="This class represents a truncation of floating point types.">FPTruncInst</a>>(*UseI);
+<a name="l00124"></a>00124         <span class="keywordflow">if</span> (Cast == 0 || !Cast-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>())
+<a name="l00125"></a>00125           <span class="keywordflow">return</span> 0;
+<a name="l00126"></a>00126       }
+<a name="l00127"></a>00127     }
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129     <span class="comment">// If this is something like 'floor((double)floatval)', convert to floorf.</span>
+<a name="l00130"></a>00130     <a class="code" href="classllvm_1_1FPExtInst.html" title="This class represents an extension of floating point types.">FPExtInst</a> *Cast = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1FPExtInst.html" title="This class represents an extension of floating point types.">FPExtInst</a>>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0));
+<a name="l00131"></a>00131     <span class="keywordflow">if</span> (Cast == 0 || !Cast-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>())
+<a name="l00132"></a>00132       <span class="keywordflow">return</span> 0;
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134     <span class="comment">// floor((double)floatval) -> (double)floorf(floatval)</span>
+<a name="l00135"></a>00135     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = Cast-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00136"></a>00136     V = <a class="code" href="namespacellvm.html#a3a0e639fbbfb2358672f68225d2ec758">EmitUnaryFloatFnCall</a>(V, Callee-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>(), B, Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00137"></a>00137     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a280ee6e142a03897a4663bfdfd97d18d">CreateFPExt</a>(V, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a20584f4f40ed5bd24173c40c4185551a" title="getDoubleTy - Fetch the type representing a 64-bit floating point value.">getDoubleTy</a>());
+<a name="l00138"></a>00138   }
+<a name="l00139"></a>00139 };
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00142"></a>00142 <span class="comment">// 'cos*' Optimizations</span>
+<a name="l00143"></a>00143 <span class="keyword">struct </span>CosOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00144"></a>00144   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00145"></a>00145     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a> = NULL;
+<a name="l00146"></a>00146     <span class="keywordflow">if</span> (<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a85b6b7c082723d74f04ac701c91daa47">UnsafeFPShrink</a> && Callee-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() == <span class="stringliteral">"cos"</span> &&
+<a name="l00147"></a>00147         TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6facbe67d9e2920bce533f6874be1fe34c5" title="float cosf(float x);">LibFunc::cosf</a>)) {
+<a name="l00148"></a>00148       UnaryDoubleFPOpt UnsafeUnaryDoubleFP(<span class="keyword">true</span>);
+<a name="l00149"></a>00149       Ret = UnsafeUnaryDoubleFP.CallOptimizer(Callee, CI, B);
+<a name="l00150"></a>00150     }
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00153"></a>00153     <span class="comment">// Just make sure this has 1 argument of FP type, which matches the</span>
+<a name="l00154"></a>00154     <span class="comment">// result type.</span>
+<a name="l00155"></a>00155     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>() != FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) ||
+<a name="l00156"></a>00156         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a40113570b0c52a18c34cabed8359e2c8">isFloatingPointTy</a>())
+<a name="l00157"></a>00157       <span class="keywordflow">return</span> Ret;
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159     <span class="comment">// cos(-x) -> cos(x)</span>
+<a name="l00160"></a>00160     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op1 = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00161"></a>00161     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html#a97605084ee7b12f8cbee3b671923e794">BinaryOperator::isFNeg</a>(Op1)) {
+<a name="l00162"></a>00162       <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *BinExpr = cast<BinaryOperator>(Op1);
+<a name="l00163"></a>00163       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a7e31b0c02df2aeed261b103b790cc01e">CreateCall</a>(Callee, BinExpr-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), <span class="stringliteral">"cos"</span>);
+<a name="l00164"></a>00164     }
+<a name="l00165"></a>00165     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a>;
+<a name="l00166"></a>00166   }
+<a name="l00167"></a>00167 };
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00170"></a>00170 <span class="comment">// 'pow*' Optimizations</span>
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="keyword">struct </span>PowOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00173"></a>00173   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00174"></a>00174     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Ret = NULL;
+<a name="l00175"></a>00175     <span class="keywordflow">if</span> (<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a85b6b7c082723d74f04ac701c91daa47">UnsafeFPShrink</a> && Callee-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() == <span class="stringliteral">"pow"</span> &&
+<a name="l00176"></a>00176         TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa62c8dfa59caa8250b9c988b6d49fc18c" title="float powf(float x, float y);">LibFunc::powf</a>)) {
+<a name="l00177"></a>00177       UnaryDoubleFPOpt UnsafeUnaryDoubleFP(<span class="keyword">true</span>);
+<a name="l00178"></a>00178       Ret = UnsafeUnaryDoubleFP.CallOptimizer(Callee, CI, B);
+<a name="l00179"></a>00179     }
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00182"></a>00182     <span class="comment">// Just make sure this has 2 arguments of the same FP type, which match the</span>
+<a name="l00183"></a>00183     <span class="comment">// result type.</span>
+<a name="l00184"></a>00184     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>() != FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) ||
+<a name="l00185"></a>00185         FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) != FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1) ||
+<a name="l00186"></a>00186         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a40113570b0c52a18c34cabed8359e2c8">isFloatingPointTy</a>())
+<a name="l00187"></a>00187       <span class="keywordflow">return</span> Ret;
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op1 = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), *Op2 = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1);
+<a name="l00190"></a>00190     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *Op1C = dyn_cast<ConstantFP>(Op1)) {
+<a name="l00191"></a>00191       <span class="keywordflow">if</span> (Op1C->isExactlyValue(1.0))  <span class="comment">// pow(1.0, x) -> 1.0</span>
+<a name="l00192"></a>00192         <span class="keywordflow">return</span> Op1C;
+<a name="l00193"></a>00193       <span class="keywordflow">if</span> (Op1C->isExactlyValue(2.0))  <span class="comment">// pow(2.0, x) -> exp2(x)</span>
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a3a0e639fbbfb2358672f68225d2ec758">EmitUnaryFloatFnCall</a>(Op2, <span class="stringliteral">"exp2"</span>, B, Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197     <a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *Op2C = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a>>(Op2);
+<a name="l00198"></a>00198     <span class="keywordflow">if</span> (Op2C == 0) <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a>;
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200     <span class="keywordflow">if</span> (Op2C-><a class="code" href="classllvm_1_1ConstantFP.html#a0f839f7633a4709c1d89e128f49b3d43">getValueAPF</a>().<a class="code" href="classllvm_1_1APFloat.html#a30b29f2be19eb73f6225de032a1fafb3">isZero</a>())  <span class="comment">// pow(x, 0.0) -> 1.0</span>
+<a name="l00201"></a>00201       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantFP.html#a5eb8f7a5d3cfdd127ad9db2e425e14eb">ConstantFP::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1.0);
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203     <span class="keywordflow">if</span> (Op2C-><a class="code" href="classllvm_1_1ConstantFP.html#a3dfcda042e1f4f0953dc47d268cc560f">isExactlyValue</a>(0.5)) {
+<a name="l00204"></a>00204       <span class="comment">// Expand pow(x, 0.5) to (x == -infinity ? +infinity : fabs(sqrt(x))).</span>
+<a name="l00205"></a>00205       <span class="comment">// This is faster than calling pow, and still handles negative zero</span>
+<a name="l00206"></a>00206       <span class="comment">// and negative infinity correctly.</span>
+<a name="l00207"></a>00207       <span class="comment">// TODO: In fast-math mode, this could be just sqrt(x).</span>
+<a name="l00208"></a>00208       <span class="comment">// TODO: In finite-only mode, this could be just fabs(sqrt(x)).</span>
+<a name="l00209"></a>00209       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Inf = <a class="code" href="classllvm_1_1ConstantFP.html#afe0254496c59be7ea1f165f74242ef4d">ConstantFP::getInfinity</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00210"></a>00210       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NegInf = <a class="code" href="classllvm_1_1ConstantFP.html#afe0254496c59be7ea1f165f74242ef4d">ConstantFP::getInfinity</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span>);
+<a name="l00211"></a>00211       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sqrt = <a class="code" href="namespacellvm.html#a3a0e639fbbfb2358672f68225d2ec758">EmitUnaryFloatFnCall</a>(Op1, <span class="stringliteral">"sqrt"</span>, B,
+<a name="l00212"></a>00212                                          Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00213"></a>00213       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *FAbs = <a class="code" href="namespacellvm.html#a3a0e639fbbfb2358672f68225d2ec758">EmitUnaryFloatFnCall</a>(Sqrt, <span class="stringliteral">"fabs"</span>, B,
+<a name="l00214"></a>00214                                          Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00215"></a>00215       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *FCmp = B.<a class="code" href="classllvm_1_1IRBuilder.html#a4c4e0ddf48da714833f47875d2d3b95c">CreateFCmpOEQ</a>(Op1, NegInf);
+<a name="l00216"></a>00216       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sel = B.<a class="code" href="classllvm_1_1IRBuilder.html#ae19d9d49f39d404703b42161ce788954">CreateSelect</a>(FCmp, Inf, FAbs);
+<a name="l00217"></a>00217       <span class="keywordflow">return</span> Sel;
+<a name="l00218"></a>00218     }
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220     <span class="keywordflow">if</span> (Op2C-><a class="code" href="classllvm_1_1ConstantFP.html#a3dfcda042e1f4f0953dc47d268cc560f">isExactlyValue</a>(1.0))  <span class="comment">// pow(x, 1.0) -> x</span>
+<a name="l00221"></a>00221       <span class="keywordflow">return</span> Op1;
+<a name="l00222"></a>00222     <span class="keywordflow">if</span> (Op2C-><a class="code" href="classllvm_1_1ConstantFP.html#a3dfcda042e1f4f0953dc47d268cc560f">isExactlyValue</a>(2.0))  <span class="comment">// pow(x, 2.0) -> x*x</span>
+<a name="l00223"></a>00223       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#ad5fec5c08f31a41d968cc03b5426ee63">CreateFMul</a>(Op1, Op1, <span class="stringliteral">"pow2"</span>);
+<a name="l00224"></a>00224     <span class="keywordflow">if</span> (Op2C-><a class="code" href="classllvm_1_1ConstantFP.html#a3dfcda042e1f4f0953dc47d268cc560f">isExactlyValue</a>(-1.0)) <span class="comment">// pow(x, -1.0) -> 1.0/x</span>
+<a name="l00225"></a>00225       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a9bee00a6f74634db85a7ef6bca378114">CreateFDiv</a>(<a class="code" href="classllvm_1_1ConstantFP.html#a5eb8f7a5d3cfdd127ad9db2e425e14eb">ConstantFP::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1.0),
+<a name="l00226"></a>00226                           Op1, <span class="stringliteral">"powrecip"</span>);
+<a name="l00227"></a>00227     <span class="keywordflow">return</span> 0;
+<a name="l00228"></a>00228   }
+<a name="l00229"></a>00229 };
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00232"></a>00232 <span class="comment">// 'exp2' Optimizations</span>
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234 <span class="keyword">struct </span>Exp2Opt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00235"></a>00235   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00236"></a>00236     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Ret = NULL;
+<a name="l00237"></a>00237     <span class="keywordflow">if</span> (<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a85b6b7c082723d74f04ac701c91daa47">UnsafeFPShrink</a> && Callee-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() == <span class="stringliteral">"exp2"</span> &&
+<a name="l00238"></a>00238         TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa1e752b4eaa4c9db56a2bbcef82f934b9" title="double exp2(double x);">LibFunc::exp2</a>)) {
+<a name="l00239"></a>00239       UnaryDoubleFPOpt UnsafeUnaryDoubleFP(<span class="keyword">true</span>);
+<a name="l00240"></a>00240       Ret = UnsafeUnaryDoubleFP.CallOptimizer(Callee, CI, B);
+<a name="l00241"></a>00241     }
+<a name="l00242"></a>00242 
+<a name="l00243"></a>00243     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00244"></a>00244     <span class="comment">// Just make sure this has 1 argument of FP type, which matches the</span>
+<a name="l00245"></a>00245     <span class="comment">// result type.</span>
+<a name="l00246"></a>00246     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>() != FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) ||
+<a name="l00247"></a>00247         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a40113570b0c52a18c34cabed8359e2c8">isFloatingPointTy</a>())
+<a name="l00248"></a>00248       <span class="keywordflow">return</span> Ret;
+<a name="l00249"></a>00249 
+<a name="l00250"></a>00250     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00251"></a>00251     <span class="comment">// Turn exp2(sitofp(x)) -> ldexp(1.0, sext(x))  if sizeof(x) <= 32</span>
+<a name="l00252"></a>00252     <span class="comment">// Turn exp2(uitofp(x)) -> ldexp(1.0, zext(x))  if sizeof(x) < 32</span>
+<a name="l00253"></a>00253     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LdExpArg = 0;
+<a name="l00254"></a>00254     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SIToFPInst.html" title="This class represents a cast from signed integer to floating point.">SIToFPInst</a> *OpC = dyn_cast<SIToFPInst>(Op)) {
+<a name="l00255"></a>00255       <span class="keywordflow">if</span> (OpC->getOperand(0)->getType()->getPrimitiveSizeInBits() <= 32)
+<a name="l00256"></a>00256         LdExpArg = B.<a class="code" href="classllvm_1_1IRBuilder.html#a2081b822b121723df82782c24314a37e">CreateSExt</a>(OpC->getOperand(0), B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a6ee1d1e7a13072ef579558d64b208d3c" title="getInt32Ty - Fetch the type resepresenting a 32-bit integer.">getInt32Ty</a>());
+<a name="l00257"></a>00257     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1UIToFPInst.html" title="This class represents a cast unsigned integer to floating point.">UIToFPInst</a> *OpC = dyn_cast<UIToFPInst>(Op)) {
+<a name="l00258"></a>00258       <span class="keywordflow">if</span> (OpC->getOperand(0)->getType()->getPrimitiveSizeInBits() < 32)
+<a name="l00259"></a>00259         LdExpArg = B.<a class="code" href="classllvm_1_1IRBuilder.html#a277dfeaad2a2ada72a6024b0eedc5301">CreateZExt</a>(OpC->getOperand(0), B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a6ee1d1e7a13072ef579558d64b208d3c" title="getInt32Ty - Fetch the type resepresenting a 32-bit integer.">getInt32Ty</a>());
+<a name="l00260"></a>00260     }
+<a name="l00261"></a>00261 
+<a name="l00262"></a>00262     <span class="keywordflow">if</span> (LdExpArg) {
+<a name="l00263"></a>00263       <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>;
+<a name="l00264"></a>00264       <span class="keywordflow">if</span> (Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>())
+<a name="l00265"></a>00265         Name = <span class="stringliteral">"ldexpf"</span>;
+<a name="l00266"></a>00266       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>())
+<a name="l00267"></a>00267         Name = <span class="stringliteral">"ldexp"</span>;
+<a name="l00268"></a>00268       <span class="keywordflow">else</span>
+<a name="l00269"></a>00269         Name = <span class="stringliteral">"ldexpl"</span>;
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *One = <a class="code" href="classllvm_1_1ConstantFP.html#a5eb8f7a5d3cfdd127ad9db2e425e14eb">ConstantFP::get</a>(*Context, <a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a56697632782c9ab774d6c132a955674a">APFloat</a>(1.0f));
+<a name="l00272"></a>00272       <span class="keywordflow">if</span> (!Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>())
+<a name="l00273"></a>00273         One = <a class="code" href="classllvm_1_1ConstantExpr.html#a2c37909c23e7fe0eefde68ccb31e12e5">ConstantExpr::getFPExtend</a>(One, Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00274"></a>00274 
+<a name="l00275"></a>00275       <a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> *M = Caller->getParent();
+<a name="l00276"></a>00276       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Callee = M-><a class="code" href="classllvm_1_1Module.html#a0d07fe352b962089c0b190e438cd4ae2">getOrInsertFunction</a>(Name, Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00277"></a>00277                                              Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00278"></a>00278                                              B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a6ee1d1e7a13072ef579558d64b208d3c" title="getInt32Ty - Fetch the type resepresenting a 32-bit integer.">getInt32Ty</a>(), NULL);
+<a name="l00279"></a>00279       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI = B.<a class="code" href="classllvm_1_1IRBuilder.html#a902af4d6cb3a421a7f5723d0fc81efd1">CreateCall2</a>(Callee, One, LdExpArg);
+<a name="l00280"></a>00280       <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> *<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = dyn_cast<Function>(Callee-><a class="code" href="classllvm_1_1Value.html#a38ea12c04523d63adda732b9c5d6da0a">stripPointerCasts</a>()))
+<a name="l00281"></a>00281         CI-><a class="code" href="classllvm_1_1CallInst.html#acd74b2224788f8d010e47622bb3c2a04">setCallingConv</a>(<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>->getCallingConv());
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283       <span class="keywordflow">return</span> CI;
+<a name="l00284"></a>00284     }
+<a name="l00285"></a>00285     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Ret</a>;
+<a name="l00286"></a>00286   }
+<a name="l00287"></a>00287 };
+<a name="l00288"></a>00288 
+<a name="l00289"></a>00289 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00290"></a>00290 <span class="comment">// Integer Optimizations</span>
+<a name="l00291"></a>00291 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00292"></a>00292 
+<a name="l00293"></a>00293 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00294"></a>00294 <span class="comment">// 'ffs*' Optimizations</span>
+<a name="l00295"></a>00295 
+<a name="l00296"></a>00296 <span class="keyword">struct </span>FFSOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00297"></a>00297   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00298"></a>00298     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00299"></a>00299     <span class="comment">// Just make sure this has 2 arguments of the same FP type, which match the</span>
+<a name="l00300"></a>00300     <span class="comment">// result type.</span>
+<a name="l00301"></a>00301     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 ||
+<a name="l00302"></a>00302         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(32) ||
+<a name="l00303"></a>00303         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l00304"></a>00304       <span class="keywordflow">return</span> 0;
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308     <span class="comment">// Constant fold.</span>
+<a name="l00309"></a>00309     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = dyn_cast<ConstantInt>(Op)) {
+<a name="l00310"></a>00310       <span class="keywordflow">if</span> (CI->isZero()) <span class="comment">// ffs(0) -> 0.</span>
+<a name="l00311"></a>00311         <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(0);
+<a name="l00312"></a>00312       <span class="comment">// ffs(c) -> cttz(c)+1</span>
+<a name="l00313"></a>00313       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(CI->getValue().countTrailingZeros() + 1);
+<a name="l00314"></a>00314     }
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316     <span class="comment">// ffs(x) -> x != 0 ? (i32)llvm.cttz(x)+1 : 0</span>
+<a name="l00317"></a>00317     <a class="code" href="classllvm_1_1Type.html">Type</a> *ArgType = Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00318"></a>00318     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = <a class="code" href="namespacellvm_1_1Intrinsic.html#a77b5c176e55722134f1fa5bf16f4d0c1">Intrinsic::getDeclaration</a>(Callee-><a class="code" href="classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac">getParent</a>(),
+<a name="l00319"></a>00319                                          Intrinsic::cttz, ArgType);
+<a name="l00320"></a>00320     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = B.<a class="code" href="classllvm_1_1IRBuilder.html#a902af4d6cb3a421a7f5723d0fc81efd1">CreateCall2</a>(F, Op, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a337deb4326c2dbbe852f77d2d213a9fb" title="getFalse - Get the constant value for i1 false.">getFalse</a>(), <span class="stringliteral">"cttz"</span>);
+<a name="l00321"></a>00321     V = B.<a class="code" href="classllvm_1_1IRBuilder.html#a112f87f5844b5d94c07940f3d47f1e99">CreateAdd</a>(V, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(V->getType(), 1));
+<a name="l00322"></a>00322     V = B.<a class="code" href="classllvm_1_1IRBuilder.html#afdd8a08bfcbd94f60d166a71a3e79ff3">CreateIntCast</a>(V, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a6ee1d1e7a13072ef579558d64b208d3c" title="getInt32Ty - Fetch the type resepresenting a 32-bit integer.">getInt32Ty</a>(), <span class="keyword">false</span>);
+<a name="l00323"></a>00323 
+<a name="l00324"></a>00324     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Cond = B.<a class="code" href="classllvm_1_1IRBuilder.html#a609c7b4d7eb90f7c4627da58dc00fa42">CreateICmpNE</a>(Op, <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(ArgType));
+<a name="l00325"></a>00325     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#ae19d9d49f39d404703b42161ce788954">CreateSelect</a>(Cond, V, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(0));
+<a name="l00326"></a>00326   }
+<a name="l00327"></a>00327 };
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00330"></a>00330 <span class="comment">// 'isdigit' Optimizations</span>
+<a name="l00331"></a>00331 
+<a name="l00332"></a>00332 <span class="keyword">struct </span>IsDigitOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00333"></a>00333   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00334"></a>00334     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00335"></a>00335     <span class="comment">// We require integer(i32)</span>
+<a name="l00336"></a>00336     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00337"></a>00337         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(32))
+<a name="l00338"></a>00338       <span class="keywordflow">return</span> 0;
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340     <span class="comment">// isdigit(c) -> (c-'0') <u 10</span>
+<a name="l00341"></a>00341     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00342"></a>00342     Op = B.<a class="code" href="classllvm_1_1IRBuilder.html#afa1cb82e021c7f516f65d40162fe6c53">CreateSub</a>(Op, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(<span class="charliteral">'0'</span>), <span class="stringliteral">"isdigittmp"</span>);
+<a name="l00343"></a>00343     Op = B.<a class="code" href="classllvm_1_1IRBuilder.html#a9c30c87af01068ceae02cd371748d175">CreateICmpULT</a>(Op, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(10), <span class="stringliteral">"isdigit"</span>);
+<a name="l00344"></a>00344     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a277dfeaad2a2ada72a6024b0eedc5301">CreateZExt</a>(Op, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00345"></a>00345   }
+<a name="l00346"></a>00346 };
+<a name="l00347"></a>00347 
+<a name="l00348"></a>00348 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00349"></a>00349 <span class="comment">// 'isascii' Optimizations</span>
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351 <span class="keyword">struct </span>IsAsciiOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00352"></a>00352   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00353"></a>00353     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00354"></a>00354     <span class="comment">// We require integer(i32)</span>
+<a name="l00355"></a>00355     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00356"></a>00356         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(32))
+<a name="l00357"></a>00357       <span class="keywordflow">return</span> 0;
+<a name="l00358"></a>00358 
+<a name="l00359"></a>00359     <span class="comment">// isascii(c) -> c <u 128</span>
+<a name="l00360"></a>00360     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00361"></a>00361     Op = B.<a class="code" href="classllvm_1_1IRBuilder.html#a9c30c87af01068ceae02cd371748d175">CreateICmpULT</a>(Op, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(128), <span class="stringliteral">"isascii"</span>);
+<a name="l00362"></a>00362     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a277dfeaad2a2ada72a6024b0eedc5301">CreateZExt</a>(Op, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00363"></a>00363   }
+<a name="l00364"></a>00364 };
+<a name="l00365"></a>00365 
+<a name="l00366"></a>00366 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00367"></a>00367 <span class="comment">// 'abs', 'labs', 'llabs' Optimizations</span>
+<a name="l00368"></a>00368 
+<a name="l00369"></a>00369 <span class="keyword">struct </span>AbsOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00370"></a>00370   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00371"></a>00371     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00372"></a>00372     <span class="comment">// We require integer(integer) where the types agree.</span>
+<a name="l00373"></a>00373     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00374"></a>00374         FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) != FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>())
+<a name="l00375"></a>00375       <span class="keywordflow">return</span> 0;
+<a name="l00376"></a>00376 
+<a name="l00377"></a>00377     <span class="comment">// abs(x) -> x >s -1 ? x : -x</span>
+<a name="l00378"></a>00378     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0);
+<a name="l00379"></a>00379     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Pos = B.<a class="code" href="classllvm_1_1IRBuilder.html#a33a5c648796fb4593268c1d150f8582f">CreateICmpSGT</a>(Op, <a class="code" href="classllvm_1_1Constant.html#a4d51384de6e1798bb6aa875aebeea9f0" title="Get the all ones value.">Constant::getAllOnesValue</a>(Op-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()),
+<a name="l00380"></a>00380                                  <span class="stringliteral">"ispos"</span>);
+<a name="l00381"></a>00381     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Neg = B.<a class="code" href="classllvm_1_1IRBuilder.html#a97ab781fefa6f6ff35ce5c4c7dac3a79">CreateNeg</a>(Op, <span class="stringliteral">"neg"</span>);
+<a name="l00382"></a>00382     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#ae19d9d49f39d404703b42161ce788954">CreateSelect</a>(Pos, Op, Neg);
+<a name="l00383"></a>00383   }
+<a name="l00384"></a>00384 };
+<a name="l00385"></a>00385 
+<a name="l00386"></a>00386 
+<a name="l00387"></a>00387 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00388"></a>00388 <span class="comment">// 'toascii' Optimizations</span>
+<a name="l00389"></a>00389 
+<a name="l00390"></a>00390 <span class="keyword">struct </span>ToAsciiOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00391"></a>00391   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00392"></a>00392     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00393"></a>00393     <span class="comment">// We require i32(i32)</span>
+<a name="l00394"></a>00394     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>() != FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0) ||
+<a name="l00395"></a>00395         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(32))
+<a name="l00396"></a>00396       <span class="keywordflow">return</span> 0;
+<a name="l00397"></a>00397 
+<a name="l00398"></a>00398     <span class="comment">// isascii(c) -> c & 0x7f</span>
+<a name="l00399"></a>00399     <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#a197d5dd77cad4560a082900962a830aa">CreateAnd</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0),
+<a name="l00400"></a>00400                        <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),0x7F));
+<a name="l00401"></a>00401   }
+<a name="l00402"></a>00402 };
+<a name="l00403"></a>00403 
+<a name="l00404"></a>00404 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00405"></a>00405 <span class="comment">// Formatting and IO Optimizations</span>
+<a name="l00406"></a>00406 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00407"></a>00407 
+<a name="l00408"></a>00408 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00409"></a>00409 <span class="comment">// 'printf' Optimizations</span>
+<a name="l00410"></a>00410 
+<a name="l00411"></a>00411 <span class="keyword">struct </span>PrintFOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00412"></a>00412   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OptimizeFixedFormatString(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI,
+<a name="l00413"></a>00413                                    <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00414"></a>00414     <span class="comment">// Check for a fixed format string.</span>
+<a name="l00415"></a>00415     <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> FormatStr;
+<a name="l00416"></a>00416     <span class="keywordflow">if</span> (!<a class="code" href="namespacellvm.html#a66d195fefcf9fab4b08703860991c14c">getConstantStringInfo</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), FormatStr))
+<a name="l00417"></a>00417       <span class="keywordflow">return</span> 0;
+<a name="l00418"></a>00418 
+<a name="l00419"></a>00419     <span class="comment">// Empty format string -> noop.</span>
+<a name="l00420"></a>00420     <span class="keywordflow">if</span> (FormatStr.<a class="code" href="classllvm_1_1StringRef.html#ad7e292682516000f8b472f4510a2acf7" title="empty - Check if the string is empty.">empty</a>())  <span class="comment">// Tolerate printf's declared void.</span>
+<a name="l00421"></a>00421       <span class="keywordflow">return</span> CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() ? (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>*)CI :
+<a name="l00422"></a>00422                                <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 0);
+<a name="l00423"></a>00423 
+<a name="l00424"></a>00424     <span class="comment">// Do not do any of the following transformations if the printf return value</span>
+<a name="l00425"></a>00425     <span class="comment">// is used, in general the printf return value is not compatible with either</span>
+<a name="l00426"></a>00426     <span class="comment">// putchar() or puts().</span>
+<a name="l00427"></a>00427     <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>())
+<a name="l00428"></a>00428       <span class="keywordflow">return</span> 0;
+<a name="l00429"></a>00429 
+<a name="l00430"></a>00430     <span class="comment">// printf("x") -> putchar('x'), even for '%'.</span>
+<a name="l00431"></a>00431     <span class="keywordflow">if</span> (FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>() == 1) {
+<a name="l00432"></a>00432       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = <a class="code" href="namespacellvm.html#ada64980893ff275559110bf8ac928052">EmitPutChar</a>(B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(FormatStr[0]), B, TD, TLI);
+<a name="l00433"></a>00433       <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() || !Res) <span class="keywordflow">return</span> Res;
+<a name="l00434"></a>00434       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#afdd8a08bfcbd94f60d166a71a3e79ff3">CreateIntCast</a>(Res, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span>);
+<a name="l00435"></a>00435     }
+<a name="l00436"></a>00436 
+<a name="l00437"></a>00437     <span class="comment">// printf("foo\n") --> puts("foo")</span>
+<a name="l00438"></a>00438     <span class="keywordflow">if</span> (FormatStr[FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>()-1] == <span class="charliteral">'\n'</span> &&
+<a name="l00439"></a>00439         FormatStr.<a class="code" href="classllvm_1_1StringRef.html#a421e16456fe6d7b71fb4af736194165c">find</a>(<span class="charliteral">'%'</span>) == std::string::npos) {  <span class="comment">// no format characters.</span>
+<a name="l00440"></a>00440       <span class="comment">// Create a string literal with no \n on it.  We expect the constant merge</span>
+<a name="l00441"></a>00441       <span class="comment">// pass to be run after this pass, to merge duplicate strings.</span>
+<a name="l00442"></a>00442       FormatStr = FormatStr.<a class="code" href="classllvm_1_1StringRef.html#ac91d69c4dde0d0d6b80b0b187450ff4c">drop_back</a>();
+<a name="l00443"></a>00443       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *GV = B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a0e600b8bfca49f636e691495ab5cc640">CreateGlobalString</a>(FormatStr, <span class="stringliteral">"str"</span>);
+<a name="l00444"></a>00444       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewCI = <a class="code" href="namespacellvm.html#a2a55dc1fc3303f1860c003b1518dc08b">EmitPutS</a>(GV, B, TD, TLI);
+<a name="l00445"></a>00445       <span class="keywordflow">return</span> (CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() || !NewCI) ?
+<a name="l00446"></a>00446               NewCI :
+<a name="l00447"></a>00447               <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>()+1);
+<a name="l00448"></a>00448     }
+<a name="l00449"></a>00449 
+<a name="l00450"></a>00450     <span class="comment">// Optimize specific format strings.</span>
+<a name="l00451"></a>00451     <span class="comment">// printf("%c", chr) --> putchar(chr)</span>
+<a name="l00452"></a>00452     <span class="keywordflow">if</span> (FormatStr == <span class="stringliteral">"%c"</span> && CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() > 1 &&
+<a name="l00453"></a>00453         CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) {
+<a name="l00454"></a>00454       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = <a class="code" href="namespacellvm.html#ada64980893ff275559110bf8ac928052">EmitPutChar</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1), B, TD, TLI);
+<a name="l00455"></a>00455 
+<a name="l00456"></a>00456       <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() || !Res) <span class="keywordflow">return</span> Res;
+<a name="l00457"></a>00457       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#afdd8a08bfcbd94f60d166a71a3e79ff3">CreateIntCast</a>(Res, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span>);
+<a name="l00458"></a>00458     }
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460     <span class="comment">// printf("%s\n", str) --> puts(str)</span>
+<a name="l00461"></a>00461     <span class="keywordflow">if</span> (FormatStr == <span class="stringliteral">"%s\n"</span> && CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() > 1 &&
+<a name="l00462"></a>00462         CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>()) {
+<a name="l00463"></a>00463       <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a2a55dc1fc3303f1860c003b1518dc08b">EmitPutS</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1), B, TD, TLI);
+<a name="l00464"></a>00464     }
+<a name="l00465"></a>00465     <span class="keywordflow">return</span> 0;
+<a name="l00466"></a>00466   }
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00469"></a>00469     <span class="comment">// Require one fixed pointer argument and an integer/void result.</span>
+<a name="l00470"></a>00470     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00471"></a>00471     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00472"></a>00472         !(FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00473"></a>00473           FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#af5c7041df3ad5edffe5da17b5264c1fc" title="isVoidTy - Return true if this is 'void'.">isVoidTy</a>()))
+<a name="l00474"></a>00474       <span class="keywordflow">return</span> 0;
+<a name="l00475"></a>00475 
+<a name="l00476"></a>00476     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = OptimizeFixedFormatString(Callee, CI, B)) {
+<a name="l00477"></a>00477       <span class="keywordflow">return</span> V;
+<a name="l00478"></a>00478     }
+<a name="l00479"></a>00479 
+<a name="l00480"></a>00480     <span class="comment">// printf(format, ...) -> iprintf(format, ...) if no floating point</span>
+<a name="l00481"></a>00481     <span class="comment">// arguments.</span>
+<a name="l00482"></a>00482     <span class="keywordflow">if</span> (TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6facfb48939ccc9ccaca476f448f4b40612" title="int iprintf(const char *format, ...);">LibFunc::iprintf</a>) && !<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#af1f232eeeb83780c2e2b0f65dc03e3f1">CallHasFloatingPointArgument</a>(CI)) {
+<a name="l00483"></a>00483       <a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> *M = B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#aca229503e4f5c83a187a6a921c625fa8">getParent</a>()-><a class="code" href="classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac">getParent</a>();
+<a name="l00484"></a>00484       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *IPrintFFn =
+<a name="l00485"></a>00485         M-><a class="code" href="classllvm_1_1Module.html#a0d07fe352b962089c0b190e438cd4ae2">getOrInsertFunction</a>(<span class="stringliteral">"iprintf"</span>, FT, Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00486"></a>00486       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *New = cast<CallInst>(CI-><a class="code" href="classllvm_1_1Instruction.html#af6aad0c9ba7b8720130235c9621b55b5">clone</a>());
+<a name="l00487"></a>00487       New-><a class="code" href="classllvm_1_1CallInst.html#a61f747edd1ca001427e02e02a320b709" title="setCalledFunction - Set the function called.">setCalledFunction</a>(IPrintFFn);
+<a name="l00488"></a>00488       B.<a class="code" href="classllvm_1_1IRBuilder.html#abd3da4c9a7bdee3fb759a06410095f75" title="Insert - Insert and return the specified instruction.">Insert</a>(New);
+<a name="l00489"></a>00489       <span class="keywordflow">return</span> New;
+<a name="l00490"></a>00490     }
+<a name="l00491"></a>00491     <span class="keywordflow">return</span> 0;
+<a name="l00492"></a>00492   }
+<a name="l00493"></a>00493 };
+<a name="l00494"></a>00494 
+<a name="l00495"></a>00495 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00496"></a>00496 <span class="comment">// 'sprintf' Optimizations</span>
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498 <span class="keyword">struct </span>SPrintFOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00499"></a>00499   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OptimizeFixedFormatString(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI,
+<a name="l00500"></a>00500                                    <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00501"></a>00501     <span class="comment">// Check for a fixed format string.</span>
+<a name="l00502"></a>00502     <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> FormatStr;
+<a name="l00503"></a>00503     <span class="keywordflow">if</span> (!<a class="code" href="namespacellvm.html#a66d195fefcf9fab4b08703860991c14c">getConstantStringInfo</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1), FormatStr))
+<a name="l00504"></a>00504       <span class="keywordflow">return</span> 0;
+<a name="l00505"></a>00505 
+<a name="l00506"></a>00506     <span class="comment">// If we just have a format string (nothing else crazy) transform it.</span>
+<a name="l00507"></a>00507     <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() == 2) {
+<a name="l00508"></a>00508       <span class="comment">// Make sure there's no % in the constant array.  We could try to handle</span>
+<a name="l00509"></a>00509       <span class="comment">// %% -> % in the future if we cared.</span>
+<a name="l00510"></a>00510       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>(); i != e; ++i)
+<a name="l00511"></a>00511         <span class="keywordflow">if</span> (FormatStr[i] == <span class="charliteral">'%'</span>)
+<a name="l00512"></a>00512           <span class="keywordflow">return</span> 0; <span class="comment">// we found a format specifier, bail out.</span>
+<a name="l00513"></a>00513 
+<a name="l00514"></a>00514       <span class="comment">// These optimizations require DataLayout.</span>
+<a name="l00515"></a>00515       <span class="keywordflow">if</span> (!TD) <span class="keywordflow">return</span> 0;
+<a name="l00516"></a>00516 
+<a name="l00517"></a>00517       <span class="comment">// sprintf(str, fmt) -> llvm.memcpy(str, fmt, strlen(fmt)+1, 1)</span>
+<a name="l00518"></a>00518       B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a849b50da820a274b4d001fbeadaf5cd7">CreateMemCpy</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1),
+<a name="l00519"></a>00519                      <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(TD->getIntPtrType(*Context), <span class="comment">// Copy the</span>
+<a name="l00520"></a>00520                                       FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>() + 1), 1);   <span class="comment">// nul byte.</span>
+<a name="l00521"></a>00521       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>());
+<a name="l00522"></a>00522     }
+<a name="l00523"></a>00523 
+<a name="l00524"></a>00524     <span class="comment">// The remaining optimizations require the format string to be "%s" or "%c"</span>
+<a name="l00525"></a>00525     <span class="comment">// and have an extra operand.</span>
+<a name="l00526"></a>00526     <span class="keywordflow">if</span> (FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>() != 2 || FormatStr[0] != <span class="charliteral">'%'</span> ||
+<a name="l00527"></a>00527         CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() < 3)
+<a name="l00528"></a>00528       <span class="keywordflow">return</span> 0;
+<a name="l00529"></a>00529 
+<a name="l00530"></a>00530     <span class="comment">// Decode the second character of the format string.</span>
+<a name="l00531"></a>00531     <span class="keywordflow">if</span> (FormatStr[1] == <span class="charliteral">'c'</span>) {
+<a name="l00532"></a>00532       <span class="comment">// sprintf(dst, "%c", chr) --> *(i8*)dst = chr; *((i8*)dst+1) = 0</span>
+<a name="l00533"></a>00533       <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) <span class="keywordflow">return</span> 0;
+<a name="l00534"></a>00534       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = B.<a class="code" href="classllvm_1_1IRBuilder.html#aa933549689e79685bb67de64dddc9f7c">CreateTrunc</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2), B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a7a71da01c646618b7f43d303d563b41b" title="getInt8Ty - Fetch the type representing an 8-bit integer.">getInt8Ty</a>(), <span class="stringliteral">"char"</span>);
+<a name="l00535"></a>00535       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Ptr = <a class="code" href="namespacellvm.html#ac63e6fb194823d8e130f27312a749e1c" title="CastToCStr - Return V if it is an i8*, otherwise cast it to i8*.">CastToCStr</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), B);
+<a name="l00536"></a>00536       B.<a class="code" href="classllvm_1_1IRBuilder.html#a43f7fa52a3fbe01e44c40d9db278ab3e">CreateStore</a>(V, Ptr);
+<a name="l00537"></a>00537       Ptr = B.<a class="code" href="classllvm_1_1IRBuilder.html#ac46176b523c8a76a9ccdb5683279db94">CreateGEP</a>(Ptr, B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(1), <span class="stringliteral">"nul"</span>);
+<a name="l00538"></a>00538       B.<a class="code" href="classllvm_1_1IRBuilder.html#a43f7fa52a3fbe01e44c40d9db278ab3e">CreateStore</a>(B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a52caf9c563fee52b23e0ee4875c6248f" title="getInt8 - Get a constant 8-bit value.">getInt8</a>(0), Ptr);
+<a name="l00539"></a>00539 
+<a name="l00540"></a>00540       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1);
+<a name="l00541"></a>00541     }
+<a name="l00542"></a>00542 
+<a name="l00543"></a>00543     <span class="keywordflow">if</span> (FormatStr[1] == <span class="charliteral">'s'</span>) {
+<a name="l00544"></a>00544       <span class="comment">// These optimizations require DataLayout.</span>
+<a name="l00545"></a>00545       <span class="keywordflow">if</span> (!TD) <span class="keywordflow">return</span> 0;
+<a name="l00546"></a>00546 
+<a name="l00547"></a>00547       <span class="comment">// sprintf(dest, "%s", str) -> llvm.memcpy(dest, str, strlen(str)+1, 1)</span>
+<a name="l00548"></a>00548       <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>()) <span class="keywordflow">return</span> 0;
+<a name="l00549"></a>00549 
+<a name="l00550"></a>00550       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Len = <a class="code" href="namespacellvm.html#aeb757469668c1dfea81273148ccdf0ab">EmitStrLen</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2), B, TD, TLI);
+<a name="l00551"></a>00551       <span class="keywordflow">if</span> (!Len)
+<a name="l00552"></a>00552         <span class="keywordflow">return</span> 0;
+<a name="l00553"></a>00553       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IncLen = B.<a class="code" href="classllvm_1_1IRBuilder.html#a112f87f5844b5d94c07940f3d47f1e99">CreateAdd</a>(Len,
+<a name="l00554"></a>00554                                   <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Len-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1),
+<a name="l00555"></a>00555                                   <span class="stringliteral">"leninc"</span>);
+<a name="l00556"></a>00556       B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a849b50da820a274b4d001fbeadaf5cd7">CreateMemCpy</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2), IncLen, 1);
+<a name="l00557"></a>00557 
+<a name="l00558"></a>00558       <span class="comment">// The sprintf result is the unincremented number of bytes in the string.</span>
+<a name="l00559"></a>00559       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#afdd8a08bfcbd94f60d166a71a3e79ff3">CreateIntCast</a>(Len, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">false</span>);
+<a name="l00560"></a>00560     }
+<a name="l00561"></a>00561     <span class="keywordflow">return</span> 0;
+<a name="l00562"></a>00562   }
+<a name="l00563"></a>00563 
+<a name="l00564"></a>00564   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00565"></a>00565     <span class="comment">// Require two fixed pointer arguments and an integer result.</span>
+<a name="l00566"></a>00566     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00567"></a>00567     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00568"></a>00568         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00569"></a>00569         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l00570"></a>00570       <span class="keywordflow">return</span> 0;
+<a name="l00571"></a>00571 
+<a name="l00572"></a>00572     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = OptimizeFixedFormatString(Callee, CI, B)) {
+<a name="l00573"></a>00573       <span class="keywordflow">return</span> V;
+<a name="l00574"></a>00574     }
+<a name="l00575"></a>00575 
+<a name="l00576"></a>00576     <span class="comment">// sprintf(str, format, ...) -> siprintf(str, format, ...) if no floating</span>
+<a name="l00577"></a>00577     <span class="comment">// point arguments.</span>
+<a name="l00578"></a>00578     <span class="keywordflow">if</span> (TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faf56db94c5d9f1e3f8d431697376dd71f" title="int siprintf(char *str, const char *format, ...);">LibFunc::siprintf</a>) && !<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#af1f232eeeb83780c2e2b0f65dc03e3f1">CallHasFloatingPointArgument</a>(CI)) {
+<a name="l00579"></a>00579       <a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> *M = B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#aca229503e4f5c83a187a6a921c625fa8">getParent</a>()-><a class="code" href="classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac">getParent</a>();
+<a name="l00580"></a>00580       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *SIPrintFFn =
+<a name="l00581"></a>00581         M-><a class="code" href="classllvm_1_1Module.html#a0d07fe352b962089c0b190e438cd4ae2">getOrInsertFunction</a>(<span class="stringliteral">"siprintf"</span>, FT, Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00582"></a>00582       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *New = cast<CallInst>(CI-><a class="code" href="classllvm_1_1Instruction.html#af6aad0c9ba7b8720130235c9621b55b5">clone</a>());
+<a name="l00583"></a>00583       New-><a class="code" href="classllvm_1_1CallInst.html#a61f747edd1ca001427e02e02a320b709" title="setCalledFunction - Set the function called.">setCalledFunction</a>(SIPrintFFn);
+<a name="l00584"></a>00584       B.<a class="code" href="classllvm_1_1IRBuilder.html#abd3da4c9a7bdee3fb759a06410095f75" title="Insert - Insert and return the specified instruction.">Insert</a>(New);
+<a name="l00585"></a>00585       <span class="keywordflow">return</span> New;
+<a name="l00586"></a>00586     }
+<a name="l00587"></a>00587     <span class="keywordflow">return</span> 0;
+<a name="l00588"></a>00588   }
+<a name="l00589"></a>00589 };
+<a name="l00590"></a>00590 
+<a name="l00591"></a>00591 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00592"></a>00592 <span class="comment">// 'fwrite' Optimizations</span>
+<a name="l00593"></a>00593 
+<a name="l00594"></a>00594 <span class="keyword">struct </span>FWriteOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00595"></a>00595   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00596"></a>00596     <span class="comment">// Require a pointer, an integer, an integer, a pointer, returning integer.</span>
+<a name="l00597"></a>00597     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00598"></a>00598     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 4 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00599"></a>00599         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00600"></a>00600         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00601"></a>00601         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(3)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00602"></a>00602         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l00603"></a>00603       <span class="keywordflow">return</span> 0;
+<a name="l00604"></a>00604 
+<a name="l00605"></a>00605     <span class="comment">// Get the element size and count.</span>
+<a name="l00606"></a>00606     <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *SizeC = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a>>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1));
+<a name="l00607"></a>00607     <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CountC = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a>>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2));
+<a name="l00608"></a>00608     <span class="keywordflow">if</span> (!SizeC || !CountC) <span class="keywordflow">return</span> 0;
+<a name="l00609"></a>00609     uint64_t Bytes = SizeC-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>()*CountC->getZExtValue();
+<a name="l00610"></a>00610 
+<a name="l00611"></a>00611     <span class="comment">// If this is writing zero records, remove the call (it's a noop).</span>
+<a name="l00612"></a>00612     <span class="keywordflow">if</span> (Bytes == 0)
+<a name="l00613"></a>00613       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 0);
+<a name="l00614"></a>00614 
+<a name="l00615"></a>00615     <span class="comment">// If this is writing one byte, turn it into fputc.</span>
+<a name="l00616"></a>00616     <span class="comment">// This optimisation is only valid, if the return value is unused.</span>
+<a name="l00617"></a>00617     <span class="keywordflow">if</span> (Bytes == 1 && CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>()) {  <span class="comment">// fwrite(S,1,1,F) -> fputc(S[0],F)</span>
+<a name="l00618"></a>00618       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Char = B.<a class="code" href="classllvm_1_1IRBuilder.html#af440b535b3b4e8d0d089dd0ed2283a0f">CreateLoad</a>(<a class="code" href="namespacellvm.html#ac63e6fb194823d8e130f27312a749e1c" title="CastToCStr - Return V if it is an i8*, otherwise cast it to i8*.">CastToCStr</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), B), <span class="stringliteral">"char"</span>);
+<a name="l00619"></a>00619       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewCI = <a class="code" href="namespacellvm.html#ab2fa00bbe056dcbe45429fadf56489d6">EmitFPutC</a>(Char, CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(3), B, TD, TLI);
+<a name="l00620"></a>00620       <span class="keywordflow">return</span> NewCI ? <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1) : 0;
+<a name="l00621"></a>00621     }
+<a name="l00622"></a>00622 
+<a name="l00623"></a>00623     <span class="keywordflow">return</span> 0;
+<a name="l00624"></a>00624   }
+<a name="l00625"></a>00625 };
+<a name="l00626"></a>00626 
+<a name="l00627"></a>00627 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00628"></a>00628 <span class="comment">// 'fputs' Optimizations</span>
+<a name="l00629"></a>00629 
+<a name="l00630"></a>00630 <span class="keyword">struct </span>FPutsOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00631"></a>00631   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00632"></a>00632     <span class="comment">// These optimizations require DataLayout.</span>
+<a name="l00633"></a>00633     <span class="keywordflow">if</span> (!TD) <span class="keywordflow">return</span> 0;
+<a name="l00634"></a>00634 
+<a name="l00635"></a>00635     <span class="comment">// Require two pointers.  Also, we can't optimize if return value is used.</span>
+<a name="l00636"></a>00636     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00637"></a>00637     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00638"></a>00638         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00639"></a>00639         !CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>())
+<a name="l00640"></a>00640       <span class="keywordflow">return</span> 0;
+<a name="l00641"></a>00641 
+<a name="l00642"></a>00642     <span class="comment">// fputs(s,F) --> fwrite(s,1,strlen(s),F)</span>
+<a name="l00643"></a>00643     uint64_t Len = <a class="code" href="namespacellvm.html#a6592393edcc944aa0fae70e18b5fbe0a">GetStringLength</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0));
+<a name="l00644"></a>00644     <span class="keywordflow">if</span> (!Len) <span class="keywordflow">return</span> 0;
+<a name="l00645"></a>00645     <span class="comment">// Known to have no uses (see above).</span>
+<a name="l00646"></a>00646     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a87d14fb8ce6caf9275465116dc19b6d6">EmitFWrite</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0),
+<a name="l00647"></a>00647                       <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(TD->getIntPtrType(*Context), Len-1),
+<a name="l00648"></a>00648                       CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1), B, TD, TLI);
+<a name="l00649"></a>00649   }
+<a name="l00650"></a>00650 };
+<a name="l00651"></a>00651 
+<a name="l00652"></a>00652 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00653"></a>00653 <span class="comment">// 'fprintf' Optimizations</span>
+<a name="l00654"></a>00654 
+<a name="l00655"></a>00655 <span class="keyword">struct </span>FPrintFOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00656"></a>00656   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OptimizeFixedFormatString(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI,
+<a name="l00657"></a>00657                                    <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00658"></a>00658     <span class="comment">// All the optimizations depend on the format string.</span>
+<a name="l00659"></a>00659     <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> FormatStr;
+<a name="l00660"></a>00660     <span class="keywordflow">if</span> (!<a class="code" href="namespacellvm.html#a66d195fefcf9fab4b08703860991c14c">getConstantStringInfo</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1), FormatStr))
+<a name="l00661"></a>00661       <span class="keywordflow">return</span> 0;
+<a name="l00662"></a>00662 
+<a name="l00663"></a>00663     <span class="comment">// fprintf(F, "foo") --> fwrite("foo", 3, 1, F)</span>
+<a name="l00664"></a>00664     <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() == 2) {
+<a name="l00665"></a>00665       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>(); i != e; ++i)
+<a name="l00666"></a>00666         <span class="keywordflow">if</span> (FormatStr[i] == <span class="charliteral">'%'</span>)  <span class="comment">// Could handle %% -> % if we cared.</span>
+<a name="l00667"></a>00667           <span class="keywordflow">return</span> 0; <span class="comment">// We found a format specifier.</span>
+<a name="l00668"></a>00668 
+<a name="l00669"></a>00669       <span class="comment">// These optimizations require DataLayout.</span>
+<a name="l00670"></a>00670       <span class="keywordflow">if</span> (!TD) <span class="keywordflow">return</span> 0;
+<a name="l00671"></a>00671 
+<a name="l00672"></a>00672       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewCI = <a class="code" href="namespacellvm.html#a87d14fb8ce6caf9275465116dc19b6d6">EmitFWrite</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(1),
+<a name="l00673"></a>00673                                 <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(TD->getIntPtrType(*Context),
+<a name="l00674"></a>00674                                                  FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>()),
+<a name="l00675"></a>00675                                 CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), B, TD, TLI);
+<a name="l00676"></a>00676       <span class="keywordflow">return</span> NewCI ? <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>()) : 0;
+<a name="l00677"></a>00677     }
+<a name="l00678"></a>00678 
+<a name="l00679"></a>00679     <span class="comment">// The remaining optimizations require the format string to be "%s" or "%c"</span>
+<a name="l00680"></a>00680     <span class="comment">// and have an extra operand.</span>
+<a name="l00681"></a>00681     <span class="keywordflow">if</span> (FormatStr.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>() != 2 || FormatStr[0] != <span class="charliteral">'%'</span> ||
+<a name="l00682"></a>00682         CI-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() < 3)
+<a name="l00683"></a>00683       <span class="keywordflow">return</span> 0;
+<a name="l00684"></a>00684 
+<a name="l00685"></a>00685     <span class="comment">// Decode the second character of the format string.</span>
+<a name="l00686"></a>00686     <span class="keywordflow">if</span> (FormatStr[1] == <span class="charliteral">'c'</span>) {
+<a name="l00687"></a>00687       <span class="comment">// fprintf(F, "%c", chr) --> fputc(chr, F)</span>
+<a name="l00688"></a>00688       <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) <span class="keywordflow">return</span> 0;
+<a name="l00689"></a>00689       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewCI = <a class="code" href="namespacellvm.html#ab2fa00bbe056dcbe45429fadf56489d6">EmitFPutC</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2), CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), B,
+<a name="l00690"></a>00690                                TD, TLI);
+<a name="l00691"></a>00691       <span class="keywordflow">return</span> NewCI ? <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1) : 0;
+<a name="l00692"></a>00692     }
+<a name="l00693"></a>00693 
+<a name="l00694"></a>00694     <span class="keywordflow">if</span> (FormatStr[1] == <span class="charliteral">'s'</span>) {
+<a name="l00695"></a>00695       <span class="comment">// fprintf(F, "%s", str) --> fputs(str, F)</span>
+<a name="l00696"></a>00696       <span class="keywordflow">if</span> (!CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() || !CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>())
+<a name="l00697"></a>00697         <span class="keywordflow">return</span> 0;
+<a name="l00698"></a>00698       <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#aae265c866f1ecf18fe6422bda13eaecd">EmitFPutS</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(2), CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), B, TD, TLI);
+<a name="l00699"></a>00699     }
+<a name="l00700"></a>00700     <span class="keywordflow">return</span> 0;
+<a name="l00701"></a>00701   }
+<a name="l00702"></a>00702 
+<a name="l00703"></a>00703   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00704"></a>00704     <span class="comment">// Require two fixed paramters as pointers and integer result.</span>
+<a name="l00705"></a>00705     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00706"></a>00706     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00707"></a>00707         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00708"></a>00708         !FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l00709"></a>00709       <span class="keywordflow">return</span> 0;
+<a name="l00710"></a>00710 
+<a name="l00711"></a>00711     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = OptimizeFixedFormatString(Callee, CI, B)) {
+<a name="l00712"></a>00712       <span class="keywordflow">return</span> V;
+<a name="l00713"></a>00713     }
+<a name="l00714"></a>00714 
+<a name="l00715"></a>00715     <span class="comment">// fprintf(stream, format, ...) -> fiprintf(stream, format, ...) if no</span>
+<a name="l00716"></a>00716     <span class="comment">// floating point arguments.</span>
+<a name="l00717"></a>00717     <span class="keywordflow">if</span> (TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa85b457ecd49627dcfc69e2675eb79f46" title="int fiprintf(FILE *stream, const char *format, ...);">LibFunc::fiprintf</a>) && !<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#af1f232eeeb83780c2e2b0f65dc03e3f1">CallHasFloatingPointArgument</a>(CI)) {
+<a name="l00718"></a>00718       <a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> *M = B.<a class="code" href="classllvm_1_1IRBuilderBase.html#a05750ee4a9742f3ea2755efb4b747efe">GetInsertBlock</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#aca229503e4f5c83a187a6a921c625fa8">getParent</a>()-><a class="code" href="classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac">getParent</a>();
+<a name="l00719"></a>00719       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *FIPrintFFn =
+<a name="l00720"></a>00720         M-><a class="code" href="classllvm_1_1Module.html#a0d07fe352b962089c0b190e438cd4ae2">getOrInsertFunction</a>(<span class="stringliteral">"fiprintf"</span>, FT, Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l00721"></a>00721       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *New = cast<CallInst>(CI-><a class="code" href="classllvm_1_1Instruction.html#af6aad0c9ba7b8720130235c9621b55b5">clone</a>());
+<a name="l00722"></a>00722       New-><a class="code" href="classllvm_1_1CallInst.html#a61f747edd1ca001427e02e02a320b709" title="setCalledFunction - Set the function called.">setCalledFunction</a>(FIPrintFFn);
+<a name="l00723"></a>00723       B.<a class="code" href="classllvm_1_1IRBuilder.html#abd3da4c9a7bdee3fb759a06410095f75" title="Insert - Insert and return the specified instruction.">Insert</a>(New);
+<a name="l00724"></a>00724       <span class="keywordflow">return</span> New;
+<a name="l00725"></a>00725     }
+<a name="l00726"></a>00726     <span class="keywordflow">return</span> 0;
+<a name="l00727"></a>00727   }
+<a name="l00728"></a>00728 };
+<a name="l00729"></a>00729 
+<a name="l00730"></a>00730 <span class="comment">//===---------------------------------------===//</span>
+<a name="l00731"></a>00731 <span class="comment">// 'puts' Optimizations</span>
+<a name="l00732"></a>00732 
+<a name="l00733"></a>00733 <span class="keyword">struct </span>PutsOpt : <span class="keyword">public</span> LibCallOptimization {
+<a name="l00734"></a>00734   <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *CallOptimizer(<a class="code" href="classllvm_1_1Function.html">Function</a> *Callee, <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI, <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> &B) {
+<a name="l00735"></a>00735     <span class="comment">// Require one fixed pointer argument and an integer/void result.</span>
+<a name="l00736"></a>00736     <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FT = Callee-><a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l00737"></a>00737     <span class="keywordflow">if</span> (FT-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 || !FT-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l00738"></a>00738         !(FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00739"></a>00739           FT-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#af5c7041df3ad5edffe5da17b5264c1fc" title="isVoidTy - Return true if this is 'void'.">isVoidTy</a>()))
+<a name="l00740"></a>00740       <span class="keywordflow">return</span> 0;
+<a name="l00741"></a>00741 
+<a name="l00742"></a>00742     <span class="comment">// Check for a constant string.</span>
+<a name="l00743"></a>00743     <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> Str;
+<a name="l00744"></a>00744     <span class="keywordflow">if</span> (!<a class="code" href="namespacellvm.html#a66d195fefcf9fab4b08703860991c14c">getConstantStringInfo</a>(CI-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0), Str))
+<a name="l00745"></a>00745       <span class="keywordflow">return</span> 0;
+<a name="l00746"></a>00746 
+<a name="l00747"></a>00747     <span class="keywordflow">if</span> (Str.<a class="code" href="classllvm_1_1StringRef.html#ad7e292682516000f8b472f4510a2acf7" title="empty - Check if the string is empty.">empty</a>() && CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>()) {
+<a name="l00748"></a>00748       <span class="comment">// puts("") -> putchar('\n')</span>
+<a name="l00749"></a>00749       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = <a class="code" href="namespacellvm.html#ada64980893ff275559110bf8ac928052">EmitPutChar</a>(B.<a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(<span class="charliteral">'\n'</span>), B, TD, TLI);
+<a name="l00750"></a>00750       <span class="keywordflow">if</span> (CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() || !Res) <span class="keywordflow">return</span> Res;
+<a name="l00751"></a>00751       <span class="keywordflow">return</span> B.<a class="code" href="classllvm_1_1IRBuilder.html#afdd8a08bfcbd94f60d166a71a3e79ff3">CreateIntCast</a>(Res, CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span>);
+<a name="l00752"></a>00752     }
+<a name="l00753"></a>00753 
+<a name="l00754"></a>00754     <span class="keywordflow">return</span> 0;
+<a name="l00755"></a>00755   }
+<a name="l00756"></a>00756 };
+<a name="l00757"></a>00757 
+<a name="l00758"></a>00758 } <span class="comment">// end anonymous namespace.</span>
+<a name="l00759"></a>00759 
+<a name="l00760"></a>00760 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00761"></a>00761 <span class="comment">// SimplifyLibCalls Pass Implementation</span>
+<a name="l00762"></a>00762 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00763"></a>00763 
+<a name="l00764"></a>00764 <span class="keyword">namespace </span>{<span class="comment"></span>
+<a name="l00765"></a>00765 <span class="comment">  /// This pass optimizes well known library functions from libc and libm.</span>
+<a name="l00766"></a>00766 <span class="comment">  ///</span>
+<a name="l00767"></a>00767 <span class="comment"></span>  <span class="keyword">class </span>SimplifyLibCalls : <span class="keyword">public</span> <a class="code" href="classllvm_1_1FunctionPass.html">FunctionPass</a> {
+<a name="l00768"></a>00768     <a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI;
+<a name="l00769"></a>00769 
+<a name="l00770"></a>00770     <a class="code" href="classllvm_1_1StringMap.html">StringMap<LibCallOptimization*></a> <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>;
+<a name="l00771"></a>00771     <span class="comment">// Math Library Optimizations</span>
+<a name="l00772"></a>00772     CosOpt Cos; PowOpt Pow; Exp2Opt Exp2;
+<a name="l00773"></a>00773     UnaryDoubleFPOpt UnaryDoubleFP, UnsafeUnaryDoubleFP;
+<a name="l00774"></a>00774     <span class="comment">// Integer Optimizations</span>
+<a name="l00775"></a>00775     FFSOpt FFS; AbsOpt Abs; IsDigitOpt IsDigit; IsAsciiOpt IsAscii;
+<a name="l00776"></a>00776     ToAsciiOpt ToAscii;
+<a name="l00777"></a>00777     <span class="comment">// Formatting and IO Optimizations</span>
+<a name="l00778"></a>00778     SPrintFOpt SPrintF; PrintFOpt PrintF;
+<a name="l00779"></a>00779     FWriteOpt FWrite; FPutsOpt FPuts; FPrintFOpt FPrintF;
+<a name="l00780"></a>00780     PutsOpt Puts;
+<a name="l00781"></a>00781 
+<a name="l00782"></a>00782     <span class="keywordtype">bool</span> Modified;  <span class="comment">// This is only used by doInitialization.</span>
+<a name="l00783"></a>00783   <span class="keyword">public</span>:
+<a name="l00784"></a>00784     <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">ID</a>; <span class="comment">// Pass identification</span>
+<a name="l00785"></a>00785     SimplifyLibCalls() : <a class="code" href="classllvm_1_1FunctionPass.html">FunctionPass</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">ID</a>), UnaryDoubleFP(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>),
+<a name="l00786"></a>00786                          UnsafeUnaryDoubleFP(<a class="code" href="BasicAliasAnalysis_8cpp.html#a80603f23207dd836075c078e6264204a">true</a>) {
+<a name="l00787"></a>00787       <a class="code" href="namespacellvm.html#a5d65a7d47bda18bcd59196ee602aa9d1">initializeSimplifyLibCallsPass</a>(*<a class="code" href="classllvm_1_1PassRegistry.html#a05a729900b76c89e808c6c3094921b2f">PassRegistry::getPassRegistry</a>());
+<a name="l00788"></a>00788     }
+<a name="l00789"></a>00789     <span class="keywordtype">void</span> AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F, LibCallOptimization* Opt);
+<a name="l00790"></a>00790     <span class="keywordtype">void</span> AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F1, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F2, LibCallOptimization* Opt);
+<a name="l00791"></a>00791 
+<a name="l00792"></a>00792     <span class="keywordtype">void</span> InitOptimizations();
+<a name="l00793"></a>00793     <span class="keywordtype">bool</span> runOnFunction(<a class="code" href="classllvm_1_1Function.html">Function</a> &F);
+<a name="l00794"></a>00794 
+<a name="l00795"></a>00795     <span class="keywordtype">void</span> setDoesNotAccessMemory(<a class="code" href="classllvm_1_1Function.html">Function</a> &F);
+<a name="l00796"></a>00796     <span class="keywordtype">void</span> setOnlyReadsMemory(<a class="code" href="classllvm_1_1Function.html">Function</a> &F);
+<a name="l00797"></a>00797     <span class="keywordtype">void</span> setDoesNotThrow(<a class="code" href="classllvm_1_1Function.html">Function</a> &F);
+<a name="l00798"></a>00798     <span class="keywordtype">void</span> setDoesNotCapture(<a class="code" href="classllvm_1_1Function.html">Function</a> &F, <span class="keywordtype">unsigned</span> n);
+<a name="l00799"></a>00799     <span class="keywordtype">void</span> setDoesNotAlias(<a class="code" href="classllvm_1_1Function.html">Function</a> &F, <span class="keywordtype">unsigned</span> n);
+<a name="l00800"></a>00800     <span class="keywordtype">bool</span> doInitialization(<a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> &M);
+<a name="l00801"></a>00801 
+<a name="l00802"></a>00802     <span class="keywordtype">void</span> inferPrototypeAttributes(<a class="code" href="classllvm_1_1Function.html">Function</a> &F);
+<a name="l00803"></a>00803     <span class="keyword">virtual</span> <span class="keywordtype">void</span> getAnalysisUsage(<a class="code" href="classllvm_1_1AnalysisUsage.html">AnalysisUsage</a> &AU)<span class="keyword"> const </span>{
+<a name="l00804"></a>00804       AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#ae5c60fd282ee894c87ea02c3f0fcb6d0">addRequired</a><<a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a>>();
+<a name="l00805"></a>00805     }
+<a name="l00806"></a>00806   };
+<a name="l00807"></a>00807 } <span class="comment">// end anonymous namespace.</span>
+<a name="l00808"></a>00808 
+<a name="l00809"></a>00809 <span class="keywordtype">char</span> <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">SimplifyLibCalls::ID</a> = 0;
+<a name="l00810"></a>00810 
+<a name="l00811"></a>00811 <a class="code" href="PassSupport_8h.html#aaa970fc931c1c63037a8182e028d04b1">INITIALIZE_PASS_BEGIN</a>(SimplifyLibCalls, <span class="stringliteral">"simplify-libcalls"</span>,
+<a name="l00812"></a>00812                       <span class="stringliteral">"Simplify well-known library calls"</span>, <span class="keyword">false</span>, <span class="keyword">false</span>)
+<a name="l00813"></a>00813 <a class="code" href="PassSupport_8h.html#a14724f1ccf528e73bb29bc9230737967">INITIALIZE_PASS_DEPENDENCY</a>(<a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a>)
+<a name="l00814"></a><a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a9b4fbb57cb6b498e5e8416fdcf48c72b">00814</a> <a class="code" href="PassSupport_8h.html#a74ce8276b89067e806f67c45a6d92575">INITIALIZE_PASS_END</a>(SimplifyLibCalls, "<a class="code" href="LoopSimplify_8cpp.html#adbc7fea4f239fd84b6dcdcb33906a9d2">simplify</a>-<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a9b4fbb57cb6b498e5e8416fdcf48c72b">libcalls</a>",
+<a name="l00815"></a>00815                     "Simplify well-known library <a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a4c349cd4b664546b9b9eef619d58c12d">calls</a>", <a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>, false)
+<a name="l00816"></a>00816 
+<a name="l00817"></a>00817 <span class="comment">// Public interface to the Simplify LibCalls pass.</span>
+<a name="l00818"></a><a class="code" href="namespacellvm.html#adb0351d338121f098ba872d267631025">00818</a> <a class="code" href="classllvm_1_1FunctionPass.html">FunctionPass</a> *llvm::<a class="code" href="namespacellvm.html#adb0351d338121f098ba872d267631025">createSimplifyLibCallsPass</a>() {
+<a name="l00819"></a>00819   <span class="keywordflow">return</span> <span class="keyword">new</span> SimplifyLibCalls();
+<a name="l00820"></a>00820 }
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822 <span class="keywordtype">void</span> SimplifyLibCalls::AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F, LibCallOptimization* Opt) {
+<a name="l00823"></a>00823   <span class="keywordflow">if</span> (TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(F))
+<a name="l00824"></a>00824     <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a0fe1c6579053c75b2089f8c2e60c65e0">getName</a>(F)] = Opt;
+<a name="l00825"></a>00825 }
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827 <span class="keywordtype">void</span> SimplifyLibCalls::AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F1, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6f">LibFunc::Func</a> F2,
+<a name="l00828"></a>00828                               LibCallOptimization* Opt) {
+<a name="l00829"></a>00829   <span class="keywordflow">if</span> (TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(F1) && TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a986085d3cd43522192d93e84bc660978">has</a>(F2))
+<a name="l00830"></a>00830     <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[TLI-><a class="code" href="classllvm_1_1TargetLibraryInfo.html#a0fe1c6579053c75b2089f8c2e60c65e0">getName</a>(F1)] = Opt;
+<a name="l00831"></a>00831 }
+<a name="l00832"></a>00832 <span class="comment"></span>
+<a name="l00833"></a>00833 <span class="comment">/// Optimizations - Populate the Optimizations map with all the optimizations</span>
+<a name="l00834"></a>00834 <span class="comment">/// we know.</span>
+<a name="l00835"></a>00835 <span class="comment"></span><span class="keywordtype">void</span> SimplifyLibCalls::InitOptimizations() {
+<a name="l00836"></a>00836   <span class="comment">// Math Library Optimizations</span>
+<a name="l00837"></a>00837   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"cosf"</span>] = &Cos;
+<a name="l00838"></a>00838   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"cos"</span>] = &Cos;
+<a name="l00839"></a>00839   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"cosl"</span>] = &Cos;
+<a name="l00840"></a>00840   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"powf"</span>] = &Pow;
+<a name="l00841"></a>00841   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"pow"</span>] = &Pow;
+<a name="l00842"></a>00842   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"powl"</span>] = &Pow;
+<a name="l00843"></a>00843   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.pow.f32"</span>] = &Pow;
+<a name="l00844"></a>00844   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.pow.f64"</span>] = &Pow;
+<a name="l00845"></a>00845   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.pow.f80"</span>] = &Pow;
+<a name="l00846"></a>00846   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.pow.f128"</span>] = &Pow;
+<a name="l00847"></a>00847   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.pow.ppcf128"</span>] = &Pow;
+<a name="l00848"></a>00848   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"exp2l"</span>] = &Exp2;
+<a name="l00849"></a>00849   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"exp2"</span>] = &Exp2;
+<a name="l00850"></a>00850   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"exp2f"</span>] = &Exp2;
+<a name="l00851"></a>00851   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.exp2.ppcf128"</span>] = &Exp2;
+<a name="l00852"></a>00852   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.exp2.f128"</span>] = &Exp2;
+<a name="l00853"></a>00853   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.exp2.f80"</span>] = &Exp2;
+<a name="l00854"></a>00854   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.exp2.f64"</span>] = &Exp2;
+<a name="l00855"></a>00855   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llvm.exp2.f32"</span>] = &Exp2;
+<a name="l00856"></a>00856 
+<a name="l00857"></a>00857   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faa782c4e760a1f85a047f0f445fe9a166" title="double ceil(double x);">LibFunc::ceil</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fabeff2268736aa278b16443193ca13ba5" title="float ceilf(float x);">LibFunc::ceilf</a>, &UnaryDoubleFP);
+<a name="l00858"></a>00858   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faf3a65ea3339861d41948aa2de71ba2e4" title="double fabs(double x);">LibFunc::fabs</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faf017b93d43a8de0d5fe5680131ec14d6" title="float fabsf(float x);">LibFunc::fabsf</a>, &UnaryDoubleFP);
+<a name="l00859"></a>00859   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa56063a1f5d567e59c1b1dbdd82307afc" title="double floor(double x);">LibFunc::floor</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa20f8ff9bd73cb5ab622f77719667f70e" title="float floorf(float x);">LibFunc::floorf</a>, &UnaryDoubleFP);
+<a name="l00860"></a>00860   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa7d3fc30f043c58272273d77c908d5db8" title="double rint(double x);">LibFunc::rint</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa1a6ee879e869cf6071a4db1631239795" title="float rintf(float x);">LibFunc::rintf</a>, &UnaryDoubleFP);
+<a name="l00861"></a>00861   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fac87ea230161f1f2247a5f72da886a23d" title="double round(double x);">LibFunc::round</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa617cf64238cf2b7352a32bcc1babedf0" title="float roundf(float x);">LibFunc::roundf</a>, &UnaryDoubleFP);
+<a name="l00862"></a>00862   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa7b4b4719f17bfc590fe1f8726d049e30" title="double nearbyint(double x);">LibFunc::nearbyint</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa067808435d99404a97c5be8b8790a639" title="float nearbyintf(float x);">LibFunc::nearbyintf</a>, &UnaryDoubleFP);
+<a name="l00863"></a>00863   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fad0a09e2728a769f54ffea5bb54747daa" title="double trunc(double x);">LibFunc::trunc</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa782a4bc8f1f44e735a02061b84af3ae0" title="float truncf(float x);">LibFunc::truncf</a>, &UnaryDoubleFP);
+<a name="l00864"></a>00864 
+<a name="l00865"></a>00865   <span class="keywordflow">if</span>(<a class="code" href="Scalar_2SimplifyLibCalls_8cpp.html#a85b6b7c082723d74f04ac701c91daa47">UnsafeFPShrink</a>) {
+<a name="l00866"></a>00866     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa4770aea851c9dc08978fc46cca26e089" title="double acos(double x);">LibFunc::acos</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa3ec18233eaf0c2db6d8b68371f24dfa1" title="float acosf(float x);">LibFunc::acosf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00867"></a>00867     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fabcc0cb55013ee572d6d2641dd2451c99" title="double acosh(double x);">LibFunc::acosh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fab09895a583039572e99f03dd870dbd42" title="float acoshf(float x);">LibFunc::acoshf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00868"></a>00868     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa112ae9dfa30a067791601d4190cd7179" title="double asin(double x);">LibFunc::asin</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faef49a8c339ed285baa8d2bb7e3e07a0e" title="float asinf(float x);">LibFunc::asinf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00869"></a>00869     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa5a30459863c4080c7acb310d4d022861" title="double asinh(double x);">LibFunc::asinh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa3d22234f69846c6bbf47713951b1be0d" title="float asinhf(float x);">LibFunc::asinhf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00870"></a>00870     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa775dcab59dfe83389f4b2490a91a7d00" title="double atan(double x);">LibFunc::atan</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa38e81ddf9c832613123514fb37377b38" title="float atanf(float x);">LibFunc::atanf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00871"></a>00871     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faea03317071ed150a02d71c83ceab58a2" title="double atanh(double x);">LibFunc::atanh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fadb7fd0f704a8bf478a76d72dfbaff5f0" title="float atanhf(float x);">LibFunc::atanhf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00872"></a>00872     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fac0cd1a310949c5394085b8e53714f2a9" title="double cbrt(double x);">LibFunc::cbrt</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa0955dbed4e9d60c6ceb5ccb642a34747" title="float cbrtf(float x);">LibFunc::cbrtf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00873"></a>00873     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa73f734c537bf20dba7d0ae56a421f445" title="double cosh(double x);">LibFunc::cosh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fad2b4fbf05b7fdf994edcc1818f641c83" title="float coshf(float x);">LibFunc::coshf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00874"></a>00874     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">LibFunc::exp</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa961ece50208c300ef05a2a3d0f727545" title="float expf(float x);">LibFunc::expf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00875"></a>00875     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fac5b88f06f8e46e42dcef61457cd6ee92" title="double exp10(double x);">LibFunc::exp10</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9d07187c318833f18bbc89e1dfd18e74" title="float exp10f(float x);">LibFunc::exp10f</a>, &UnsafeUnaryDoubleFP);
+<a name="l00876"></a>00876     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa2a756b1bc73a13ff5f93723b88d098af" title="double expm1(double x);">LibFunc::expm1</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa2c948ea520d7080ce3db78c3397d1f0a" title="float expm1f(float x);">LibFunc::expm1f</a>, &UnsafeUnaryDoubleFP);
+<a name="l00877"></a>00877     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fafa3f73bf84a733da4c5652bd21b378a9" title="double log(double x);">LibFunc::log</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa3c97ccd58dc11bb1fcb8f3864db3c5ee" title="float logf(float x);">LibFunc::logf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00878"></a>00878     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa59df814479e1f13712ebb50a1159bd19" title="double log10(double x);">LibFunc::log10</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa44e103850c4472c7e43280c5252cde20" title="float log10f(float x);">LibFunc::log10f</a>, &UnsafeUnaryDoubleFP);
+<a name="l00879"></a>00879     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa59df75a822b860888babc0ba76040d7d" title="double log1p(double x);">LibFunc::log1p</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fadb4491e5fea1d8bab194df325575fca5" title="float log1pf(float x);">LibFunc::log1pf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00880"></a>00880     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa881ba9a89b3bc1f75154c0b3e4abea7a" title="double log2(double x);">LibFunc::log2</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa4bd06237ec73d9b75b468fb61e75431f" title="float log2f(float x);">LibFunc::log2f</a>, &UnsafeUnaryDoubleFP);
+<a name="l00881"></a>00881     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faa6d34a296e2c48916e900ef873014122" title="double logb(double x);">LibFunc::logb</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa2b8ea54521286ef27adb438e89445b09" title="float logbf(float x);">LibFunc::logbf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00882"></a>00882     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa7187926b06529564381106c98bd3a1b7" title="double sin(double x);">LibFunc::sin</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa57aee1773b8300e2ad207948eaffd566" title="float sinf(float x);">LibFunc::sinf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00883"></a>00883     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faa50a30db290430e9a098d120896378ea" title="double sinh(double x);">LibFunc::sinh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa0862b5c2846cb2feb830e1ce4a6e4fb3" title="float sinhf(float x);">LibFunc::sinhf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00884"></a>00884     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fac68935baf041f4139079dbd9ddc76698" title="double sqrt(double x);">LibFunc::sqrt</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa5fe293a4388b5441e4c698d9ce6b0fdf" title="float sqrtf(float x);">LibFunc::sqrtf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00885"></a>00885     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa6c7521c4f5a3c83fa3fbba039befbbd7" title="double tan(double x);">LibFunc::tan</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa21f76953e1a21469c550069ded032649" title="float tanf(float x);">LibFunc::tanf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00886"></a>00886     AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faac115b90273355560db8fb49e1a37b74" title="double tanh(double x);">LibFunc::tanh</a>, <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa4efdeceec56f18cbb7f81f84b457d42f" title="float tanhf(float x);">LibFunc::tanhf</a>, &UnsafeUnaryDoubleFP);
+<a name="l00887"></a>00887   }
+<a name="l00888"></a>00888 
+<a name="l00889"></a>00889   <span class="comment">// Integer Optimizations</span>
+<a name="l00890"></a>00890   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"ffs"</span>] = &FFS;
+<a name="l00891"></a>00891   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"ffsl"</span>] = &FFS;
+<a name="l00892"></a>00892   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"ffsll"</span>] = &FFS;
+<a name="l00893"></a>00893   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"abs"</span>] = &Abs;
+<a name="l00894"></a>00894   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"labs"</span>] = &Abs;
+<a name="l00895"></a>00895   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"llabs"</span>] = &Abs;
+<a name="l00896"></a>00896   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"isdigit"</span>] = &IsDigit;
+<a name="l00897"></a>00897   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"isascii"</span>] = &IsAscii;
+<a name="l00898"></a>00898   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"toascii"</span>] = &ToAscii;
+<a name="l00899"></a>00899 
+<a name="l00900"></a>00900   <span class="comment">// Formatting and IO Optimizations</span>
+<a name="l00901"></a>00901   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"sprintf"</span>] = &SPrintF;
+<a name="l00902"></a>00902   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"printf"</span>] = &PrintF;
+<a name="l00903"></a>00903   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6faf2789e854208bc0ad60972756abc9afd">LibFunc::fwrite</a>, &FWrite);
+<a name="l00904"></a>00904   AddOpt(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa4a8c8d091f5ba42ce62053cb01c157d5" title="int fputs(const char *s, FILE *stream);">LibFunc::fputs</a>, &FPuts);
+<a name="l00905"></a>00905   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"fprintf"</span>] = &FPrintF;
+<a name="l00906"></a>00906   <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>[<span class="stringliteral">"puts"</span>] = &Puts;
+<a name="l00907"></a>00907 }
+<a name="l00908"></a>00908 
+<a name="l00909"></a>00909 <span class="comment"></span>
+<a name="l00910"></a>00910 <span class="comment">/// runOnFunction - Top level algorithm.</span>
+<a name="l00911"></a>00911 <span class="comment">///</span>
+<a name="l00912"></a>00912 <span class="comment"></span><span class="keywordtype">bool</span> SimplifyLibCalls::runOnFunction(<a class="code" href="classllvm_1_1Function.html">Function</a> &F) {
+<a name="l00913"></a>00913   TLI = &getAnalysis<TargetLibraryInfo>();
+<a name="l00914"></a>00914 
+<a name="l00915"></a>00915   <span class="keywordflow">if</span> (<a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>.empty())
+<a name="l00916"></a>00916     InitOptimizations();
+<a name="l00917"></a>00917 
+<a name="l00918"></a>00918   <span class="keyword">const</span> <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD = getAnalysisIfAvailable<DataLayout>();
+<a name="l00919"></a>00919 
+<a name="l00920"></a>00920   <a class="code" href="classllvm_1_1IRBuilder.html">IRBuilder<></a> Builder(F.<a class="code" href="classllvm_1_1Function.html#a2da53ac53516a3f16191f4c8a8eaa3e5">getContext</a>());
+<a name="l00921"></a>00921 
+<a name="l00922"></a>00922   <span class="keywordtype">bool</span> Changed = <span class="keyword">false</span>;
+<a name="l00923"></a>00923   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">Function::iterator</a> BB = F.<a class="code" href="classllvm_1_1Function.html#a88a5e60837674780a9d812d661897ac5">begin</a>(), E = F.<a class="code" href="classllvm_1_1Function.html#ae4ca2261b8b901e415fda7feac5051ea">end</a>(); BB != E; ++BB) {
+<a name="l00924"></a>00924     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = BB->begin(), E = BB->end(); <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != E; ) {
+<a name="l00925"></a>00925       <span class="comment">// Ignore non-calls.</span>
+<a name="l00926"></a>00926       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *CI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1CallInst.html">CallInst</a>>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>++);
+<a name="l00927"></a>00927       <span class="keywordflow">if</span> (!CI) <span class="keywordflow">continue</span>;
+<a name="l00928"></a>00928 
+<a name="l00929"></a>00929       <span class="comment">// Ignore indirect calls and calls to non-external functions.</span>
+<a name="l00930"></a>00930       <a class="code" href="classllvm_1_1Function.html">Function</a> *Callee = CI-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>();
+<a name="l00931"></a>00931       <span class="keywordflow">if</span> (Callee == 0 || !Callee-><a class="code" href="classllvm_1_1GlobalValue.html#a4640d98233102674ddb6d6efaf2b7f97">isDeclaration</a>() ||
+<a name="l00932"></a>00932           !(Callee-><a class="code" href="classllvm_1_1GlobalValue.html#a0f606d92ce05aaf49a893d7a1f55da68">hasExternalLinkage</a>() || Callee-><a class="code" href="classllvm_1_1GlobalValue.html#aa7923d9a1218e4e237f70d20efb9c647">hasDLLImportLinkage</a>()))
+<a name="l00933"></a>00933         <span class="keywordflow">continue</span>;
+<a name="l00934"></a>00934 
+<a name="l00935"></a>00935       <span class="comment">// Ignore unknown calls.</span>
+<a name="l00936"></a>00936       LibCallOptimization *LCO = <a class="code" href="PeepholeOptimizer_8cpp.html#a1fb65ab4a5af536c4f505d182f39c695">Optimizations</a>.lookup(Callee-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00937"></a>00937       <span class="keywordflow">if</span> (!LCO) <span class="keywordflow">continue</span>;
+<a name="l00938"></a>00938 
+<a name="l00939"></a>00939       <span class="comment">// Set the builder to the instruction after the call.</span>
+<a name="l00940"></a>00940       Builder.SetInsertPoint(BB, <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00941"></a>00941 
+<a name="l00942"></a>00942       <span class="comment">// Use debug location of CI for all new instructions.</span>
+<a name="l00943"></a>00943       Builder.SetCurrentDebugLocation(CI-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00944"></a>00944 
+<a name="l00945"></a>00945       <span class="comment">// Try to optimize this call.</span>
+<a name="l00946"></a>00946       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Result = LCO->OptimizeCall(CI, TD, TLI, Builder);
+<a name="l00947"></a>00947       <span class="keywordflow">if</span> (Result == 0) <span class="keywordflow">continue</span>;
+<a name="l00948"></a>00948 
+<a name="l00949"></a>00949       <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"SimplifyLibCalls simplified: "</span> << *CI;
+<a name="l00950"></a>00950             <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"  into: "</span> << *Result << <span class="stringliteral">"\n"</span>);
+<a name="l00951"></a>00951 
+<a name="l00952"></a>00952       <span class="comment">// Something changed!</span>
+<a name="l00953"></a>00953       Changed = <span class="keyword">true</span>;
+<a name="l00954"></a>00954       ++NumSimplified;
+<a name="l00955"></a>00955 
+<a name="l00956"></a>00956       <span class="comment">// Inspect the instruction after the call (which was potentially just</span>
+<a name="l00957"></a>00957       <span class="comment">// added) next.</span>
+<a name="l00958"></a>00958       <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = CI; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00959"></a>00959 
+<a name="l00960"></a>00960       <span class="keywordflow">if</span> (CI != Result && !CI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>()) {
+<a name="l00961"></a>00961         CI-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(Result);
+<a name="l00962"></a>00962         <span class="keywordflow">if</span> (!Result-><a class="code" href="classllvm_1_1Value.html#a9b6d1ca60deddf2f2c25cfea671f617c">hasName</a>())
+<a name="l00963"></a>00963           Result-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(CI);
+<a name="l00964"></a>00964       }
+<a name="l00965"></a>00965       CI-><a class="code" href="classllvm_1_1Instruction.html#a6fe2f06b8a4b2c3d6308afb223a0238a">eraseFromParent</a>();
+<a name="l00966"></a>00966     }
+<a name="l00967"></a>00967   }
+<a name="l00968"></a>00968   <span class="keywordflow">return</span> Changed;
+<a name="l00969"></a>00969 }
+<a name="l00970"></a>00970 
+<a name="l00971"></a>00971 <span class="comment">// Utility methods for doInitialization.</span>
+<a name="l00972"></a>00972 
+<a name="l00973"></a>00973 <span class="keywordtype">void</span> SimplifyLibCalls::setDoesNotAccessMemory(<a class="code" href="classllvm_1_1Function.html">Function</a> &F) {
+<a name="l00974"></a>00974   <span class="keywordflow">if</span> (!F.<a class="code" href="classllvm_1_1Function.html#a5a2090e129aebfc961af01acff2033af" title="Determine if the function does not access memory.">doesNotAccessMemory</a>()) {
+<a name="l00975"></a>00975     F.<a class="code" href="classllvm_1_1Function.html#a7247d92f3373d7d7c0424518d4a0c444">setDoesNotAccessMemory</a>();
+<a name="l00976"></a>00976     ++NumAnnotated;
+<a name="l00977"></a>00977     Modified = <span class="keyword">true</span>;
+<a name="l00978"></a>00978   }
+<a name="l00979"></a>00979 }
+<a name="l00980"></a>00980 <span class="keywordtype">void</span> SimplifyLibCalls::setOnlyReadsMemory(<a class="code" href="classllvm_1_1Function.html">Function</a> &F) {
+<a name="l00981"></a>00981   <span class="keywordflow">if</span> (!F.<a class="code" href="classllvm_1_1Function.html#a85df3357f7ec7e9610ee28f8d5613244" title="Determine if the function does not access or only reads memory.">onlyReadsMemory</a>()) {
+<a name="l00982"></a>00982     F.<a class="code" href="classllvm_1_1Function.html#acc017957ccf6fad933ee86c9db89d422">setOnlyReadsMemory</a>();
+<a name="l00983"></a>00983     ++NumAnnotated;
+<a name="l00984"></a>00984     Modified = <span class="keyword">true</span>;
+<a name="l00985"></a>00985   }
+<a name="l00986"></a>00986 }
+<a name="l00987"></a>00987 <span class="keywordtype">void</span> SimplifyLibCalls::setDoesNotThrow(<a class="code" href="classllvm_1_1Function.html">Function</a> &F) {
+<a name="l00988"></a>00988   <span class="keywordflow">if</span> (!F.<a class="code" href="classllvm_1_1Function.html#a3230e5e96b10019ecf64b8c8562c4da4" title="Determine if the function cannot unwind.">doesNotThrow</a>()) {
+<a name="l00989"></a>00989     F.<a class="code" href="classllvm_1_1Function.html#afd978c6f74e279603d47b940f60f1f24">setDoesNotThrow</a>();
+<a name="l00990"></a>00990     ++NumAnnotated;
+<a name="l00991"></a>00991     Modified = <span class="keyword">true</span>;
+<a name="l00992"></a>00992   }
+<a name="l00993"></a>00993 }
+<a name="l00994"></a>00994 <span class="keywordtype">void</span> SimplifyLibCalls::setDoesNotCapture(<a class="code" href="classllvm_1_1Function.html">Function</a> &F, <span class="keywordtype">unsigned</span> n) {
+<a name="l00995"></a>00995   <span class="keywordflow">if</span> (!F.<a class="code" href="classllvm_1_1Function.html#a768536a0299d449cd28f49698036f283" title="Determine if the parameter can be captured.">doesNotCapture</a>(n)) {
+<a name="l00996"></a>00996     F.<a class="code" href="classllvm_1_1Function.html#a6cf68bd304e17263ada89f34a39e00a3">setDoesNotCapture</a>(n);
+<a name="l00997"></a>00997     ++NumAnnotated;
+<a name="l00998"></a>00998     Modified = <span class="keyword">true</span>;
+<a name="l00999"></a>00999   }
+<a name="l01000"></a>01000 }
+<a name="l01001"></a>01001 <span class="keywordtype">void</span> SimplifyLibCalls::setDoesNotAlias(<a class="code" href="classllvm_1_1Function.html">Function</a> &F, <span class="keywordtype">unsigned</span> n) {
+<a name="l01002"></a>01002   <span class="keywordflow">if</span> (!F.<a class="code" href="classllvm_1_1Function.html#aaebf54a11162c00fd114e8543a2875c1" title="Determine if the parameter does not alias other parameters.">doesNotAlias</a>(n)) {
+<a name="l01003"></a>01003     F.<a class="code" href="classllvm_1_1Function.html#a760eb64cd1c081d90189ff8be2449822">setDoesNotAlias</a>(n);
+<a name="l01004"></a>01004     ++NumAnnotated;
+<a name="l01005"></a>01005     Modified = <span class="keyword">true</span>;
+<a name="l01006"></a>01006   }
+<a name="l01007"></a>01007 }
+<a name="l01008"></a>01008 
+<a name="l01009"></a>01009 
+<a name="l01010"></a>01010 <span class="keywordtype">void</span> SimplifyLibCalls::inferPrototypeAttributes(<a class="code" href="classllvm_1_1Function.html">Function</a> &F) {
+<a name="l01011"></a>01011   <a class="code" href="classllvm_1_1FunctionType.html">FunctionType</a> *FTy = F.<a class="code" href="classllvm_1_1Function.html#adf66d58e85fb4e46e9c1ae55186a6930">getFunctionType</a>();
+<a name="l01012"></a>01012 
+<a name="l01013"></a>01013   <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> Name = F.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>();
+<a name="l01014"></a>01014   <span class="keywordflow">switch</span> (Name[0]) {
+<a name="l01015"></a>01015   <span class="keywordflow">case</span> <span class="charliteral">'s'</span>:
+<a name="l01016"></a>01016     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strlen"</span>) {
+<a name="l01017"></a>01017       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01018"></a>01018         <span class="keywordflow">return</span>;
+<a name="l01019"></a>01019       setOnlyReadsMemory(F);
+<a name="l01020"></a>01020       setDoesNotThrow(F);
+<a name="l01021"></a>01021       setDoesNotCapture(F, 1);
+<a name="l01022"></a>01022     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strchr"</span> ||
+<a name="l01023"></a>01023                Name == <span class="stringliteral">"strrchr"</span>) {
+<a name="l01024"></a>01024       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01025"></a>01025           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01026"></a>01026           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>())
+<a name="l01027"></a>01027         <span class="keywordflow">return</span>;
+<a name="l01028"></a>01028       setOnlyReadsMemory(F);
+<a name="l01029"></a>01029       setDoesNotThrow(F);
+<a name="l01030"></a>01030     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strcpy"</span> ||
+<a name="l01031"></a>01031                Name == <span class="stringliteral">"stpcpy"</span> ||
+<a name="l01032"></a>01032                Name == <span class="stringliteral">"strcat"</span> ||
+<a name="l01033"></a>01033                Name == <span class="stringliteral">"strtol"</span> ||
+<a name="l01034"></a>01034                Name == <span class="stringliteral">"strtod"</span> ||
+<a name="l01035"></a>01035                Name == <span class="stringliteral">"strtof"</span> ||
+<a name="l01036"></a>01036                Name == <span class="stringliteral">"strtoul"</span> ||
+<a name="l01037"></a>01037                Name == <span class="stringliteral">"strtoll"</span> ||
+<a name="l01038"></a>01038                Name == <span class="stringliteral">"strtold"</span> ||
+<a name="l01039"></a>01039                Name == <span class="stringliteral">"strncat"</span> ||
+<a name="l01040"></a>01040                Name == <span class="stringliteral">"strncpy"</span> ||
+<a name="l01041"></a>01041                Name == <span class="stringliteral">"stpncpy"</span> ||
+<a name="l01042"></a>01042                Name == <span class="stringliteral">"strtoull"</span>) {
+<a name="l01043"></a>01043       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01044"></a>01044           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01045"></a>01045         <span class="keywordflow">return</span>;
+<a name="l01046"></a>01046       setDoesNotThrow(F);
+<a name="l01047"></a>01047       setDoesNotCapture(F, 2);
+<a name="l01048"></a>01048     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strxfrm"</span>) {
+<a name="l01049"></a>01049       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01050"></a>01050           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01051"></a>01051           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01052"></a>01052         <span class="keywordflow">return</span>;
+<a name="l01053"></a>01053       setDoesNotThrow(F);
+<a name="l01054"></a>01054       setDoesNotCapture(F, 1);
+<a name="l01055"></a>01055       setDoesNotCapture(F, 2);
+<a name="l01056"></a>01056     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strcmp"</span> ||
+<a name="l01057"></a>01057                Name == <span class="stringliteral">"strspn"</span> ||
+<a name="l01058"></a>01058                Name == <span class="stringliteral">"strncmp"</span> ||
+<a name="l01059"></a>01059                Name == <span class="stringliteral">"strcspn"</span> ||
+<a name="l01060"></a>01060                Name == <span class="stringliteral">"strcoll"</span> ||
+<a name="l01061"></a>01061                Name == <span class="stringliteral">"strcasecmp"</span> ||
+<a name="l01062"></a>01062                Name == <span class="stringliteral">"strncasecmp"</span>) {
+<a name="l01063"></a>01063       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01064"></a>01064           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01065"></a>01065           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01066"></a>01066         <span class="keywordflow">return</span>;
+<a name="l01067"></a>01067       setOnlyReadsMemory(F);
+<a name="l01068"></a>01068       setDoesNotThrow(F);
+<a name="l01069"></a>01069       setDoesNotCapture(F, 1);
+<a name="l01070"></a>01070       setDoesNotCapture(F, 2);
+<a name="l01071"></a>01071     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strstr"</span> ||
+<a name="l01072"></a>01072                Name == <span class="stringliteral">"strpbrk"</span>) {
+<a name="l01073"></a>01073       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01074"></a>01074         <span class="keywordflow">return</span>;
+<a name="l01075"></a>01075       setOnlyReadsMemory(F);
+<a name="l01076"></a>01076       setDoesNotThrow(F);
+<a name="l01077"></a>01077       setDoesNotCapture(F, 2);
+<a name="l01078"></a>01078     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strtok"</span> ||
+<a name="l01079"></a>01079                Name == <span class="stringliteral">"strtok_r"</span>) {
+<a name="l01080"></a>01080       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01081"></a>01081         <span class="keywordflow">return</span>;
+<a name="l01082"></a>01082       setDoesNotThrow(F);
+<a name="l01083"></a>01083       setDoesNotCapture(F, 2);
+<a name="l01084"></a>01084     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"scanf"</span> ||
+<a name="l01085"></a>01085                Name == <span class="stringliteral">"setbuf"</span> ||
+<a name="l01086"></a>01086                Name == <span class="stringliteral">"setvbuf"</span>) {
+<a name="l01087"></a>01087       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01088"></a>01088         <span class="keywordflow">return</span>;
+<a name="l01089"></a>01089       setDoesNotThrow(F);
+<a name="l01090"></a>01090       setDoesNotCapture(F, 1);
+<a name="l01091"></a>01091     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"strdup"</span> ||
+<a name="l01092"></a>01092                Name == <span class="stringliteral">"strndup"</span>) {
+<a name="l01093"></a>01093       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01094"></a>01094           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01095"></a>01095         <span class="keywordflow">return</span>;
+<a name="l01096"></a>01096       setDoesNotThrow(F);
+<a name="l01097"></a>01097       setDoesNotAlias(F, 0);
+<a name="l01098"></a>01098       setDoesNotCapture(F, 1);
+<a name="l01099"></a>01099     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"stat"</span> ||
+<a name="l01100"></a>01100                Name == <span class="stringliteral">"sscanf"</span> ||
+<a name="l01101"></a>01101                Name == <span class="stringliteral">"sprintf"</span> ||
+<a name="l01102"></a>01102                Name == <span class="stringliteral">"statvfs"</span>) {
+<a name="l01103"></a>01103       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01104"></a>01104           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01105"></a>01105           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01106"></a>01106         <span class="keywordflow">return</span>;
+<a name="l01107"></a>01107       setDoesNotThrow(F);
+<a name="l01108"></a>01108       setDoesNotCapture(F, 1);
+<a name="l01109"></a>01109       setDoesNotCapture(F, 2);
+<a name="l01110"></a>01110     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"snprintf"</span>) {
+<a name="l01111"></a>01111       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01112"></a>01112           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01113"></a>01113           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01114"></a>01114         <span class="keywordflow">return</span>;
+<a name="l01115"></a>01115       setDoesNotThrow(F);
+<a name="l01116"></a>01116       setDoesNotCapture(F, 1);
+<a name="l01117"></a>01117       setDoesNotCapture(F, 3);
+<a name="l01118"></a>01118     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"setitimer"</span>) {
+<a name="l01119"></a>01119       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01120"></a>01120           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01121"></a>01121           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01122"></a>01122         <span class="keywordflow">return</span>;
+<a name="l01123"></a>01123       setDoesNotThrow(F);
+<a name="l01124"></a>01124       setDoesNotCapture(F, 2);
+<a name="l01125"></a>01125       setDoesNotCapture(F, 3);
+<a name="l01126"></a>01126     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"system"</span>) {
+<a name="l01127"></a>01127       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 ||
+<a name="l01128"></a>01128           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01129"></a>01129         <span class="keywordflow">return</span>;
+<a name="l01130"></a>01130       <span class="comment">// May throw; "system" is a valid pthread cancellation point.</span>
+<a name="l01131"></a>01131       setDoesNotCapture(F, 1);
+<a name="l01132"></a>01132     }
+<a name="l01133"></a>01133     <span class="keywordflow">break</span>;
+<a name="l01134"></a>01134   <span class="keywordflow">case</span> <span class="charliteral">'m'</span>:
+<a name="l01135"></a>01135     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"malloc"</span>) {
+<a name="l01136"></a>01136       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 ||
+<a name="l01137"></a>01137           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01138"></a>01138         <span class="keywordflow">return</span>;
+<a name="l01139"></a>01139       setDoesNotThrow(F);
+<a name="l01140"></a>01140       setDoesNotAlias(F, 0);
+<a name="l01141"></a>01141     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"memcmp"</span>) {
+<a name="l01142"></a>01142       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01143"></a>01143           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01144"></a>01144           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01145"></a>01145         <span class="keywordflow">return</span>;
+<a name="l01146"></a>01146       setOnlyReadsMemory(F);
+<a name="l01147"></a>01147       setDoesNotThrow(F);
+<a name="l01148"></a>01148       setDoesNotCapture(F, 1);
+<a name="l01149"></a>01149       setDoesNotCapture(F, 2);
+<a name="l01150"></a>01150     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"memchr"</span> ||
+<a name="l01151"></a>01151                Name == <span class="stringliteral">"memrchr"</span>) {
+<a name="l01152"></a>01152       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3)
+<a name="l01153"></a>01153         <span class="keywordflow">return</span>;
+<a name="l01154"></a>01154       setOnlyReadsMemory(F);
+<a name="l01155"></a>01155       setDoesNotThrow(F);
+<a name="l01156"></a>01156     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"modf"</span> ||
+<a name="l01157"></a>01157                Name == <span class="stringliteral">"modff"</span> ||
+<a name="l01158"></a>01158                Name == <span class="stringliteral">"modfl"</span> ||
+<a name="l01159"></a>01159                Name == <span class="stringliteral">"memcpy"</span> ||
+<a name="l01160"></a>01160                Name == <span class="stringliteral">"memccpy"</span> ||
+<a name="l01161"></a>01161                Name == <span class="stringliteral">"memmove"</span>) {
+<a name="l01162"></a>01162       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01163"></a>01163           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01164"></a>01164         <span class="keywordflow">return</span>;
+<a name="l01165"></a>01165       setDoesNotThrow(F);
+<a name="l01166"></a>01166       setDoesNotCapture(F, 2);
+<a name="l01167"></a>01167     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"memalign"</span>) {
+<a name="l01168"></a>01168       <span class="keywordflow">if</span> (!FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01169"></a>01169         <span class="keywordflow">return</span>;
+<a name="l01170"></a>01170       setDoesNotAlias(F, 0);
+<a name="l01171"></a>01171     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"mkdir"</span> ||
+<a name="l01172"></a>01172                Name == <span class="stringliteral">"mktime"</span>) {
+<a name="l01173"></a>01173       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() == 0 ||
+<a name="l01174"></a>01174           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01175"></a>01175         <span class="keywordflow">return</span>;
+<a name="l01176"></a>01176       setDoesNotThrow(F);
+<a name="l01177"></a>01177       setDoesNotCapture(F, 1);
+<a name="l01178"></a>01178     }
+<a name="l01179"></a>01179     <span class="keywordflow">break</span>;
+<a name="l01180"></a>01180   <span class="keywordflow">case</span> <span class="charliteral">'r'</span>:
+<a name="l01181"></a>01181     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"realloc"</span>) {
+<a name="l01182"></a>01182       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01183"></a>01183           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01184"></a>01184           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01185"></a>01185         <span class="keywordflow">return</span>;
+<a name="l01186"></a>01186       setDoesNotThrow(F);
+<a name="l01187"></a>01187       setDoesNotAlias(F, 0);
+<a name="l01188"></a>01188       setDoesNotCapture(F, 1);
+<a name="l01189"></a>01189     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"read"</span>) {
+<a name="l01190"></a>01190       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01191"></a>01191           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01192"></a>01192         <span class="keywordflow">return</span>;
+<a name="l01193"></a>01193       <span class="comment">// May throw; "read" is a valid pthread cancellation point.</span>
+<a name="l01194"></a>01194       setDoesNotCapture(F, 2);
+<a name="l01195"></a>01195     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"rmdir"</span> ||
+<a name="l01196"></a>01196                Name == <span class="stringliteral">"rewind"</span> ||
+<a name="l01197"></a>01197                Name == <span class="stringliteral">"remove"</span> ||
+<a name="l01198"></a>01198                Name == <span class="stringliteral">"realpath"</span>) {
+<a name="l01199"></a>01199       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 ||
+<a name="l01200"></a>01200           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01201"></a>01201         <span class="keywordflow">return</span>;
+<a name="l01202"></a>01202       setDoesNotThrow(F);
+<a name="l01203"></a>01203       setDoesNotCapture(F, 1);
+<a name="l01204"></a>01204     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"rename"</span> ||
+<a name="l01205"></a>01205                Name == <span class="stringliteral">"readlink"</span>) {
+<a name="l01206"></a>01206       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01207"></a>01207           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01208"></a>01208           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01209"></a>01209         <span class="keywordflow">return</span>;
+<a name="l01210"></a>01210       setDoesNotThrow(F);
+<a name="l01211"></a>01211       setDoesNotCapture(F, 1);
+<a name="l01212"></a>01212       setDoesNotCapture(F, 2);
+<a name="l01213"></a>01213     }
+<a name="l01214"></a>01214     <span class="keywordflow">break</span>;
+<a name="l01215"></a>01215   <span class="keywordflow">case</span> <span class="charliteral">'w'</span>:
+<a name="l01216"></a>01216     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"write"</span>) {
+<a name="l01217"></a>01217       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01218"></a>01218         <span class="keywordflow">return</span>;
+<a name="l01219"></a>01219       <span class="comment">// May throw; "write" is a valid pthread cancellation point.</span>
+<a name="l01220"></a>01220       setDoesNotCapture(F, 2);
+<a name="l01221"></a>01221     }
+<a name="l01222"></a>01222     <span class="keywordflow">break</span>;
+<a name="l01223"></a>01223   <span class="keywordflow">case</span> <span class="charliteral">'b'</span>:
+<a name="l01224"></a>01224     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"bcopy"</span>) {
+<a name="l01225"></a>01225       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01226"></a>01226           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01227"></a>01227           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01228"></a>01228         <span class="keywordflow">return</span>;
+<a name="l01229"></a>01229       setDoesNotThrow(F);
+<a name="l01230"></a>01230       setDoesNotCapture(F, 1);
+<a name="l01231"></a>01231       setDoesNotCapture(F, 2);
+<a name="l01232"></a>01232     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"bcmp"</span>) {
+<a name="l01233"></a>01233       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01234"></a>01234           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01235"></a>01235           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01236"></a>01236         <span class="keywordflow">return</span>;
+<a name="l01237"></a>01237       setDoesNotThrow(F);
+<a name="l01238"></a>01238       setOnlyReadsMemory(F);
+<a name="l01239"></a>01239       setDoesNotCapture(F, 1);
+<a name="l01240"></a>01240       setDoesNotCapture(F, 2);
+<a name="l01241"></a>01241     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"bzero"</span>) {
+<a name="l01242"></a>01242       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01243"></a>01243         <span class="keywordflow">return</span>;
+<a name="l01244"></a>01244       setDoesNotThrow(F);
+<a name="l01245"></a>01245       setDoesNotCapture(F, 1);
+<a name="l01246"></a>01246     }
+<a name="l01247"></a>01247     <span class="keywordflow">break</span>;
+<a name="l01248"></a>01248   <span class="keywordflow">case</span> <span class="charliteral">'c'</span>:
+<a name="l01249"></a>01249     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"calloc"</span>) {
+<a name="l01250"></a>01250       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01251"></a>01251           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01252"></a>01252         <span class="keywordflow">return</span>;
+<a name="l01253"></a>01253       setDoesNotThrow(F);
+<a name="l01254"></a>01254       setDoesNotAlias(F, 0);
+<a name="l01255"></a>01255     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"chmod"</span> ||
+<a name="l01256"></a>01256                Name == <span class="stringliteral">"chown"</span> ||
+<a name="l01257"></a>01257                Name == <span class="stringliteral">"ctermid"</span> ||
+<a name="l01258"></a>01258                Name == <span class="stringliteral">"clearerr"</span> ||
+<a name="l01259"></a>01259                Name == <span class="stringliteral">"closedir"</span>) {
+<a name="l01260"></a>01260       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() == 0 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01261"></a>01261         <span class="keywordflow">return</span>;
+<a name="l01262"></a>01262       setDoesNotThrow(F);
+<a name="l01263"></a>01263       setDoesNotCapture(F, 1);
+<a name="l01264"></a>01264     }
+<a name="l01265"></a>01265     <span class="keywordflow">break</span>;
+<a name="l01266"></a>01266   <span class="keywordflow">case</span> <span class="charliteral">'a'</span>:
+<a name="l01267"></a>01267     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"atoi"</span> ||
+<a name="l01268"></a>01268         Name == <span class="stringliteral">"atol"</span> ||
+<a name="l01269"></a>01269         Name == <span class="stringliteral">"atof"</span> ||
+<a name="l01270"></a>01270         Name == <span class="stringliteral">"atoll"</span>) {
+<a name="l01271"></a>01271       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01272"></a>01272         <span class="keywordflow">return</span>;
+<a name="l01273"></a>01273       setDoesNotThrow(F);
+<a name="l01274"></a>01274       setOnlyReadsMemory(F);
+<a name="l01275"></a>01275       setDoesNotCapture(F, 1);
+<a name="l01276"></a>01276     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"access"</span>) {
+<a name="l01277"></a>01277       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01278"></a>01278         <span class="keywordflow">return</span>;
+<a name="l01279"></a>01279       setDoesNotThrow(F);
+<a name="l01280"></a>01280       setDoesNotCapture(F, 1);
+<a name="l01281"></a>01281     }
+<a name="l01282"></a>01282     <span class="keywordflow">break</span>;
+<a name="l01283"></a>01283   <span class="keywordflow">case</span> <span class="charliteral">'f'</span>:
+<a name="l01284"></a>01284     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fopen"</span>) {
+<a name="l01285"></a>01285       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01286"></a>01286           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01287"></a>01287           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01288"></a>01288           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01289"></a>01289         <span class="keywordflow">return</span>;
+<a name="l01290"></a>01290       setDoesNotThrow(F);
+<a name="l01291"></a>01291       setDoesNotAlias(F, 0);
+<a name="l01292"></a>01292       setDoesNotCapture(F, 1);
+<a name="l01293"></a>01293       setDoesNotCapture(F, 2);
+<a name="l01294"></a>01294     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fdopen"</span>) {
+<a name="l01295"></a>01295       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01296"></a>01296           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01297"></a>01297           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01298"></a>01298         <span class="keywordflow">return</span>;
+<a name="l01299"></a>01299       setDoesNotThrow(F);
+<a name="l01300"></a>01300       setDoesNotAlias(F, 0);
+<a name="l01301"></a>01301       setDoesNotCapture(F, 2);
+<a name="l01302"></a>01302     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"feof"</span> ||
+<a name="l01303"></a>01303                Name == <span class="stringliteral">"free"</span> ||
+<a name="l01304"></a>01304                Name == <span class="stringliteral">"fseek"</span> ||
+<a name="l01305"></a>01305                Name == <span class="stringliteral">"ftell"</span> ||
+<a name="l01306"></a>01306                Name == <span class="stringliteral">"fgetc"</span> ||
+<a name="l01307"></a>01307                Name == <span class="stringliteral">"fseeko"</span> ||
+<a name="l01308"></a>01308                Name == <span class="stringliteral">"ftello"</span> ||
+<a name="l01309"></a>01309                Name == <span class="stringliteral">"fileno"</span> ||
+<a name="l01310"></a>01310                Name == <span class="stringliteral">"fflush"</span> ||
+<a name="l01311"></a>01311                Name == <span class="stringliteral">"fclose"</span> ||
+<a name="l01312"></a>01312                Name == <span class="stringliteral">"fsetpos"</span> ||
+<a name="l01313"></a>01313                Name == <span class="stringliteral">"flockfile"</span> ||
+<a name="l01314"></a>01314                Name == <span class="stringliteral">"funlockfile"</span> ||
+<a name="l01315"></a>01315                Name == <span class="stringliteral">"ftrylockfile"</span>) {
+<a name="l01316"></a>01316       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() == 0 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01317"></a>01317         <span class="keywordflow">return</span>;
+<a name="l01318"></a>01318       setDoesNotThrow(F);
+<a name="l01319"></a>01319       setDoesNotCapture(F, 1);
+<a name="l01320"></a>01320     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"ferror"</span>) {
+<a name="l01321"></a>01321       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01322"></a>01322         <span class="keywordflow">return</span>;
+<a name="l01323"></a>01323       setDoesNotThrow(F);
+<a name="l01324"></a>01324       setDoesNotCapture(F, 1);
+<a name="l01325"></a>01325       setOnlyReadsMemory(F);
+<a name="l01326"></a>01326     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fputc"</span> ||
+<a name="l01327"></a>01327                Name == <span class="stringliteral">"fstat"</span> ||
+<a name="l01328"></a>01328                Name == <span class="stringliteral">"frexp"</span> ||
+<a name="l01329"></a>01329                Name == <span class="stringliteral">"frexpf"</span> ||
+<a name="l01330"></a>01330                Name == <span class="stringliteral">"frexpl"</span> ||
+<a name="l01331"></a>01331                Name == <span class="stringliteral">"fstatvfs"</span>) {
+<a name="l01332"></a>01332       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01333"></a>01333         <span class="keywordflow">return</span>;
+<a name="l01334"></a>01334       setDoesNotThrow(F);
+<a name="l01335"></a>01335       setDoesNotCapture(F, 2);
+<a name="l01336"></a>01336     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fgets"</span>) {
+<a name="l01337"></a>01337       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01338"></a>01338           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01339"></a>01339           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01340"></a>01340         <span class="keywordflow">return</span>;
+<a name="l01341"></a>01341       setDoesNotThrow(F);
+<a name="l01342"></a>01342       setDoesNotCapture(F, 3);
+<a name="l01343"></a>01343     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fread"</span> ||
+<a name="l01344"></a>01344                Name == <span class="stringliteral">"fwrite"</span>) {
+<a name="l01345"></a>01345       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 4 ||
+<a name="l01346"></a>01346           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01347"></a>01347           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(3)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01348"></a>01348         <span class="keywordflow">return</span>;
+<a name="l01349"></a>01349       setDoesNotThrow(F);
+<a name="l01350"></a>01350       setDoesNotCapture(F, 1);
+<a name="l01351"></a>01351       setDoesNotCapture(F, 4);
+<a name="l01352"></a>01352     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"fputs"</span> ||
+<a name="l01353"></a>01353                Name == <span class="stringliteral">"fscanf"</span> ||
+<a name="l01354"></a>01354                Name == <span class="stringliteral">"fprintf"</span> ||
+<a name="l01355"></a>01355                Name == <span class="stringliteral">"fgetpos"</span>) {
+<a name="l01356"></a>01356       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 ||
+<a name="l01357"></a>01357           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01358"></a>01358           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01359"></a>01359         <span class="keywordflow">return</span>;
+<a name="l01360"></a>01360       setDoesNotThrow(F);
+<a name="l01361"></a>01361       setDoesNotCapture(F, 1);
+<a name="l01362"></a>01362       setDoesNotCapture(F, 2);
+<a name="l01363"></a>01363     }
+<a name="l01364"></a>01364     <span class="keywordflow">break</span>;
+<a name="l01365"></a>01365   <span class="keywordflow">case</span> <span class="charliteral">'g'</span>:
+<a name="l01366"></a>01366     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"getc"</span> ||
+<a name="l01367"></a>01367         Name == <span class="stringliteral">"getlogin_r"</span> ||
+<a name="l01368"></a>01368         Name == <span class="stringliteral">"getc_unlocked"</span>) {
+<a name="l01369"></a>01369       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() == 0 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01370"></a>01370         <span class="keywordflow">return</span>;
+<a name="l01371"></a>01371       setDoesNotThrow(F);
+<a name="l01372"></a>01372       setDoesNotCapture(F, 1);
+<a name="l01373"></a>01373     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"getenv"</span>) {
+<a name="l01374"></a>01374       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01375"></a>01375         <span class="keywordflow">return</span>;
+<a name="l01376"></a>01376       setDoesNotThrow(F);
+<a name="l01377"></a>01377       setOnlyReadsMemory(F);
+<a name="l01378"></a>01378       setDoesNotCapture(F, 1);
+<a name="l01379"></a>01379     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"gets"</span> ||
+<a name="l01380"></a>01380                Name == <span class="stringliteral">"getchar"</span>) {
+<a name="l01381"></a>01381       setDoesNotThrow(F);
+<a name="l01382"></a>01382     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"getitimer"</span>) {
+<a name="l01383"></a>01383       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01384"></a>01384         <span class="keywordflow">return</span>;
+<a name="l01385"></a>01385       setDoesNotThrow(F);
+<a name="l01386"></a>01386       setDoesNotCapture(F, 2);
+<a name="l01387"></a>01387     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"getpwnam"</span>) {
+<a name="l01388"></a>01388       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01389"></a>01389         <span class="keywordflow">return</span>;
+<a name="l01390"></a>01390       setDoesNotThrow(F);
+<a name="l01391"></a>01391       setDoesNotCapture(F, 1);
+<a name="l01392"></a>01392     }
+<a name="l01393"></a>01393     <span class="keywordflow">break</span>;
+<a name="l01394"></a>01394   <span class="keywordflow">case</span> <span class="charliteral">'u'</span>:
+<a name="l01395"></a>01395     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"ungetc"</span>) {
+<a name="l01396"></a>01396       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01397"></a>01397         <span class="keywordflow">return</span>;
+<a name="l01398"></a>01398       setDoesNotThrow(F);
+<a name="l01399"></a>01399       setDoesNotCapture(F, 2);
+<a name="l01400"></a>01400     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"uname"</span> ||
+<a name="l01401"></a>01401                Name == <span class="stringliteral">"unlink"</span> ||
+<a name="l01402"></a>01402                Name == <span class="stringliteral">"unsetenv"</span>) {
+<a name="l01403"></a>01403       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01404"></a>01404         <span class="keywordflow">return</span>;
+<a name="l01405"></a>01405       setDoesNotThrow(F);
+<a name="l01406"></a>01406       setDoesNotCapture(F, 1);
+<a name="l01407"></a>01407     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"utime"</span> ||
+<a name="l01408"></a>01408                Name == <span class="stringliteral">"utimes"</span>) {
+<a name="l01409"></a>01409       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01410"></a>01410           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01411"></a>01411           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01412"></a>01412         <span class="keywordflow">return</span>;
+<a name="l01413"></a>01413       setDoesNotThrow(F);
+<a name="l01414"></a>01414       setDoesNotCapture(F, 1);
+<a name="l01415"></a>01415       setDoesNotCapture(F, 2);
+<a name="l01416"></a>01416     }
+<a name="l01417"></a>01417     <span class="keywordflow">break</span>;
+<a name="l01418"></a>01418   <span class="keywordflow">case</span> <span class="charliteral">'p'</span>:
+<a name="l01419"></a>01419     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"putc"</span>) {
+<a name="l01420"></a>01420       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01421"></a>01421         <span class="keywordflow">return</span>;
+<a name="l01422"></a>01422       setDoesNotThrow(F);
+<a name="l01423"></a>01423       setDoesNotCapture(F, 2);
+<a name="l01424"></a>01424     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"puts"</span> ||
+<a name="l01425"></a>01425                Name == <span class="stringliteral">"printf"</span> ||
+<a name="l01426"></a>01426                Name == <span class="stringliteral">"perror"</span>) {
+<a name="l01427"></a>01427       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01428"></a>01428         <span class="keywordflow">return</span>;
+<a name="l01429"></a>01429       setDoesNotThrow(F);
+<a name="l01430"></a>01430       setDoesNotCapture(F, 1);
+<a name="l01431"></a>01431     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"pread"</span> ||
+<a name="l01432"></a>01432                Name == <span class="stringliteral">"pwrite"</span>) {
+<a name="l01433"></a>01433       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 4 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01434"></a>01434         <span class="keywordflow">return</span>;
+<a name="l01435"></a>01435       <span class="comment">// May throw; these are valid pthread cancellation points.</span>
+<a name="l01436"></a>01436       setDoesNotCapture(F, 2);
+<a name="l01437"></a>01437     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"putchar"</span>) {
+<a name="l01438"></a>01438       setDoesNotThrow(F);
+<a name="l01439"></a>01439     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"popen"</span>) {
+<a name="l01440"></a>01440       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01441"></a>01441           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01442"></a>01442           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01443"></a>01443           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01444"></a>01444         <span class="keywordflow">return</span>;
+<a name="l01445"></a>01445       setDoesNotThrow(F);
+<a name="l01446"></a>01446       setDoesNotAlias(F, 0);
+<a name="l01447"></a>01447       setDoesNotCapture(F, 1);
+<a name="l01448"></a>01448       setDoesNotCapture(F, 2);
+<a name="l01449"></a>01449     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"pclose"</span>) {
+<a name="l01450"></a>01450       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01451"></a>01451         <span class="keywordflow">return</span>;
+<a name="l01452"></a>01452       setDoesNotThrow(F);
+<a name="l01453"></a>01453       setDoesNotCapture(F, 1);
+<a name="l01454"></a>01454     }
+<a name="l01455"></a>01455     <span class="keywordflow">break</span>;
+<a name="l01456"></a>01456   <span class="keywordflow">case</span> <span class="charliteral">'v'</span>:
+<a name="l01457"></a>01457     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"vscanf"</span>) {
+<a name="l01458"></a>01458       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01459"></a>01459         <span class="keywordflow">return</span>;
+<a name="l01460"></a>01460       setDoesNotThrow(F);
+<a name="l01461"></a>01461       setDoesNotCapture(F, 1);
+<a name="l01462"></a>01462     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"vsscanf"</span> ||
+<a name="l01463"></a>01463                Name == <span class="stringliteral">"vfscanf"</span>) {
+<a name="l01464"></a>01464       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01465"></a>01465           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01466"></a>01466           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01467"></a>01467         <span class="keywordflow">return</span>;
+<a name="l01468"></a>01468       setDoesNotThrow(F);
+<a name="l01469"></a>01469       setDoesNotCapture(F, 1);
+<a name="l01470"></a>01470       setDoesNotCapture(F, 2);
+<a name="l01471"></a>01471     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"valloc"</span>) {
+<a name="l01472"></a>01472       <span class="keywordflow">if</span> (!FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01473"></a>01473         <span class="keywordflow">return</span>;
+<a name="l01474"></a>01474       setDoesNotThrow(F);
+<a name="l01475"></a>01475       setDoesNotAlias(F, 0);
+<a name="l01476"></a>01476     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"vprintf"</span>) {
+<a name="l01477"></a>01477       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01478"></a>01478         <span class="keywordflow">return</span>;
+<a name="l01479"></a>01479       setDoesNotThrow(F);
+<a name="l01480"></a>01480       setDoesNotCapture(F, 1);
+<a name="l01481"></a>01481     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"vfprintf"</span> ||
+<a name="l01482"></a>01482                Name == <span class="stringliteral">"vsprintf"</span>) {
+<a name="l01483"></a>01483       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01484"></a>01484           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01485"></a>01485           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01486"></a>01486         <span class="keywordflow">return</span>;
+<a name="l01487"></a>01487       setDoesNotThrow(F);
+<a name="l01488"></a>01488       setDoesNotCapture(F, 1);
+<a name="l01489"></a>01489       setDoesNotCapture(F, 2);
+<a name="l01490"></a>01490     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"vsnprintf"</span>) {
+<a name="l01491"></a>01491       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 4 ||
+<a name="l01492"></a>01492           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01493"></a>01493           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(2)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01494"></a>01494         <span class="keywordflow">return</span>;
+<a name="l01495"></a>01495       setDoesNotThrow(F);
+<a name="l01496"></a>01496       setDoesNotCapture(F, 1);
+<a name="l01497"></a>01497       setDoesNotCapture(F, 3);
+<a name="l01498"></a>01498     }
+<a name="l01499"></a>01499     <span class="keywordflow">break</span>;
+<a name="l01500"></a>01500   <span class="keywordflow">case</span> <span class="charliteral">'o'</span>:
+<a name="l01501"></a>01501     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"open"</span>) {
+<a name="l01502"></a>01502       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01503"></a>01503         <span class="keywordflow">return</span>;
+<a name="l01504"></a>01504       <span class="comment">// May throw; "open" is a valid pthread cancellation point.</span>
+<a name="l01505"></a>01505       setDoesNotCapture(F, 1);
+<a name="l01506"></a>01506     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"opendir"</span>) {
+<a name="l01507"></a>01507       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 ||
+<a name="l01508"></a>01508           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01509"></a>01509           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01510"></a>01510         <span class="keywordflow">return</span>;
+<a name="l01511"></a>01511       setDoesNotThrow(F);
+<a name="l01512"></a>01512       setDoesNotAlias(F, 0);
+<a name="l01513"></a>01513       setDoesNotCapture(F, 1);
+<a name="l01514"></a>01514     }
+<a name="l01515"></a>01515     <span class="keywordflow">break</span>;
+<a name="l01516"></a>01516   <span class="keywordflow">case</span> <span class="charliteral">'t'</span>:
+<a name="l01517"></a>01517     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"tmpfile"</span>) {
+<a name="l01518"></a>01518       <span class="keywordflow">if</span> (!FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01519"></a>01519         <span class="keywordflow">return</span>;
+<a name="l01520"></a>01520       setDoesNotThrow(F);
+<a name="l01521"></a>01521       setDoesNotAlias(F, 0);
+<a name="l01522"></a>01522     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"times"</span>) {
+<a name="l01523"></a>01523       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01524"></a>01524         <span class="keywordflow">return</span>;
+<a name="l01525"></a>01525       setDoesNotThrow(F);
+<a name="l01526"></a>01526       setDoesNotCapture(F, 1);
+<a name="l01527"></a>01527     }
+<a name="l01528"></a>01528     <span class="keywordflow">break</span>;
+<a name="l01529"></a>01529   <span class="keywordflow">case</span> <span class="charliteral">'h'</span>:
+<a name="l01530"></a>01530     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"htonl"</span> ||
+<a name="l01531"></a>01531         Name == <span class="stringliteral">"htons"</span>) {
+<a name="l01532"></a>01532       setDoesNotThrow(F);
+<a name="l01533"></a>01533       setDoesNotAccessMemory(F);
+<a name="l01534"></a>01534     }
+<a name="l01535"></a>01535     <span class="keywordflow">break</span>;
+<a name="l01536"></a>01536   <span class="keywordflow">case</span> <span class="charliteral">'n'</span>:
+<a name="l01537"></a>01537     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"ntohl"</span> ||
+<a name="l01538"></a>01538         Name == <span class="stringliteral">"ntohs"</span>) {
+<a name="l01539"></a>01539       setDoesNotThrow(F);
+<a name="l01540"></a>01540       setDoesNotAccessMemory(F);
+<a name="l01541"></a>01541     }
+<a name="l01542"></a>01542     <span class="keywordflow">break</span>;
+<a name="l01543"></a>01543   <span class="keywordflow">case</span> <span class="charliteral">'l'</span>:
+<a name="l01544"></a>01544     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"lstat"</span>) {
+<a name="l01545"></a>01545       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01546"></a>01546           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01547"></a>01547           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01548"></a>01548         <span class="keywordflow">return</span>;
+<a name="l01549"></a>01549       setDoesNotThrow(F);
+<a name="l01550"></a>01550       setDoesNotCapture(F, 1);
+<a name="l01551"></a>01551       setDoesNotCapture(F, 2);
+<a name="l01552"></a>01552     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"lchown"</span>) {
+<a name="l01553"></a>01553       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01554"></a>01554         <span class="keywordflow">return</span>;
+<a name="l01555"></a>01555       setDoesNotThrow(F);
+<a name="l01556"></a>01556       setDoesNotCapture(F, 1);
+<a name="l01557"></a>01557     }
+<a name="l01558"></a>01558     <span class="keywordflow">break</span>;
+<a name="l01559"></a>01559   <span class="keywordflow">case</span> <span class="charliteral">'q'</span>:
+<a name="l01560"></a>01560     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"qsort"</span>) {
+<a name="l01561"></a>01561       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 4 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(3)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01562"></a>01562         <span class="keywordflow">return</span>;
+<a name="l01563"></a>01563       <span class="comment">// May throw; places call through function pointer.</span>
+<a name="l01564"></a>01564       setDoesNotCapture(F, 4);
+<a name="l01565"></a>01565     }
+<a name="l01566"></a>01566     <span class="keywordflow">break</span>;
+<a name="l01567"></a>01567   <span class="keywordflow">case</span> <span class="charliteral">'_'</span>:
+<a name="l01568"></a>01568     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"__strdup"</span> ||
+<a name="l01569"></a>01569         Name == <span class="stringliteral">"__strndup"</span>) {
+<a name="l01570"></a>01570       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 ||
+<a name="l01571"></a>01571           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01572"></a>01572           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01573"></a>01573         <span class="keywordflow">return</span>;
+<a name="l01574"></a>01574       setDoesNotThrow(F);
+<a name="l01575"></a>01575       setDoesNotAlias(F, 0);
+<a name="l01576"></a>01576       setDoesNotCapture(F, 1);
+<a name="l01577"></a>01577     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"__strtok_r"</span>) {
+<a name="l01578"></a>01578       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 3 ||
+<a name="l01579"></a>01579           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01580"></a>01580         <span class="keywordflow">return</span>;
+<a name="l01581"></a>01581       setDoesNotThrow(F);
+<a name="l01582"></a>01582       setDoesNotCapture(F, 2);
+<a name="l01583"></a>01583     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"_IO_getc"</span>) {
+<a name="l01584"></a>01584       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 1 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01585"></a>01585         <span class="keywordflow">return</span>;
+<a name="l01586"></a>01586       setDoesNotThrow(F);
+<a name="l01587"></a>01587       setDoesNotCapture(F, 1);
+<a name="l01588"></a>01588     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"_IO_putc"</span>) {
+<a name="l01589"></a>01589       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01590"></a>01590         <span class="keywordflow">return</span>;
+<a name="l01591"></a>01591       setDoesNotThrow(F);
+<a name="l01592"></a>01592       setDoesNotCapture(F, 2);
+<a name="l01593"></a>01593     }
+<a name="l01594"></a>01594     <span class="keywordflow">break</span>;
+<a name="l01595"></a>01595   <span class="keywordflow">case</span> 1:
+<a name="l01596"></a>01596     <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1__isoc99_scanf"</span>) {
+<a name="l01597"></a>01597       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 ||
+<a name="l01598"></a>01598           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01599"></a>01599         <span class="keywordflow">return</span>;
+<a name="l01600"></a>01600       setDoesNotThrow(F);
+<a name="l01601"></a>01601       setDoesNotCapture(F, 1);
+<a name="l01602"></a>01602     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1stat64"</span> ||
+<a name="l01603"></a>01603                Name == <span class="stringliteral">"\1lstat64"</span> ||
+<a name="l01604"></a>01604                Name == <span class="stringliteral">"\1statvfs64"</span> ||
+<a name="l01605"></a>01605                Name == <span class="stringliteral">"\1__isoc99_sscanf"</span>) {
+<a name="l01606"></a>01606       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 1 ||
+<a name="l01607"></a>01607           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01608"></a>01608           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01609"></a>01609         <span class="keywordflow">return</span>;
+<a name="l01610"></a>01610       setDoesNotThrow(F);
+<a name="l01611"></a>01611       setDoesNotCapture(F, 1);
+<a name="l01612"></a>01612       setDoesNotCapture(F, 2);
+<a name="l01613"></a>01613     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1fopen64"</span>) {
+<a name="l01614"></a>01614       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 ||
+<a name="l01615"></a>01615           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01616"></a>01616           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() ||
+<a name="l01617"></a>01617           !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01618"></a>01618         <span class="keywordflow">return</span>;
+<a name="l01619"></a>01619       setDoesNotThrow(F);
+<a name="l01620"></a>01620       setDoesNotAlias(F, 0);
+<a name="l01621"></a>01621       setDoesNotCapture(F, 1);
+<a name="l01622"></a>01622       setDoesNotCapture(F, 2);
+<a name="l01623"></a>01623     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1fseeko64"</span> ||
+<a name="l01624"></a>01624                Name == <span class="stringliteral">"\1ftello64"</span>) {
+<a name="l01625"></a>01625       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() == 0 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01626"></a>01626         <span class="keywordflow">return</span>;
+<a name="l01627"></a>01627       setDoesNotThrow(F);
+<a name="l01628"></a>01628       setDoesNotCapture(F, 1);
+<a name="l01629"></a>01629     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1tmpfile64"</span>) {
+<a name="l01630"></a>01630       <span class="keywordflow">if</span> (!FTy-><a class="code" href="classllvm_1_1FunctionType.html#a9eda832d6e80bc19b98f22f4ec714e3f">getReturnType</a>()-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01631"></a>01631         <span class="keywordflow">return</span>;
+<a name="l01632"></a>01632       setDoesNotThrow(F);
+<a name="l01633"></a>01633       setDoesNotAlias(F, 0);
+<a name="l01634"></a>01634     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1fstat64"</span> ||
+<a name="l01635"></a>01635                Name == <span class="stringliteral">"\1fstatvfs64"</span>) {
+<a name="l01636"></a>01636       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() != 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(1)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01637"></a>01637         <span class="keywordflow">return</span>;
+<a name="l01638"></a>01638       setDoesNotThrow(F);
+<a name="l01639"></a>01639       setDoesNotCapture(F, 2);
+<a name="l01640"></a>01640     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Name == <span class="stringliteral">"\1open64"</span>) {
+<a name="l01641"></a>01641       <span class="keywordflow">if</span> (FTy-><a class="code" href="classllvm_1_1FunctionType.html#a97cf043af111c14bb4d03a99cf42af03">getNumParams</a>() < 2 || !FTy-><a class="code" href="classllvm_1_1FunctionType.html#a176b84b12bc19326444728c6404dd068">getParamType</a>(0)-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01642"></a>01642         <span class="keywordflow">return</span>;
+<a name="l01643"></a>01643       <span class="comment">// May throw; "open" is a valid pthread cancellation point.</span>
+<a name="l01644"></a>01644       setDoesNotCapture(F, 1);
+<a name="l01645"></a>01645     }
+<a name="l01646"></a>01646     <span class="keywordflow">break</span>;
+<a name="l01647"></a>01647   }
+<a name="l01648"></a>01648 }
+<a name="l01649"></a>01649 <span class="comment"></span>
+<a name="l01650"></a>01650 <span class="comment">/// doInitialization - Add attributes to well-known functions.</span>
+<a name="l01651"></a>01651 <span class="comment">///</span>
+<a name="l01652"></a>01652 <span class="comment"></span><span class="keywordtype">bool</span> SimplifyLibCalls::doInitialization(<a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> &M) {
+<a name="l01653"></a>01653   Modified = <span class="keyword">false</span>;
+<a name="l01654"></a>01654   <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">Module::iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = M.<a class="code" href="classllvm_1_1Module.html#a279174d137c1ef32aa5b627f5e06620f">begin</a>(), E = M.<a class="code" href="classllvm_1_1Module.html#aa608a2d900dd6c15c18f4236b6548496">end</a>(); <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l01655"></a>01655     <a class="code" href="classllvm_1_1Function.html">Function</a> &F = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l01656"></a>01656     <span class="keywordflow">if</span> (F.<a class="code" href="classllvm_1_1GlobalValue.html#a4640d98233102674ddb6d6efaf2b7f97">isDeclaration</a>() && F.<a class="code" href="classllvm_1_1Value.html#a9b6d1ca60deddf2f2c25cfea671f617c">hasName</a>())
+<a name="l01657"></a>01657       inferPrototypeAttributes(F);
+<a name="l01658"></a>01658   }
+<a name="l01659"></a>01659   <span class="keywordflow">return</span> Modified;
+<a name="l01660"></a>01660 }
+<a name="l01661"></a>01661 
+<a name="l01662"></a>01662 <span class="comment">// TODO:</span>
+<a name="l01663"></a>01663 <span class="comment">//   Additional cases that we need to add to this file:</span>
+<a name="l01664"></a>01664 <span class="comment">//</span>
+<a name="l01665"></a>01665 <span class="comment">// cbrt:</span>
+<a name="l01666"></a>01666 <span class="comment">//   * cbrt(expN(X))  -> expN(x/3)</span>
+<a name="l01667"></a>01667 <span class="comment">//   * cbrt(sqrt(x))  -> pow(x,1/6)</span>
+<a name="l01668"></a>01668 <span class="comment">//   * cbrt(sqrt(x))  -> pow(x,1/9)</span>
+<a name="l01669"></a>01669 <span class="comment">//</span>
+<a name="l01670"></a>01670 <span class="comment">// exp, expf, expl:</span>
+<a name="l01671"></a>01671 <span class="comment">//   * exp(log(x))  -> x</span>
+<a name="l01672"></a>01672 <span class="comment">//</span>
+<a name="l01673"></a>01673 <span class="comment">// log, logf, logl:</span>
+<a name="l01674"></a>01674 <span class="comment">//   * log(exp(x))   -> x</span>
+<a name="l01675"></a>01675 <span class="comment">//   * log(x**y)     -> y*log(x)</span>
+<a name="l01676"></a>01676 <span class="comment">//   * log(exp(y))   -> y*log(e)</span>
+<a name="l01677"></a>01677 <span class="comment">//   * log(exp2(y))  -> y*log(2)</span>
+<a name="l01678"></a>01678 <span class="comment">//   * log(exp10(y)) -> y*log(10)</span>
+<a name="l01679"></a>01679 <span class="comment">//   * log(sqrt(x))  -> 0.5*log(x)</span>
+<a name="l01680"></a>01680 <span class="comment">//   * log(pow(x,y)) -> y*log(x)</span>
+<a name="l01681"></a>01681 <span class="comment">//</span>
+<a name="l01682"></a>01682 <span class="comment">// lround, lroundf, lroundl:</span>
+<a name="l01683"></a>01683 <span class="comment">//   * lround(cnst) -> cnst'</span>
+<a name="l01684"></a>01684 <span class="comment">//</span>
+<a name="l01685"></a>01685 <span class="comment">// pow, powf, powl:</span>
+<a name="l01686"></a>01686 <span class="comment">//   * pow(exp(x),y)  -> exp(x*y)</span>
+<a name="l01687"></a>01687 <span class="comment">//   * pow(sqrt(x),y) -> pow(x,y*0.5)</span>
+<a name="l01688"></a>01688 <span class="comment">//   * pow(pow(x,y),z)-> pow(x,y*z)</span>
+<a name="l01689"></a>01689 <span class="comment">//</span>
+<a name="l01690"></a>01690 <span class="comment">// round, roundf, roundl:</span>
+<a name="l01691"></a>01691 <span class="comment">//   * round(cnst) -> cnst'</span>
+<a name="l01692"></a>01692 <span class="comment">//</span>
+<a name="l01693"></a>01693 <span class="comment">// signbit:</span>
+<a name="l01694"></a>01694 <span class="comment">//   * signbit(cnst) -> cnst'</span>
+<a name="l01695"></a>01695 <span class="comment">//   * signbit(nncst) -> 0 (if pstv is a non-negative constant)</span>
+<a name="l01696"></a>01696 <span class="comment">//</span>
+<a name="l01697"></a>01697 <span class="comment">// sqrt, sqrtf, sqrtl:</span>
+<a name="l01698"></a>01698 <span class="comment">//   * sqrt(expN(x))  -> expN(x*0.5)</span>
+<a name="l01699"></a>01699 <span class="comment">//   * sqrt(Nroot(x)) -> pow(x,1/(2*N))</span>
+<a name="l01700"></a>01700 <span class="comment">//   * sqrt(pow(x,y)) -> pow(|x|,y*0.5)</span>
+<a name="l01701"></a>01701 <span class="comment">//</span>
+<a name="l01702"></a>01702 <span class="comment">// strchr:</span>
+<a name="l01703"></a>01703 <span class="comment">//   * strchr(p, 0) -> strlen(p)</span>
+<a name="l01704"></a>01704 <span class="comment">// tan, tanf, tanl:</span>
+<a name="l01705"></a>01705 <span class="comment">//   * tan(atan(x)) -> x</span>
+<a name="l01706"></a>01706 <span class="comment">//</span>
+<a name="l01707"></a>01707 <span class="comment">// trunc, truncf, truncl:</span>
+<a name="l01708"></a>01708 <span class="comment">//   * trunc(cnst) -> cnst'</span>
+<a name="l01709"></a>01709 <span class="comment">//</span>
+<a name="l01710"></a>01710 <span class="comment">//</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:55 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ScheduleDAGILP.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_33f9015af551a3c03ac5a968f2023d57.html">CodeGen</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ScheduleDAGILP.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="DataTypes_8h_source.html">llvm/Support/DataTypes.h</a>"</code><br/>
+<code>#include <vector></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ScheduleDAGILP.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="ScheduleDAGILP_8h__incl.png" border="0" usemap="#ScheduleDAGILP_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="ScheduleDAGILP_8h__dep__incl.png" border="0" usemap="#ScheduleDAGILP_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="ScheduleDAGILP_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1ILPValue.html">llvm::ILPValue</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represent the ILP of the subDAG rooted at a DAG node.  <a href="structllvm_1_1ILPValue.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1ScheduleDAGILP.html">llvm::ScheduleDAGILP</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute the values of each DAG node for an ILP metric.  <a href="classllvm_1_1ScheduleDAGILP.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classllvm_1_1raw__ostream.html">raw_ostream</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#aa61da76c6011c27c7a5c31c89a2866c4">llvm::operator<<</a> (<a class="el" href="classllvm_1_1raw__ostream.html">raw_ostream</a> &OS, const <a class="el" href="structllvm_1_1ILPValue.html">ILPValue</a> &Val)</td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:40 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ScheduleDAGILP_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+e7709cd411b4a85a4945f1248d813432
\ No newline at end of file





More information about the llvm-commits mailing list