[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