[llvm-commits] [www-releases] r170845 [29/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/SelectionDAGISel_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,3072 @@
+<!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: SelectionDAGISel.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_f2244d21cf8bec63d11bfc1ad661d96f.html">CodeGen</a> </li>
+ <li class="navelem"><a class="el" href="dir_43253d775e33d5158290be54cbed80db.html">SelectionDAG</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SelectionDAGISel.cpp</div> </div>
+</div>
+<div class="contents">
+<a href="SelectionDAGISel_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SelectionDAGISel.cpp - Implement the SelectionDAGISel class -------===//</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 implements the SelectionDAGISel 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><a class="code" href="SelectionDAGISel_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">00014</a> <span class="preprocessor">#define DEBUG_TYPE "isel"</span>
+<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="ScheduleDAGSDNodes_8h.html">ScheduleDAGSDNodes.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="SelectionDAGBuilder_8h.html">SelectionDAGBuilder.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="Constants_8h.html">llvm/Constants.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="DebugInfo_8h.html">llvm/DebugInfo.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="Function_8h.html">llvm/Function.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="InlineAsm_8h.html">llvm/InlineAsm.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="Instructions_8h.html">llvm/Instructions.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="IntrinsicInst_8h.html">llvm/IntrinsicInst.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="LLVMContext_8h.html">llvm/LLVMContext.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="Module_8h.html">llvm/Module.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="AliasAnalysis_8h.html">llvm/Analysis/AliasAnalysis.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="BranchProbabilityInfo_8h.html">llvm/Analysis/BranchProbabilityInfo.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="FastISel_8h.html">llvm/CodeGen/FastISel.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="FunctionLoweringInfo_8h.html">llvm/CodeGen/FunctionLoweringInfo.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="GCStrategy_8h.html">llvm/CodeGen/GCStrategy.h</a>"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="GCMetadata_8h.html">llvm/CodeGen/GCMetadata.h</a>"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="MachineFrameInfo_8h.html">llvm/CodeGen/MachineFrameInfo.h</a>"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="MachineFunction_8h.html">llvm/CodeGen/MachineFunction.h</a>"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="MachineInstrBuilder_8h.html">llvm/CodeGen/MachineInstrBuilder.h</a>"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="MachineModuleInfo_8h.html">llvm/CodeGen/MachineModuleInfo.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="MachineRegisterInfo_8h.html">llvm/CodeGen/MachineRegisterInfo.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="ScheduleHazardRecognizer_8h.html">llvm/CodeGen/ScheduleHazardRecognizer.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="SchedulerRegistry_8h.html">llvm/CodeGen/SchedulerRegistry.h</a>"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="SelectionDAG_8h.html">llvm/CodeGen/SelectionDAG.h</a>"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "<a class="code" href="SelectionDAGISel_8h.html">llvm/CodeGen/SelectionDAGISel.h</a>"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "<a class="code" href="TargetRegisterInfo_8h.html">llvm/Target/TargetRegisterInfo.h</a>"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "<a class="code" href="TargetIntrinsicInfo_8h.html">llvm/Target/TargetIntrinsicInfo.h</a>"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "<a class="code" href="TargetInstrInfo_8h.html">llvm/Target/TargetInstrInfo.h</a>"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "<a class="code" href="TargetLibraryInfo_8h.html">llvm/Target/TargetLibraryInfo.h</a>"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "<a class="code" href="TargetLowering_8h.html">llvm/Target/TargetLowering.h</a>"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "<a class="code" href="Target_2TargetMachine_8h.html">llvm/Target/TargetMachine.h</a>"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "<a class="code" href="TargetOptions_8h.html">llvm/Target/TargetOptions.h</a>"</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include "<a class="code" href="BasicBlockUtils_8h.html">llvm/Transforms/Utils/BasicBlockUtils.h</a>"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "<a class="code" href="Compiler_8h.html">llvm/Support/Compiler.h</a>"</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.h</a>"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "<a class="code" href="Timer_8h.html">llvm/Support/Timer.h</a>"</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include "<a class="code" href="PostOrderIterator_8h.html">llvm/ADT/PostOrderIterator.h</a>"</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="Statistic_8h.html">llvm/ADT/Statistic.h</a>"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include <algorithm></span>
+<a name="l00057"></a>00057 <span class="keyword">using namespace </span>llvm;
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailures, <span class="stringliteral">"Number of instructions fast isel failed on"</span>);
+<a name="l00060"></a>00060 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselSuccess, <span class="stringliteral">"Number of instructions fast isel selected"</span>);
+<a name="l00061"></a>00061 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselBlocks, <span class="stringliteral">"Number of blocks selected entirely by fast isel"</span>);
+<a name="l00062"></a>00062 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumDAGBlocks, <span class="stringliteral">"Number of blocks selected using DAG"</span>);
+<a name="l00063"></a>00063 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumDAGIselRetries,<span class="stringliteral">"Number of times dag isel has to try another path"</span>);
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00067"></a>00067 <a class="code" href="SelectionDAGISel_8cpp.html#a086b60310efb455c4b210eeae130b974">EnableFastISelVerbose2</a>(<span class="stringliteral">"fast-isel-verbose2"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00068"></a>00068 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable extra verbose messages in the \"fast\" "</span>
+<a name="l00069"></a>00069 <span class="stringliteral">"instruction selector"</span>));
+<a name="l00070"></a>00070 <span class="comment">// Terminators</span>
+<a name="l00071"></a>00071 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailRet,<span class="stringliteral">"Fast isel fails on Ret"</span>);
+<a name="l00072"></a>00072 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailBr,<span class="stringliteral">"Fast isel fails on Br"</span>);
+<a name="l00073"></a>00073 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSwitch,<span class="stringliteral">"Fast isel fails on Switch"</span>);
+<a name="l00074"></a>00074 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailIndirectBr,<span class="stringliteral">"Fast isel fails on IndirectBr"</span>);
+<a name="l00075"></a>00075 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailInvoke,<span class="stringliteral">"Fast isel fails on Invoke"</span>);
+<a name="l00076"></a>00076 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailResume,<span class="stringliteral">"Fast isel fails on Resume"</span>);
+<a name="l00077"></a>00077 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailUnreachable,<span class="stringliteral">"Fast isel fails on Unreachable"</span>);
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="comment">// Standard binary operators...</span>
+<a name="l00080"></a>00080 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAdd,<span class="stringliteral">"Fast isel fails on Add"</span>);
+<a name="l00081"></a>00081 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFAdd,<span class="stringliteral">"Fast isel fails on FAdd"</span>);
+<a name="l00082"></a>00082 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSub,<span class="stringliteral">"Fast isel fails on Sub"</span>);
+<a name="l00083"></a>00083 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFSub,<span class="stringliteral">"Fast isel fails on FSub"</span>);
+<a name="l00084"></a>00084 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailMul,<span class="stringliteral">"Fast isel fails on Mul"</span>);
+<a name="l00085"></a>00085 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFMul,<span class="stringliteral">"Fast isel fails on FMul"</span>);
+<a name="l00086"></a>00086 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailUDiv,<span class="stringliteral">"Fast isel fails on UDiv"</span>);
+<a name="l00087"></a>00087 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSDiv,<span class="stringliteral">"Fast isel fails on SDiv"</span>);
+<a name="l00088"></a>00088 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFDiv,<span class="stringliteral">"Fast isel fails on FDiv"</span>);
+<a name="l00089"></a>00089 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailURem,<span class="stringliteral">"Fast isel fails on URem"</span>);
+<a name="l00090"></a>00090 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSRem,<span class="stringliteral">"Fast isel fails on SRem"</span>);
+<a name="l00091"></a>00091 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFRem,<span class="stringliteral">"Fast isel fails on FRem"</span>);
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 <span class="comment">// Logical operators...</span>
+<a name="l00094"></a>00094 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAnd,<span class="stringliteral">"Fast isel fails on And"</span>);
+<a name="l00095"></a>00095 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailOr,<span class="stringliteral">"Fast isel fails on Or"</span>);
+<a name="l00096"></a>00096 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailXor,<span class="stringliteral">"Fast isel fails on Xor"</span>);
+<a name="l00097"></a>00097
+<a name="l00098"></a>00098 <span class="comment">// Memory instructions...</span>
+<a name="l00099"></a>00099 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAlloca,<span class="stringliteral">"Fast isel fails on Alloca"</span>);
+<a name="l00100"></a>00100 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailLoad,<span class="stringliteral">"Fast isel fails on Load"</span>);
+<a name="l00101"></a>00101 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailStore,<span class="stringliteral">"Fast isel fails on Store"</span>);
+<a name="l00102"></a>00102 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAtomicCmpXchg,<span class="stringliteral">"Fast isel fails on AtomicCmpXchg"</span>);
+<a name="l00103"></a>00103 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAtomicRMW,<span class="stringliteral">"Fast isel fails on AtomicRWM"</span>);
+<a name="l00104"></a>00104 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFence,<span class="stringliteral">"Fast isel fails on Frence"</span>);
+<a name="l00105"></a>00105 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailGetElementPtr,<span class="stringliteral">"Fast isel fails on GetElementPtr"</span>);
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="comment">// Convert instructions...</span>
+<a name="l00108"></a>00108 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailTrunc,<span class="stringliteral">"Fast isel fails on Trunc"</span>);
+<a name="l00109"></a>00109 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailZExt,<span class="stringliteral">"Fast isel fails on ZExt"</span>);
+<a name="l00110"></a>00110 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSExt,<span class="stringliteral">"Fast isel fails on SExt"</span>);
+<a name="l00111"></a>00111 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFPTrunc,<span class="stringliteral">"Fast isel fails on FPTrunc"</span>);
+<a name="l00112"></a>00112 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFPExt,<span class="stringliteral">"Fast isel fails on FPExt"</span>);
+<a name="l00113"></a>00113 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFPToUI,<span class="stringliteral">"Fast isel fails on FPToUI"</span>);
+<a name="l00114"></a>00114 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFPToSI,<span class="stringliteral">"Fast isel fails on FPToSI"</span>);
+<a name="l00115"></a>00115 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailUIToFP,<span class="stringliteral">"Fast isel fails on UIToFP"</span>);
+<a name="l00116"></a>00116 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSIToFP,<span class="stringliteral">"Fast isel fails on SIToFP"</span>);
+<a name="l00117"></a>00117 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailIntToPtr,<span class="stringliteral">"Fast isel fails on IntToPtr"</span>);
+<a name="l00118"></a>00118 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailPtrToInt,<span class="stringliteral">"Fast isel fails on PtrToInt"</span>);
+<a name="l00119"></a>00119 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailBitCast,<span class="stringliteral">"Fast isel fails on BitCast"</span>);
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 <span class="comment">// Other instructions...</span>
+<a name="l00122"></a>00122 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailICmp,<span class="stringliteral">"Fast isel fails on ICmp"</span>);
+<a name="l00123"></a>00123 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailFCmp,<span class="stringliteral">"Fast isel fails on FCmp"</span>);
+<a name="l00124"></a>00124 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailPHI,<span class="stringliteral">"Fast isel fails on PHI"</span>);
+<a name="l00125"></a>00125 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailSelect,<span class="stringliteral">"Fast isel fails on Select"</span>);
+<a name="l00126"></a>00126 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailCall,<span class="stringliteral">"Fast isel fails on Call"</span>);
+<a name="l00127"></a>00127 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailShl,<span class="stringliteral">"Fast isel fails on Shl"</span>);
+<a name="l00128"></a>00128 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailLShr,<span class="stringliteral">"Fast isel fails on LShr"</span>);
+<a name="l00129"></a>00129 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailAShr,<span class="stringliteral">"Fast isel fails on AShr"</span>);
+<a name="l00130"></a>00130 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailVAArg,<span class="stringliteral">"Fast isel fails on VAArg"</span>);
+<a name="l00131"></a>00131 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailExtractElement,<span class="stringliteral">"Fast isel fails on ExtractElement"</span>);
+<a name="l00132"></a>00132 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailInsertElement,<span class="stringliteral">"Fast isel fails on InsertElement"</span>);
+<a name="l00133"></a>00133 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailShuffleVector,<span class="stringliteral">"Fast isel fails on ShuffleVector"</span>);
+<a name="l00134"></a>00134 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailExtractValue,<span class="stringliteral">"Fast isel fails on ExtractValue"</span>);
+<a name="l00135"></a>00135 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailInsertValue,<span class="stringliteral">"Fast isel fails on InsertValue"</span>);
+<a name="l00136"></a>00136 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumFastIselFailLandingPad,<span class="stringliteral">"Fast isel fails on LandingPad"</span>);
+<a name="l00137"></a>00137 <span class="preprocessor">#endif</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>
+<a name="l00139"></a>00139 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00140"></a>00140 <a class="code" href="SelectionDAGISel_8cpp.html#ad64839db51b02e2d40ec293faabeeec2">EnableFastISelVerbose</a>(<span class="stringliteral">"fast-isel-verbose"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00141"></a>00141 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable verbose messages in the \"fast\" "</span>
+<a name="l00142"></a>00142 <span class="stringliteral">"instruction selector"</span>));
+<a name="l00143"></a>00143 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00144"></a>00144 <a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a>(<span class="stringliteral">"fast-isel-abort"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00145"></a>00145 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable abort calls when \"fast\" instruction fails"</span>));
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00148"></a>00148 <a class="code" href="SelectionDAGISel_8cpp.html#a882ae4a44bdaba10b04f867cc59d0b12">UseMBPI</a>(<span class="stringliteral">"use-mbpi"</span>,
+<a name="l00149"></a>00149 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"use Machine Branch Probability Info"</span>),
+<a name="l00150"></a>00150 <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(<span class="keyword">true</span>), <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>);
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00154"></a>00154 <a class="code" href="SelectionDAGISel_8cpp.html#aa0a1387d2f4f4c555f6e70f8772e2b36">ViewDAGCombine1</a>(<span class="stringliteral">"view-dag-combine1-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00155"></a>00155 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show dags before the first "</span>
+<a name="l00156"></a>00156 <span class="stringliteral">"dag combine pass"</span>));
+<a name="l00157"></a>00157 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00158"></a>00158 <a class="code" href="SelectionDAGISel_8cpp.html#a94d15c343cf88bcdac352ecec4163427">ViewLegalizeTypesDAGs</a>(<span class="stringliteral">"view-legalize-types-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00159"></a>00159 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show dags before legalize types"</span>));
+<a name="l00160"></a>00160 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00161"></a>00161 <a class="code" href="SelectionDAGISel_8cpp.html#a6ea92b9ff38ccbd5e49b8db2ee2ed6c0">ViewLegalizeDAGs</a>(<span class="stringliteral">"view-legalize-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00162"></a>00162 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show dags before legalize"</span>));
+<a name="l00163"></a>00163 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00164"></a>00164 <a class="code" href="SelectionDAGISel_8cpp.html#a5eb1e524620af2b978b96889db819cd5">ViewDAGCombine2</a>(<span class="stringliteral">"view-dag-combine2-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00165"></a>00165 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show dags before the second "</span>
+<a name="l00166"></a>00166 <span class="stringliteral">"dag combine pass"</span>));
+<a name="l00167"></a>00167 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00168"></a>00168 <a class="code" href="SelectionDAGISel_8cpp.html#a9493966ca8816c129a6afef7ef0b0866">ViewDAGCombineLT</a>(<span class="stringliteral">"view-dag-combine-lt-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00169"></a>00169 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show dags before the post legalize types"</span>
+<a name="l00170"></a>00170 <span class="stringliteral">" dag combine pass"</span>));
+<a name="l00171"></a>00171 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00172"></a>00172 <a class="code" href="SelectionDAGISel_8cpp.html#a1020617e313312866c30e376a9e4558f">ViewISelDAGs</a>(<span class="stringliteral">"view-isel-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00173"></a>00173 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show isel dags as they are selected"</span>));
+<a name="l00174"></a>00174 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00175"></a>00175 <a class="code" href="SelectionDAGISel_8cpp.html#a561cc487aa2f40047631afeca18a058a">ViewSchedDAGs</a>(<span class="stringliteral">"view-sched-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00176"></a>00176 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show sched dags as they are processed"</span>));
+<a name="l00177"></a>00177 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00178"></a>00178 <a class="code" href="SelectionDAGISel_8cpp.html#ae7868871a8317ca2ce9ff0dfde545b24">ViewSUnitDAGs</a>(<span class="stringliteral">"view-sunit-dags"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00179"></a>00179 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Pop up a window to show SUnit dags after they are processed"</span>));
+<a name="l00180"></a>00180 <span class="preprocessor">#else</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="SelectionDAGISel_8cpp.html#aa0a1387d2f4f4c555f6e70f8772e2b36">ViewDAGCombine1</a> = <span class="keyword">false</span>,
+<a name="l00182"></a>00182 <a class="code" href="SelectionDAGISel_8cpp.html#a94d15c343cf88bcdac352ecec4163427">ViewLegalizeTypesDAGs</a> = <span class="keyword">false</span>, <a class="code" href="SelectionDAGISel_8cpp.html#a6ea92b9ff38ccbd5e49b8db2ee2ed6c0">ViewLegalizeDAGs</a> = <span class="keyword">false</span>,
+<a name="l00183"></a>00183 <a class="code" href="SelectionDAGISel_8cpp.html#a5eb1e524620af2b978b96889db819cd5">ViewDAGCombine2</a> = <span class="keyword">false</span>,
+<a name="l00184"></a>00184 <a class="code" href="SelectionDAGISel_8cpp.html#a9493966ca8816c129a6afef7ef0b0866">ViewDAGCombineLT</a> = <span class="keyword">false</span>,
+<a name="l00185"></a>00185 <a class="code" href="SelectionDAGISel_8cpp.html#a1020617e313312866c30e376a9e4558f">ViewISelDAGs</a> = <span class="keyword">false</span>, <a class="code" href="SelectionDAGISel_8cpp.html#a561cc487aa2f40047631afeca18a058a">ViewSchedDAGs</a> = <span class="keyword">false</span>,
+<a name="l00186"></a>00186 <a class="code" href="SelectionDAGISel_8cpp.html#ae7868871a8317ca2ce9ff0dfde545b24">ViewSUnitDAGs</a> = <span class="keyword">false</span>;
+<a name="l00187"></a>00187 <span class="preprocessor">#endif</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>
+<a name="l00189"></a>00189 <span class="comment">//===---------------------------------------------------------------------===//</span><span class="comment"></span>
+<a name="l00190"></a>00190 <span class="comment">///</span>
+<a name="l00191"></a>00191 <span class="comment">/// RegisterScheduler class - Track the registration of instruction schedulers.</span>
+<a name="l00192"></a>00192 <span class="comment">///</span>
+<a name="l00193"></a>00193 <span class="comment"></span><span class="comment">//===---------------------------------------------------------------------===//</span>
+<a name="l00194"></a>00194 <a class="code" href="classllvm_1_1MachinePassRegistry.html">MachinePassRegistry</a> <a class="code" href="classllvm_1_1RegisterScheduler.html#a85302ad32727bfe3c808a9ca17a3dd46">RegisterScheduler::Registry</a>;
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 <span class="comment">//===---------------------------------------------------------------------===//</span><span class="comment"></span>
+<a name="l00197"></a>00197 <span class="comment">///</span>
+<a name="l00198"></a>00198 <span class="comment">/// ISHeuristic command line option for instruction schedulers.</span>
+<a name="l00199"></a>00199 <span class="comment">///</span>
+<a name="l00200"></a>00200 <span class="comment"></span><span class="comment">//===---------------------------------------------------------------------===//</span>
+<a name="l00201"></a>00201 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt</a><<a class="code" href="classllvm_1_1RegisterScheduler.html#a360361b84089ef7c4103152b3c02a40e">RegisterScheduler::FunctionPassCtor</a>, <span class="keyword">false</span>,
+<a name="l00202"></a>00202 <a class="code" href="classllvm_1_1RegisterPassParser.html">RegisterPassParser<RegisterScheduler></a> >
+<a name="l00203"></a>00203 <a class="code" href="SelectionDAGISel_8cpp.html#afabfb264c515ec09675c6a53ecf95785">ISHeuristic</a>(<span class="stringliteral">"pre-RA-sched"</span>,
+<a name="l00204"></a>00204 <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(&<a class="code" href="namespacellvm.html#a84ca2cbce84944d7c7436be1e81fdc1e">createDefaultScheduler</a>),
+<a name="l00205"></a>00205 <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Instruction schedulers available (before register"</span>
+<a name="l00206"></a>00206 <span class="stringliteral">" allocation):"</span>));
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 <span class="keyword">static</span> <a class="code" href="classllvm_1_1RegisterScheduler.html">RegisterScheduler</a>
+<a name="l00209"></a>00209 <a class="code" href="SelectionDAGISel_8cpp.html#a2ffa56bb0fe093d549f7c5b8cb32cc98">defaultListDAGScheduler</a>(<span class="stringliteral">"default"</span>, <span class="stringliteral">"Best scheduler for the target"</span>,
+<a name="l00210"></a>00210 <a class="code" href="namespacellvm.html#a84ca2cbce84944d7c7436be1e81fdc1e">createDefaultScheduler</a>);
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <span class="keyword">namespace </span>llvm {
+<a name="l00213"></a>00213 <span class="comment">//===--------------------------------------------------------------------===//</span><span class="comment"></span>
+<a name="l00214"></a>00214 <span class="comment"> /// createDefaultScheduler - This creates an instruction scheduler appropriate</span>
+<a name="l00215"></a>00215 <span class="comment"> /// for the target.</span>
+<a name="l00216"></a><a class="code" href="namespacellvm.html#a84ca2cbce84944d7c7436be1e81fdc1e">00216</a> <span class="comment"></span> <a class="code" href="classllvm_1_1ScheduleDAGSDNodes.html">ScheduleDAGSDNodes</a>* <a class="code" href="namespacellvm.html#a84ca2cbce84944d7c7436be1e81fdc1e">createDefaultScheduler</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> *IS,
+<a name="l00217"></a>00217 <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4">CodeGenOpt::Level</a> OptLevel) {
+<a name="l00218"></a>00218 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI = IS-><a class="code" href="classllvm_1_1SelectionDAGISel.html#a5393ab75cb4bdfd935abd08d19522291">getTargetLowering</a>();
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 <span class="keywordflow">if</span> (OptLevel == <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a> ||
+<a name="l00221"></a>00221 TLI.<a class="code" href="classllvm_1_1TargetLowering.html#acf004f5c15e3af6651762ba4c9f0cbdd" title="getSchedulingPreference - Return target scheduling preference.">getSchedulingPreference</a>() == <a class="code" href="namespacellvm_1_1Sched.html#ac1547cccaf660851fcd6863d1e60309eac13545a6345c7d5b3c9cc8932ad3b0e9">Sched::Source</a>)
+<a name="l00222"></a>00222 <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a55abb3ae6bc55ca30625f7a0e28949da">createSourceListDAGScheduler</a>(IS, OptLevel);
+<a name="l00223"></a>00223 <span class="keywordflow">if</span> (TLI.<a class="code" href="classllvm_1_1TargetLowering.html#acf004f5c15e3af6651762ba4c9f0cbdd" title="getSchedulingPreference - Return target scheduling preference.">getSchedulingPreference</a>() == <a class="code" href="namespacellvm_1_1Sched.html#ac1547cccaf660851fcd6863d1e60309ea5b5fba18a61456ef5858005d9f7b153e">Sched::RegPressure</a>)
+<a name="l00224"></a>00224 <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0cc3c89b31edd11c4e42b6980efcc621">createBURRListDAGScheduler</a>(IS, OptLevel);
+<a name="l00225"></a>00225 <span class="keywordflow">if</span> (TLI.<a class="code" href="classllvm_1_1TargetLowering.html#acf004f5c15e3af6651762ba4c9f0cbdd" title="getSchedulingPreference - Return target scheduling preference.">getSchedulingPreference</a>() == <a class="code" href="namespacellvm_1_1Sched.html#ac1547cccaf660851fcd6863d1e60309ea6530ebdb4e713581540e6ceb88897acb">Sched::Hybrid</a>)
+<a name="l00226"></a>00226 <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#acdd401526bdfe6509b2a4aeeb3fbfade">createHybridListDAGScheduler</a>(IS, OptLevel);
+<a name="l00227"></a>00227 <span class="keywordflow">if</span> (TLI.<a class="code" href="classllvm_1_1TargetLowering.html#acf004f5c15e3af6651762ba4c9f0cbdd" title="getSchedulingPreference - Return target scheduling preference.">getSchedulingPreference</a>() == <a class="code" href="namespacellvm_1_1Sched.html#ac1547cccaf660851fcd6863d1e60309ea6cf256710dcf96215d1b52d67761e968">Sched::VLIW</a>)
+<a name="l00228"></a>00228 <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#ac4bf48adb22d4bb44adff9014d0991c9" title="createVLIWDAGScheduler - This creates a top-down list scheduler.">createVLIWDAGScheduler</a>(IS, OptLevel);
+<a name="l00229"></a>00229 assert(TLI.<a class="code" href="classllvm_1_1TargetLowering.html#acf004f5c15e3af6651762ba4c9f0cbdd" title="getSchedulingPreference - Return target scheduling preference.">getSchedulingPreference</a>() == <a class="code" href="namespacellvm_1_1Sched.html#ac1547cccaf660851fcd6863d1e60309eac4801b47c85ae3044251c5ca7443b1df">Sched::ILP</a> &&
+<a name="l00230"></a>00230 <span class="stringliteral">"Unknown sched type!"</span>);
+<a name="l00231"></a>00231 <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a19e072bf547248dcd953436ada780ecf">createILPListDAGScheduler</a>(IS, OptLevel);
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234
+<a name="l00235"></a>00235 <span class="comment">// EmitInstrWithCustomInserter - This method should be implemented by targets</span>
+<a name="l00236"></a>00236 <span class="comment">// that mark instructions with the 'usesCustomInserter' flag. These</span>
+<a name="l00237"></a>00237 <span class="comment">// instructions are special in various ways, which require special support to</span>
+<a name="l00238"></a>00238 <span class="comment">// insert. The specified MachineInstr is created but not inserted into any</span>
+<a name="l00239"></a>00239 <span class="comment">// basic blocks, and this method is called to expand it into a sequence of</span>
+<a name="l00240"></a>00240 <span class="comment">// instructions, potentially also creating new basic blocks and control flow.</span>
+<a name="l00241"></a>00241 <span class="comment">// When new basic blocks are inserted and the edges from MBB to its successors</span>
+<a name="l00242"></a>00242 <span class="comment">// are modified, the method should insert pairs of <OldSucc, NewSucc> into the</span>
+<a name="l00243"></a>00243 <span class="comment">// DenseMap.</span>
+<a name="l00244"></a>00244 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *
+<a name="l00245"></a><a class="code" href="classllvm_1_1TargetLowering.html#a38276f452a68339a3d3e0db3d1531d54">00245</a> <a class="code" href="classllvm_1_1TargetLowering.html#a38276f452a68339a3d3e0db3d1531d54">TargetLowering::EmitInstrWithCustomInserter</a>(<a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>,
+<a name="l00246"></a>00246 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *MBB)<span class="keyword"> const </span>{
+<a name="l00247"></a>00247 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span> <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"If a target marks an instruction with "</span>
+<a name="l00249"></a>00249 <span class="stringliteral">"'usesCustomInserter', it must implement "</span>
+<a name="l00250"></a>00250 <span class="stringliteral">"TargetLowering::EmitInstrWithCustomInserter!"</span>;
+<a name="l00251"></a>00251 <span class="preprocessor">#endif</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span> <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l00253"></a>00253 }
+<a name="l00254"></a>00254
+<a name="l00255"></a><a class="code" href="classllvm_1_1TargetLowering.html#aca07be3ac02177b296b44111af460e72">00255</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1TargetLowering.html#aca07be3ac02177b296b44111af460e72">TargetLowering::AdjustInstrPostInstrSelection</a>(<a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>,
+<a name="l00256"></a>00256 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Node)<span class="keyword"> const </span>{
+<a name="l00257"></a>00257 assert(!MI-><a class="code" href="classllvm_1_1MachineInstr.html#a4bbf23a2ba1b05c9929accddc045fae5">hasPostISelHook</a>() &&
+<a name="l00258"></a>00258 <span class="stringliteral">"If a target marks an instruction with 'hasPostISelHook', "</span>
+<a name="l00259"></a>00259 <span class="stringliteral">"it must implement TargetLowering::AdjustInstrPostInstrSelection!"</span>);
+<a name="l00260"></a>00260 }
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00263"></a>00263 <span class="comment">// SelectionDAGISel code</span>
+<a name="l00264"></a>00264 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00265"></a>00265
+<a name="l00266"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#a93adf9ddd2303e9bdc0d55beb171a868">00266</a> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a93adf9ddd2303e9bdc0d55beb171a868">SelectionDAGISel::SelectionDAGISel</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetMachine.html">TargetMachine</a> &tm,
+<a name="l00267"></a>00267 <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4">CodeGenOpt::Level</a> OL) :
+<a name="l00268"></a>00268 <a class="code" href="classllvm_1_1MachineFunctionPass.html">MachineFunctionPass</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">ID</a>), TM(tm), TLI(*tm.getTargetLowering()),
+<a name="l00269"></a>00269 FuncInfo(new <a class="code" href="classllvm_1_1FunctionLoweringInfo.html">FunctionLoweringInfo</a>(TLI)),
+<a name="l00270"></a>00270 CurDAG(new <a class="code" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a>(tm, OL)),
+<a name="l00271"></a>00271 SDB(new <a class="code" href="classllvm_1_1SelectionDAGBuilder.html">SelectionDAGBuilder</a>(*CurDAG, *FuncInfo, OL)),
+<a name="l00272"></a>00272 GFI(),
+<a name="l00273"></a>00273 OptLevel(OL),
+<a name="l00274"></a>00274 DAGSize(0) {
+<a name="l00275"></a>00275 <a class="code" href="namespacellvm.html#a7c3c64daeddcc57785e85d30f13b1e55">initializeGCModuleInfoPass</a>(*<a class="code" href="classllvm_1_1PassRegistry.html#a05a729900b76c89e808c6c3094921b2f">PassRegistry::getPassRegistry</a>());
+<a name="l00276"></a>00276 <a class="code" href="namespacellvm.html#ae17e75337b30778fb9efa04723ab9d15">initializeAliasAnalysisAnalysisGroup</a>(*<a class="code" href="classllvm_1_1PassRegistry.html#a05a729900b76c89e808c6c3094921b2f">PassRegistry::getPassRegistry</a>());
+<a name="l00277"></a>00277 <a class="code" href="namespacellvm.html#a97af1e658073d9ee97afd0fbeffe1518">initializeBranchProbabilityInfoPass</a>(*<a class="code" href="classllvm_1_1PassRegistry.html#a05a729900b76c89e808c6c3094921b2f">PassRegistry::getPassRegistry</a>());
+<a name="l00278"></a>00278 <a class="code" href="namespacellvm.html#a96ab354096e7fc3598f3d675c1e5f0b6">initializeTargetLibraryInfoPass</a>(*<a class="code" href="classllvm_1_1PassRegistry.html#a05a729900b76c89e808c6c3094921b2f">PassRegistry::getPassRegistry</a>());
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280
+<a name="l00281"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#aab3f5f27748274f8005105493a8c87d9">00281</a> <a class="code" href="classllvm_1_1SelectionDAGISel.html#aab3f5f27748274f8005105493a8c87d9">SelectionDAGISel::~SelectionDAGISel</a>() {
+<a name="l00282"></a>00282 <span class="keyword">delete</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>;
+<a name="l00283"></a>00283 <span class="keyword">delete</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>;
+<a name="l00284"></a>00284 <span class="keyword">delete</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>;
+<a name="l00285"></a>00285 }
+<a name="l00286"></a>00286
+<a name="l00287"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#aa6e3daee5aa2faf95a6e846301eba584">00287</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#aa6e3daee5aa2faf95a6e846301eba584">SelectionDAGISel::getAnalysisUsage</a>(<a class="code" href="classllvm_1_1AnalysisUsage.html">AnalysisUsage</a> &AU)<span class="keyword"> const </span>{
+<a name="l00288"></a>00288 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#ae5c60fd282ee894c87ea02c3f0fcb6d0">addRequired</a><<a class="code" href="classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>>();
+<a name="l00289"></a>00289 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#a884f90190bca4bd354f2d5c91c264028">addPreserved</a><<a class="code" href="classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>>();
+<a name="l00290"></a>00290 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#ae5c60fd282ee894c87ea02c3f0fcb6d0">addRequired</a><<a class="code" href="classllvm_1_1GCModuleInfo.html">GCModuleInfo</a>>();
+<a name="l00291"></a>00291 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#a884f90190bca4bd354f2d5c91c264028">addPreserved</a><<a class="code" href="classllvm_1_1GCModuleInfo.html">GCModuleInfo</a>>();
+<a name="l00292"></a>00292 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#ae5c60fd282ee894c87ea02c3f0fcb6d0">addRequired</a><<a class="code" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a>>();
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a882ae4a44bdaba10b04f867cc59d0b12">UseMBPI</a> && <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a> != <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>)
+<a name="l00294"></a>00294 AU.<a class="code" href="classllvm_1_1AnalysisUsage.html#ae5c60fd282ee894c87ea02c3f0fcb6d0">addRequired</a><<a class="code" href="classllvm_1_1BranchProbabilityInfo.html" title="Analysis pass providing branch probability information.">BranchProbabilityInfo</a>>();
+<a name="l00295"></a>00295 <a class="code" href="classllvm_1_1SelectionDAGISel.html#aa6e3daee5aa2faf95a6e846301eba584">MachineFunctionPass::getAnalysisUsage</a>(AU);
+<a name="l00296"></a>00296 }
+<a name="l00297"></a>00297 <span class="comment"></span>
+<a name="l00298"></a>00298 <span class="comment">/// SplitCriticalSideEffectEdges - Look for critical edges with a PHI value that</span>
+<a name="l00299"></a>00299 <span class="comment">/// may trap on it. In this case we have to split the edge so that the path</span>
+<a name="l00300"></a>00300 <span class="comment">/// through the predecessor block that doesn't go to the phi block doesn't</span>
+<a name="l00301"></a>00301 <span class="comment">/// execute the possibly trapping instruction.</span>
+<a name="l00302"></a>00302 <span class="comment">///</span>
+<a name="l00303"></a>00303 <span class="comment">/// This is required for correctness, so it must be done at -O0.</span>
+<a name="l00304"></a>00304 <span class="comment">///</span>
+<a name="l00305"></a><a class="code" href="SelectionDAGISel_8cpp.html#a32183b39b95b00f771b16930a39d31fb">00305</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SelectionDAGISel_8cpp.html#a32183b39b95b00f771b16930a39d31fb">SplitCriticalSideEffectEdges</a>(<a class="code" href="classllvm_1_1Function.html">Function</a> &Fn, <a class="code" href="classllvm_1_1Pass.html">Pass</a> *SDISel) {
+<a name="l00306"></a>00306 <span class="comment">// Loop for blocks with phi nodes.</span>
+<a name="l00307"></a>00307 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">Function::iterator</a> BB = Fn.<a class="code" href="classllvm_1_1Function.html#a88a5e60837674780a9d812d661897ac5">begin</a>(), E = Fn.<a class="code" href="classllvm_1_1Function.html#ae4ca2261b8b901e415fda7feac5051ea">end</a>(); BB != E; ++BB) {
+<a name="l00308"></a>00308 <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>>(BB->begin());
+<a name="l00309"></a>00309 <span class="keywordflow">if</span> (PN == 0) <span class="keywordflow">continue</span>;
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 ReprocessBlock:
+<a name="l00312"></a>00312 <span class="comment">// For each block with a PHI node, check to see if any of the input values</span>
+<a name="l00313"></a>00313 <span class="comment">// are potentially trapping constant expressions. Constant expressions are</span>
+<a name="l00314"></a>00314 <span class="comment">// the only potentially trapping value that can occur as the argument to a</span>
+<a name="l00315"></a>00315 <span class="comment">// PHI.</span>
+<a name="l00316"></a>00316 <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(); (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="l00317"></a>00317 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = PN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00318"></a>00318 <a class="code" href="classllvm_1_1ConstantExpr.html">ConstantExpr</a> *CE = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantExpr.html">ConstantExpr</a>>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00319"></a>00319 <span class="keywordflow">if</span> (CE == 0 || !CE-><a class="code" href="classllvm_1_1Constant.html#aca0d63da182dd893b3a769214829a744">canTrap</a>()) <span class="keywordflow">continue</span>;
+<a name="l00320"></a>00320
+<a name="l00321"></a>00321 <span class="comment">// The only case we have to worry about is when the edge is critical.</span>
+<a name="l00322"></a>00322 <span class="comment">// Since this block has a PHI Node, we assume it has multiple input</span>
+<a name="l00323"></a>00323 <span class="comment">// edges: check to see if the pred has multiple successors.</span>
+<a name="l00324"></a>00324 <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *Pred = PN-><a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i);
+<a name="l00325"></a>00325 <span class="keywordflow">if</span> (Pred-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>()-><a class="code" href="classllvm_1_1TerminatorInst.html#a4c26d3b92af99a6c8defd89a2d39ca32">getNumSuccessors</a>() == 1)
+<a name="l00326"></a>00326 <span class="keywordflow">continue</span>;
+<a name="l00327"></a>00327
+<a name="l00328"></a>00328 <span class="comment">// Okay, we have to split this edge.</span>
+<a name="l00329"></a>00329 <a class="code" href="namespacellvm.html#afa6abaa0eea3b2083902cf651a9653b1">SplitCriticalEdge</a>(Pred-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>(),
+<a name="l00330"></a>00330 <a class="code" href="namespacellvm.html#ad8c05603cdeedfb0ca29aeaa551f1206">GetSuccessorNumber</a>(Pred, BB), SDISel, <span class="keyword">true</span>);
+<a name="l00331"></a>00331 <span class="keywordflow">goto</span> ReprocessBlock;
+<a name="l00332"></a>00332 }
+<a name="l00333"></a>00333 }
+<a name="l00334"></a>00334 }
+<a name="l00335"></a>00335
+<a name="l00336"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#ac27df519719929bb886ae92fca30b6d2">00336</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#ac27df519719929bb886ae92fca30b6d2">SelectionDAGISel::runOnMachineFunction</a>(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &mf) {
+<a name="l00337"></a>00337 <span class="comment">// Do some sanity-checking on the command-line options.</span>
+<a name="l00338"></a>00338 assert((!<a class="code" href="SelectionDAGISel_8cpp.html#ad64839db51b02e2d40ec293faabeeec2">EnableFastISelVerbose</a> || <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ab1fb67187fc37e569cc5171cbebba873">Options</a>.<a class="code" href="classllvm_1_1TargetOptions.html#ab26d50483184808463759bea1da917f8">EnableFastISel</a>) &&
+<a name="l00339"></a>00339 <span class="stringliteral">"-fast-isel-verbose requires -fast-isel"</span>);
+<a name="l00340"></a>00340 assert((!<a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a> || <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ab1fb67187fc37e569cc5171cbebba873">Options</a>.<a class="code" href="classllvm_1_1TargetOptions.html#ab26d50483184808463759bea1da917f8">EnableFastISel</a>) &&
+<a name="l00341"></a>00341 <span class="stringliteral">"-fast-isel-abort requires -fast-isel"</span>);
+<a name="l00342"></a>00342
+<a name="l00343"></a>00343 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> &Fn = *mf.<a class="code" href="classllvm_1_1MachineFunction.html#ad784a6594990530bffb2018aeeed56f3">getFunction</a>();
+<a name="l00344"></a>00344 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetInstrInfo.html">TargetInstrInfo</a> &TII = *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ac13d0f6f2c915757013b101ef6e8afbc">getInstrInfo</a>();
+<a name="l00345"></a>00345 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> &TRI = *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#a70b47eca6a99c87b81f4c1b1455dc090">getRegisterInfo</a>();
+<a name="l00346"></a>00346
+<a name="l00347"></a>00347 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a> = &mf;
+<a name="l00348"></a>00348 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a> = &<a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00349"></a>00349 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a> = &getAnalysis<AliasAnalysis>();
+<a name="l00350"></a>00350 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a4539a142623c3a6f33247c1f291b742e">LibInfo</a> = &getAnalysis<TargetLibraryInfo>();
+<a name="l00351"></a>00351 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a5f299b9982f79a3a122ba449ea28ef4b">GFI</a> = Fn.<a class="code" href="classllvm_1_1Function.html#a988441f676bbcc064697039950ab9e45">hasGC</a>() ? &getAnalysis<GCModuleInfo>().getFunctionInfo(Fn) : 0;
+<a name="l00352"></a>00352
+<a name="l00353"></a>00353 <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">"\n\n\n=== "</span> << Fn.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() << <span class="stringliteral">"\n"</span>);
+<a name="l00354"></a>00354
+<a name="l00355"></a>00355 <a class="code" href="SelectionDAGISel_8cpp.html#a32183b39b95b00f771b16930a39d31fb">SplitCriticalSideEffectEdges</a>(const_cast<Function&>(Fn), <span class="keyword">this</span>);
+<a name="l00356"></a>00356
+<a name="l00357"></a>00357 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a11148d412f82458a70cb82a237169826">init</a>(*<a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>);
+<a name="l00358"></a>00358 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a8ab5bf80d0bf28b785191c8033f4065e">set</a>(Fn, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>);
+<a name="l00359"></a>00359
+<a name="l00360"></a>00360 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a882ae4a44bdaba10b04f867cc59d0b12">UseMBPI</a> && <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a> != <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>)
+<a name="l00361"></a>00361 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a021952a3b657f6321d050112563886c4">BPI</a> = &getAnalysis<BranchProbabilityInfo>();
+<a name="l00362"></a>00362 <span class="keywordflow">else</span>
+<a name="l00363"></a>00363 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a021952a3b657f6321d050112563886c4">BPI</a> = 0;
+<a name="l00364"></a>00364
+<a name="l00365"></a>00365 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a3b4a879c18a32e8829a55cc447c4e98a">init</a>(GFI, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a>, LibInfo);
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 SelectAllBasicBlocks(Fn);
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369 <span class="comment">// If the first basic block in the function has live ins that need to be</span>
+<a name="l00370"></a>00370 <span class="comment">// copied into vregs, emit the copies into the top of the block before</span>
+<a name="l00371"></a>00371 <span class="comment">// emitting the code for the block.</span>
+<a name="l00372"></a>00372 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *EntryMBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ab0789854909cf47f640a85fa2bac29c7">begin</a>();
+<a name="l00373"></a>00373 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a44ddc08d3e0ee02a2a8fb36fb4c8ac18">EmitLiveInCopies</a>(EntryMBB, TRI, TII);
+<a name="l00374"></a>00374
+<a name="l00375"></a>00375 <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<unsigned, unsigned></a> LiveInMap;
+<a name="l00376"></a>00376 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#aa7855aa1fdda952bb8b25a41df0cf976">ArgDbgValues</a>.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>())
+<a name="l00377"></a>00377 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a80b58d5afb19164c6199077bf8f8ea1a">MachineRegisterInfo::livein_iterator</a> <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#adb8e83c4e03a80fa7d24357b522e25ff">livein_begin</a>(),
+<a name="l00378"></a>00378 E = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a0e18d247091e29fe2c2c3f5bd59843fb">livein_end</a>(); <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a> != E; ++<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>)
+<a name="l00379"></a>00379 <span class="keywordflow">if</span> (<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>->second)
+<a name="l00380"></a>00380 LiveInMap.<a class="code" href="classllvm_1_1DenseMapBase.html#a699a66e504b48fdeff124e82f6c61917">insert</a>(std::make_pair(<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>->first, <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>->second));
+<a name="l00381"></a>00381
+<a name="l00382"></a>00382 <span class="comment">// Insert DBG_VALUE instructions for function arguments to the entry block.</span>
+<a name="l00383"></a>00383 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#aa7855aa1fdda952bb8b25a41df0cf976">ArgDbgValues</a>.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l00384"></a>00384 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#aa7855aa1fdda952bb8b25a41df0cf976">ArgDbgValues</a>[e-i-1];
+<a name="l00385"></a>00385 <span class="keywordtype">unsigned</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a> = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(0).<a class="code" href="classllvm_1_1MachineOperand.html#ab75f703d251cc0ce0206fe00a999db86" title="getReg - Returns the register number.">getReg</a>();
+<a name="l00386"></a>00386 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1TargetRegisterInfo.html#a055858b14215864ed367a8db6c19d6f6">TargetRegisterInfo::isPhysicalRegister</a>(Reg))
+<a name="l00387"></a>00387 EntryMBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ad657517ec09c4e070fab95c2a9115853">insert</a>(EntryMBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ab2d91e7bec944efcbc39d8e30644f111">begin</a>(), <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>);
+<a name="l00388"></a>00388 <span class="keywordflow">else</span> {
+<a name="l00389"></a>00389 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#abf69f92f1977440a4e443a26baeb73c0">getVRegDef</a>(Reg);
+<a name="l00390"></a>00390 <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> InsertPos = <a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a>;
+<a name="l00391"></a>00391 <span class="comment">// FIXME: VR def may not be in entry block.</span>
+<a name="l00392"></a>00392 Def-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>()-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ad657517ec09c4e070fab95c2a9115853">insert</a>(<a class="code" href="namespacellvm.html#aa1704159f75e6eacd595962ea6d93ffe">llvm::next</a>(InsertPos), MI);
+<a name="l00393"></a>00393 }
+<a name="l00394"></a>00394
+<a name="l00395"></a>00395 <span class="comment">// If Reg is live-in then update debug info to track its copy in a vreg.</span>
+<a name="l00396"></a>00396 <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<unsigned, unsigned>::iterator</a> LDI = LiveInMap.<a class="code" href="classllvm_1_1DenseMapBase.html#a21cf94357e53cd1069aba475266fdb63">find</a>(Reg);
+<a name="l00397"></a>00397 <span class="keywordflow">if</span> (LDI != LiveInMap.<a class="code" href="classllvm_1_1DenseMapBase.html#a321e37d79af8b4287f8a1dcf9aff9c01">end</a>()) {
+<a name="l00398"></a>00398 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#abf69f92f1977440a4e443a26baeb73c0">getVRegDef</a>(LDI->second);
+<a name="l00399"></a>00399 <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> InsertPos = <a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a>;
+<a name="l00400"></a>00400 <span class="keyword">const</span> <a class="code" href="classllvm_1_1MDNode.html" title="MDNode - a tuple of other values.">MDNode</a> *Variable =
+<a name="l00401"></a>00401 MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(MI-><a class="code" href="classllvm_1_1MachineInstr.html#a7b5fe96d88954efc855e6c466207e535">getNumOperands</a>()-1).getMetadata();
+<a name="l00402"></a>00402 <span class="keywordtype">unsigned</span> Offset = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(1).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l00403"></a>00403 <span class="comment">// Def is never a terminator here, so it is ok to increment InsertPos.</span>
+<a name="l00404"></a>00404 <a class="code" href="namespacellvm.html#a980570dc1410d4ef53806f82028ca381">BuildMI</a>(*EntryMBB, ++InsertPos, MI-><a class="code" href="classllvm_1_1MachineInstr.html#a5ca4af2a257043145ad650eafb4402f9">getDebugLoc</a>(),
+<a name="l00405"></a>00405 TII.<a class="code" href="classllvm_1_1MCInstrInfo.html#ab16f5a81fccfe4b7f645ba5a74ffad02">get</a>(<a class="code" href="namespacellvm_1_1TargetOpcode.html#aa2b3629c9319f86eee5a2c0e8c75ebfaad3fe1d0d0fe22d208bcd8712b2ea051a" title="DBG_VALUE - a mapping of the llvm.dbg.value intrinsic.">TargetOpcode::DBG_VALUE</a>))
+<a name="l00406"></a>00406 .addReg(LDI->second, <a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa14af644ca4aff07a3768974c824ac9d5">RegState::Debug</a>)
+<a name="l00407"></a>00407 .<a class="code" href="classllvm_1_1MachineInstrBuilder.html#a9f1fae6a5dbb6e378ca85df1fded8515">addImm</a>(Offset).<a class="code" href="classllvm_1_1MachineInstrBuilder.html#ac68a44416cb977887fbd4c4e5297491d">addMetadata</a>(Variable);
+<a name="l00408"></a>00408
+<a name="l00409"></a>00409 <span class="comment">// If this vreg is directly copied into an exported register then</span>
+<a name="l00410"></a>00410 <span class="comment">// that COPY instructions also need DBG_VALUE, if it is the only</span>
+<a name="l00411"></a>00411 <span class="comment">// user of LDI->second.</span>
+<a name="l00412"></a>00412 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *CopyUseMI = NULL;
+<a name="l00413"></a>00413 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1MachineRegisterInfo_1_1defusechain__iterator.html">MachineRegisterInfo::use_iterator</a>
+<a name="l00414"></a>00414 UI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a2f9819f230628888e3e68de292ecd602">use_begin</a>(LDI->second);
+<a name="l00415"></a>00415 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *UseMI = UI.skipInstruction();) {
+<a name="l00416"></a>00416 <span class="keywordflow">if</span> (UseMI-><a class="code" href="classllvm_1_1MachineInstr.html#a1e1d26226c627cf3dcf3c191b85e7d7d">isDebugValue</a>()) <span class="keywordflow">continue</span>;
+<a name="l00417"></a>00417 <span class="keywordflow">if</span> (UseMI-><a class="code" href="classllvm_1_1MachineInstr.html#ae0ac5973cd95f76e3365e67aaad69de6">isCopy</a>() && !CopyUseMI && UseMI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>() == EntryMBB) {
+<a name="l00418"></a>00418 CopyUseMI = UseMI; <span class="keywordflow">continue</span>;
+<a name="l00419"></a>00419 }
+<a name="l00420"></a>00420 <span class="comment">// Otherwise this is another use or second copy use.</span>
+<a name="l00421"></a>00421 CopyUseMI = NULL; <span class="keywordflow">break</span>;
+<a name="l00422"></a>00422 }
+<a name="l00423"></a>00423 <span class="keywordflow">if</span> (CopyUseMI) {
+<a name="l00424"></a>00424 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *NewMI =
+<a name="l00425"></a>00425 <a class="code" href="namespacellvm.html#a980570dc1410d4ef53806f82028ca381">BuildMI</a>(*<a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>, CopyUseMI-><a class="code" href="classllvm_1_1MachineInstr.html#a5ca4af2a257043145ad650eafb4402f9">getDebugLoc</a>(),
+<a name="l00426"></a>00426 TII.<a class="code" href="classllvm_1_1MCInstrInfo.html#ab16f5a81fccfe4b7f645ba5a74ffad02">get</a>(<a class="code" href="namespacellvm_1_1TargetOpcode.html#aa2b3629c9319f86eee5a2c0e8c75ebfaad3fe1d0d0fe22d208bcd8712b2ea051a" title="DBG_VALUE - a mapping of the llvm.dbg.value intrinsic.">TargetOpcode::DBG_VALUE</a>))
+<a name="l00427"></a>00427 .addReg(CopyUseMI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(0).<a class="code" href="classllvm_1_1MachineOperand.html#ab75f703d251cc0ce0206fe00a999db86" title="getReg - Returns the register number.">getReg</a>(), <a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa14af644ca4aff07a3768974c824ac9d5">RegState::Debug</a>)
+<a name="l00428"></a>00428 .addImm(Offset).<a class="code" href="classllvm_1_1MachineInstrBuilder.html#ac68a44416cb977887fbd4c4e5297491d">addMetadata</a>(Variable);
+<a name="l00429"></a>00429 <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> Pos = CopyUseMI;
+<a name="l00430"></a>00430 EntryMBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a65ff68fbbfcd18bf3ba17eef8d539aba">insertAfter</a>(Pos, NewMI);
+<a name="l00431"></a>00431 }
+<a name="l00432"></a>00432 }
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434
+<a name="l00435"></a>00435 <span class="comment">// Determine if there are any calls in this machine function.</span>
+<a name="l00436"></a>00436 <a class="code" href="classllvm_1_1MachineFrameInfo.html" title="Abstract Stack Frame Information.">MachineFrameInfo</a> *MFI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>();
+<a name="l00437"></a>00437 <span class="keywordflow">if</span> (!MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#ad104abdabbcb68deacc60c0aea1bca34" title="hasCalls - Return true if the current function has any function calls.">hasCalls</a>()) {
+<a name="l00438"></a>00438 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">MachineFunction::const_iterator</a>
+<a name="l00439"></a>00439 <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ab0789854909cf47f640a85fa2bac29c7">begin</a>(), E = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#a9d017af749f76484cb9aec9ff6e4330c">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="l00440"></a>00440 <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *MBB = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00441"></a>00441 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1MachineBasicBlock.html#a654b11787ac7c4344084d98bea7cf626">MachineBasicBlock::const_iterator</a>
+<a name="l00442"></a>00442 II = MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ab2d91e7bec944efcbc39d8e30644f111">begin</a>(), <a class="code" href="namespacellvm_1_1ARM__PROC.html#a1add7850fad3f66c140ecee871460ea4ae9d798593a4a6b5cc48486a453a59e5e">IE</a> = MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>(); II != <a class="code" href="namespacellvm_1_1ARM__PROC.html#a1add7850fad3f66c140ecee871460ea4ae9d798593a4a6b5cc48486a453a59e5e">IE</a>; ++II) {
+<a name="l00443"></a>00443 <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &MCID = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ac13d0f6f2c915757013b101ef6e8afbc">getInstrInfo</a>()-><a class="code" href="classllvm_1_1MCInstrInfo.html#ab16f5a81fccfe4b7f645ba5a74ffad02">get</a>(II->getOpcode());
+<a name="l00444"></a>00444
+<a name="l00445"></a>00445 <span class="keywordflow">if</span> ((MCID.<a class="code" href="classllvm_1_1MCInstrDesc.html#a7981f38e296fd86b0cea036317fc1fcd">isCall</a>() && !MCID.<a class="code" href="classllvm_1_1MCInstrDesc.html#a3446f5624b1c8b772a160db4229544e5">isReturn</a>()) ||
+<a name="l00446"></a>00446 II->isStackAligningInlineAsm()) {
+<a name="l00447"></a>00447 MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a5bb88f5f9d77d753e87c256950f16955">setHasCalls</a>(<span class="keyword">true</span>);
+<a name="l00448"></a>00448 <span class="keywordflow">goto</span> done;
+<a name="l00449"></a>00449 }
+<a name="l00450"></a>00450 }
+<a name="l00451"></a>00451 }
+<a name="l00452"></a>00452 }
+<a name="l00453"></a>00453
+<a name="l00454"></a>00454 done:
+<a name="l00455"></a>00455 <span class="comment">// Determine if there is a call to setjmp in the machine function.</span>
+<a name="l00456"></a>00456 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#a264579e2d24c216da3bd59985907e60a">setExposesReturnsTwice</a>(Fn.<a class="code" href="classllvm_1_1Function.html#ab79bcc780b834b4aab6e392c55831e2a">callsFunctionThatReturnsTwice</a>());
+<a name="l00457"></a>00457
+<a name="l00458"></a>00458 <span class="comment">// Replace forward-declared registers with the registers containing</span>
+<a name="l00459"></a>00459 <span class="comment">// the desired value.</span>
+<a name="l00460"></a>00460 <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> &MRI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00461"></a>00461 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1DenseMap.html">DenseMap<unsigned, unsigned>::iterator</a>
+<a name="l00462"></a>00462 <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a3f52fcf27ea6164f41a5568fb5a781e8" title="RegFixups - Registers which need to be replaced after isel is done.">RegFixups</a>.<a class="code" href="classllvm_1_1DenseMapBase.html#a432d7e955f44b118b4261eae03d7a8af">begin</a>(), E = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a3f52fcf27ea6164f41a5568fb5a781e8" title="RegFixups - Registers which need to be replaced after isel is done.">RegFixups</a>.<a class="code" href="classllvm_1_1DenseMapBase.html#a321e37d79af8b4287f8a1dcf9aff9c01">end</a>();
+<a name="l00463"></a>00463 <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="l00464"></a>00464 <span class="keywordtype">unsigned</span> From = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->first;
+<a name="l00465"></a>00465 <span class="keywordtype">unsigned</span> To = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->second;
+<a name="l00466"></a>00466 <span class="comment">// If To is also scheduled to be replaced, find what its ultimate</span>
+<a name="l00467"></a>00467 <span class="comment">// replacement is.</span>
+<a name="l00468"></a>00468 <span class="keywordflow">for</span> (;;) {
+<a name="l00469"></a>00469 <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<unsigned, unsigned>::iterator</a> J = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a3f52fcf27ea6164f41a5568fb5a781e8" title="RegFixups - Registers which need to be replaced after isel is done.">RegFixups</a>.<a class="code" href="classllvm_1_1DenseMapBase.html#a21cf94357e53cd1069aba475266fdb63">find</a>(To);
+<a name="l00470"></a>00470 <span class="keywordflow">if</span> (J == E) <span class="keywordflow">break</span>;
+<a name="l00471"></a>00471 To = J->second;
+<a name="l00472"></a>00472 }
+<a name="l00473"></a>00473 <span class="comment">// Replace it.</span>
+<a name="l00474"></a>00474 MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a0eb653bae4f5a11b4b19a6247fd0021c">replaceRegWith</a>(From, To);
+<a name="l00475"></a>00475 }
+<a name="l00476"></a>00476
+<a name="l00477"></a>00477 <span class="comment">// Freeze the set of reserved registers now that MachineFrameInfo has been</span>
+<a name="l00478"></a>00478 <span class="comment">// set up. All the information required by getReservedRegs() should be</span>
+<a name="l00479"></a>00479 <span class="comment">// available now.</span>
+<a name="l00480"></a>00480 MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#ad32d5b4fe86449641427a131c27c03f7">freezeReservedRegs</a>(*<a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>);
+<a name="l00481"></a>00481
+<a name="l00482"></a>00482 <span class="comment">// Release function-specific state. SDB and CurDAG are already cleared</span>
+<a name="l00483"></a>00483 <span class="comment">// at this point.</span>
+<a name="l00484"></a>00484 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a1281235664d14beac83662b9f943e6d1">clear</a>();
+<a name="l00485"></a>00485
+<a name="l00486"></a>00486 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00487"></a>00487 }
+<a name="l00488"></a>00488
+<a name="l00489"></a>00489 <span class="keywordtype">void</span> SelectionDAGISel::SelectBasicBlock(<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> Begin,
+<a name="l00490"></a>00490 <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> End,
+<a name="l00491"></a>00491 <span class="keywordtype">bool</span> &HadTailCall) {
+<a name="l00492"></a>00492 <span class="comment">// Lower all of the non-terminator instructions. If a call is emitted</span>
+<a name="l00493"></a>00493 <span class="comment">// as a tail call, cease emitting nodes for this block. Terminators</span>
+<a name="l00494"></a>00494 <span class="comment">// are handled below.</span>
+<a name="l00495"></a>00495 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = Begin; <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != End && !<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a39e446f1647e793791c33d0d2412d088">HasTailCall</a>; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00496"></a>00496 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#abbbfefd79a5b3d1b4ea8d8383fd01af5">visit</a>(*<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00497"></a>00497
+<a name="l00498"></a>00498 <span class="comment">// Make sure the root of the DAG is up-to-date.</span>
+<a name="l00499"></a>00499 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aef34360e8bb4bdecf3fd6345ff504f81">getControlRoot</a>());
+<a name="l00500"></a>00500 HadTailCall = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a39e446f1647e793791c33d0d2412d088">HasTailCall</a>;
+<a name="l00501"></a>00501 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l00502"></a>00502
+<a name="l00503"></a>00503 <span class="comment">// Final step, emit the lowered DAG as machine code.</span>
+<a name="l00504"></a>00504 CodeGenAndEmitDAG();
+<a name="l00505"></a>00505 }
+<a name="l00506"></a>00506
+<a name="l00507"></a>00507 <span class="keywordtype">void</span> SelectionDAGISel::ComputeLiveOutVRegInfo() {
+<a name="l00508"></a>00508 <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<SDNode*, 128></a> VisitedNodes;
+<a name="l00509"></a>00509 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDNode*, 128></a> Worklist;
+<a name="l00510"></a>00510
+<a name="l00511"></a>00511 Worklist.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a2afe36f1344e00c9ef5f8cdb39d21890">getRoot</a>().<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>());
+<a name="l00512"></a>00512
+<a name="l00513"></a>00513 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZero;
+<a name="l00514"></a>00514 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownOne;
+<a name="l00515"></a>00515
+<a name="l00516"></a>00516 <span class="keywordflow">do</span> {
+<a name="l00517"></a>00517 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *<a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a> = Worklist.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a0c8ffe664a36e30d49c84d0aded2fe08">pop_back_val</a>();
+<a name="l00518"></a>00518
+<a name="l00519"></a>00519 <span class="comment">// If we've already seen this node, ignore it.</span>
+<a name="l00520"></a>00520 <span class="keywordflow">if</span> (!VisitedNodes.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(N))
+<a name="l00521"></a>00521 <span class="keywordflow">continue</span>;
+<a name="l00522"></a>00522
+<a name="l00523"></a>00523 <span class="comment">// Otherwise, add all chain operands to the worklist.</span>
+<a name="l00524"></a>00524 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = N-><a class="code" href="classllvm_1_1SDNode.html#abc5c2f1d47a517373030133c6a102106">getNumOperands</a>(); i != e; ++i)
+<a name="l00525"></a>00525 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(i).<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>)
+<a name="l00526"></a>00526 Worklist.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(i).<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>());
+<a name="l00527"></a>00527
+<a name="l00528"></a>00528 <span class="comment">// If this is a CopyToReg with a vreg dest, process it.</span>
+<a name="l00529"></a>00529 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a93bc27ca4d9e211c54b0d9efb660f080">ISD::CopyToReg</a>)
+<a name="l00530"></a>00530 <span class="keywordflow">continue</span>;
+<a name="l00531"></a>00531
+<a name="l00532"></a>00532 <span class="keywordtype">unsigned</span> DestReg = cast<RegisterSDNode>(N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(1))-><a class="code" href="MipsDisassembler_8cpp.html#a30bccd0ebacd9892c243f7bd520e4aa0">getReg</a>();
+<a name="l00533"></a>00533 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1TargetRegisterInfo.html#ae62c5ea35b71f9020caa94340bc78f37">TargetRegisterInfo::isVirtualRegister</a>(DestReg))
+<a name="l00534"></a>00534 <span class="keywordflow">continue</span>;
+<a name="l00535"></a>00535
+<a name="l00536"></a>00536 <span class="comment">// Ignore non-scalar or non-integer values.</span>
+<a name="l00537"></a>00537 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> Src = N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(2);
+<a name="l00538"></a>00538 <a class="code" href="structllvm_1_1EVT.html">EVT</a> SrcVT = Src.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>();
+<a name="l00539"></a>00539 <span class="keywordflow">if</span> (!SrcVT.<a class="code" href="structllvm_1_1EVT.html#a8cc407ac00df4edd4ec4d5168d6ecb26" title="isInteger - Return true if this is an integer, or a vector integer type.">isInteger</a>() || SrcVT.<a class="code" href="structllvm_1_1EVT.html#a73f7c824cad61a47c21bf6d652ae2fd7" title="isVector - Return true if this is a vector value type.">isVector</a>())
+<a name="l00540"></a>00540 <span class="keywordflow">continue</span>;
+<a name="l00541"></a>00541
+<a name="l00542"></a>00542 <span class="keywordtype">unsigned</span> NumSignBits = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a01e15fa872bbde36ed8a394a01b200b9">ComputeNumSignBits</a>(Src);
+<a name="l00543"></a>00543 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ad06ca140783fd9f03eed498e8485fc3d">ComputeMaskedBits</a>(Src, KnownZero, KnownOne);
+<a name="l00544"></a>00544 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a5088979dc44f6c6dfc12edcb60cda08c" title="AddLiveOutRegInfo - Adds LiveOutInfo for a register.">AddLiveOutRegInfo</a>(DestReg, NumSignBits, KnownZero, KnownOne);
+<a name="l00545"></a>00545 } <span class="keywordflow">while</span> (!Worklist.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>());
+<a name="l00546"></a>00546 }
+<a name="l00547"></a>00547
+<a name="l00548"></a>00548 <span class="keywordtype">void</span> SelectionDAGISel::CodeGenAndEmitDAG() {
+<a name="l00549"></a>00549 std::string GroupName;
+<a name="l00550"></a>00550 <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>)
+<a name="l00551"></a>00551 GroupName = <span class="stringliteral">"Instruction Selection and Scheduling"</span>;
+<a name="l00552"></a>00552 std::string BlockName;
+<a name="l00553"></a>00553 <span class="keywordtype">int</span> BlockNumber = -1;
+<a name="l00554"></a>00554 (void)BlockNumber;
+<a name="l00555"></a>00555 <span class="preprocessor">#ifdef NDEBUG</span>
+<a name="l00556"></a>00556 <span class="preprocessor"></span> <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#aa0a1387d2f4f4c555f6e70f8772e2b36">ViewDAGCombine1</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a94d15c343cf88bcdac352ecec4163427">ViewLegalizeTypesDAGs</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a6ea92b9ff38ccbd5e49b8db2ee2ed6c0">ViewLegalizeDAGs</a> ||
+<a name="l00557"></a>00557 <a class="code" href="SelectionDAGISel_8cpp.html#a5eb1e524620af2b978b96889db819cd5">ViewDAGCombine2</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a9493966ca8816c129a6afef7ef0b0866">ViewDAGCombineLT</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a1020617e313312866c30e376a9e4558f">ViewISelDAGs</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a561cc487aa2f40047631afeca18a058a">ViewSchedDAGs</a> ||
+<a name="l00558"></a>00558 <a class="code" href="SelectionDAGISel_8cpp.html#ae7868871a8317ca2ce9ff0dfde545b24">ViewSUnitDAGs</a>)
+<a name="l00559"></a>00559 <span class="preprocessor">#endif</span>
+<a name="l00560"></a>00560 <span class="preprocessor"></span> {
+<a name="l00561"></a>00561 BlockNumber = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a6acda287e5c19ffb173b0bf8f1dd9c5e">getNumber</a>();
+<a name="l00562"></a>00562 BlockName = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ae215c5c2aecd18c4e68a94187d9cdbf1">getName</a>().<a class="code" href="classllvm_1_1StringRef.html#ab02cb6f4884b5c788efb97b6741dccaf" title="str - Get the contents as an std::string.">str</a>() + <span class="stringliteral">":"</span> +
+<a name="l00563"></a>00563 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a2961c31b29db17a4f2964899c8569a64">getBasicBlock</a>()-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>().<a class="code" href="classllvm_1_1StringRef.html#ab02cb6f4884b5c788efb97b6741dccaf" title="str - Get the contents as an std::string.">str</a>();
+<a name="l00564"></a>00564 }
+<a name="l00565"></a>00565 <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">"Initial selection DAG: BB#"</span> << BlockNumber
+<a name="l00566"></a>00566 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00567"></a>00567
+<a name="l00568"></a>00568 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#aa0a1387d2f4f4c555f6e70f8772e2b36">ViewDAGCombine1</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"dag-combine1 input for "</span> + BlockName);
+<a name="l00569"></a>00569
+<a name="l00570"></a>00570 <span class="comment">// Run the DAG combiner in pre-legalize mode.</span>
+<a name="l00571"></a>00571 {
+<a name="l00572"></a>00572 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"DAG Combining 1"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00573"></a>00573 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#abe7bd3138ea3703376dc622650b20ff3">Combine</a>(<a class="code" href="namespacellvm.html#aa6d856e4879bb775617f8c3634773b7aa9386e6e4a4c86dabf136bc0fc9f6cf3b">BeforeLegalizeTypes</a>, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>);
+<a name="l00574"></a>00574 }
+<a name="l00575"></a>00575
+<a name="l00576"></a>00576 <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">"Optimized lowered selection DAG: BB#"</span> << BlockNumber
+<a name="l00577"></a>00577 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00578"></a>00578
+<a name="l00579"></a>00579 <span class="comment">// Second step, hack on the DAG until it only uses operations and types that</span>
+<a name="l00580"></a>00580 <span class="comment">// the target supports.</span>
+<a name="l00581"></a>00581 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a94d15c343cf88bcdac352ecec4163427">ViewLegalizeTypesDAGs</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"legalize-types input for "</span> +
+<a name="l00582"></a>00582 BlockName);
+<a name="l00583"></a>00583
+<a name="l00584"></a>00584 <span class="keywordtype">bool</span> Changed;
+<a name="l00585"></a>00585 {
+<a name="l00586"></a>00586 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Type Legalization"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00587"></a>00587 Changed = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#affe59e12b70bcd9f5476f7ab289fa84a">LegalizeTypes</a>();
+<a name="l00588"></a>00588 }
+<a name="l00589"></a>00589
+<a name="l00590"></a>00590 <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">"Type-legalized selection DAG: BB#"</span> << BlockNumber
+<a name="l00591"></a>00591 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00592"></a>00592
+<a name="l00593"></a>00593 <span class="keywordflow">if</span> (Changed) {
+<a name="l00594"></a>00594 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a9493966ca8816c129a6afef7ef0b0866">ViewDAGCombineLT</a>)
+<a name="l00595"></a>00595 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"dag-combine-lt input for "</span> + BlockName);
+<a name="l00596"></a>00596
+<a name="l00597"></a>00597 <span class="comment">// Run the DAG combiner in post-type-legalize mode.</span>
+<a name="l00598"></a>00598 {
+<a name="l00599"></a>00599 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"DAG Combining after legalize types"</span>, GroupName,
+<a name="l00600"></a>00600 <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00601"></a>00601 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#abe7bd3138ea3703376dc622650b20ff3">Combine</a>(<a class="code" href="namespacellvm.html#aa6d856e4879bb775617f8c3634773b7aabfb921bbd2fd66e0a6b7524eb4b3dd9f">AfterLegalizeTypes</a>, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>);
+<a name="l00602"></a>00602 }
+<a name="l00603"></a>00603
+<a name="l00604"></a>00604 <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">"Optimized type-legalized selection DAG: BB#"</span> << BlockNumber
+<a name="l00605"></a>00605 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00606"></a>00606 }
+<a name="l00607"></a>00607
+<a name="l00608"></a>00608 {
+<a name="l00609"></a>00609 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Vector Legalization"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00610"></a>00610 Changed = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a1d9e10dce8ca4da8bad80838a6cf426b">LegalizeVectors</a>();
+<a name="l00611"></a>00611 }
+<a name="l00612"></a>00612
+<a name="l00613"></a>00613 <span class="keywordflow">if</span> (Changed) {
+<a name="l00614"></a>00614 {
+<a name="l00615"></a>00615 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Type Legalization 2"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00616"></a>00616 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#affe59e12b70bcd9f5476f7ab289fa84a">LegalizeTypes</a>();
+<a name="l00617"></a>00617 }
+<a name="l00618"></a>00618
+<a name="l00619"></a>00619 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a9493966ca8816c129a6afef7ef0b0866">ViewDAGCombineLT</a>)
+<a name="l00620"></a>00620 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"dag-combine-lv input for "</span> + BlockName);
+<a name="l00621"></a>00621
+<a name="l00622"></a>00622 <span class="comment">// Run the DAG combiner in post-type-legalize mode.</span>
+<a name="l00623"></a>00623 {
+<a name="l00624"></a>00624 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"DAG Combining after legalize vectors"</span>, GroupName,
+<a name="l00625"></a>00625 <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00626"></a>00626 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#abe7bd3138ea3703376dc622650b20ff3">Combine</a>(<a class="code" href="namespacellvm.html#aa6d856e4879bb775617f8c3634773b7aa805f5e0d60c9ebc5b134bc9190569a50">AfterLegalizeVectorOps</a>, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>);
+<a name="l00627"></a>00627 }
+<a name="l00628"></a>00628
+<a name="l00629"></a>00629 <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">"Optimized vector-legalized selection DAG: BB#"</span>
+<a name="l00630"></a>00630 << BlockNumber << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00631"></a>00631 }
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a6ea92b9ff38ccbd5e49b8db2ee2ed6c0">ViewLegalizeDAGs</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"legalize input for "</span> + BlockName);
+<a name="l00634"></a>00634
+<a name="l00635"></a>00635 {
+<a name="l00636"></a>00636 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"DAG Legalization"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00637"></a>00637 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6f1e49f6f347835aa6b5a7423dd364d1">Legalize</a>();
+<a name="l00638"></a>00638 }
+<a name="l00639"></a>00639
+<a name="l00640"></a>00640 <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">"Legalized selection DAG: BB#"</span> << BlockNumber
+<a name="l00641"></a>00641 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00642"></a>00642
+<a name="l00643"></a>00643 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a5eb1e524620af2b978b96889db819cd5">ViewDAGCombine2</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"dag-combine2 input for "</span> + BlockName);
+<a name="l00644"></a>00644
+<a name="l00645"></a>00645 <span class="comment">// Run the DAG combiner in post-legalize mode.</span>
+<a name="l00646"></a>00646 {
+<a name="l00647"></a>00647 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"DAG Combining 2"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00648"></a>00648 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#abe7bd3138ea3703376dc622650b20ff3">Combine</a>(<a class="code" href="namespacellvm.html#aa6d856e4879bb775617f8c3634773b7aa7fbaa966e5d5ac3bf03ba617b73bff5c">AfterLegalizeDAG</a>, *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a77fb1a1550d29830789e60ab9262bcae">AA</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>);
+<a name="l00649"></a>00649 }
+<a name="l00650"></a>00650
+<a name="l00651"></a>00651 <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">"Optimized legalized selection DAG: BB#"</span> << BlockNumber
+<a name="l00652"></a>00652 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00653"></a>00653
+<a name="l00654"></a>00654 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a> != <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>)
+<a name="l00655"></a>00655 ComputeLiveOutVRegInfo();
+<a name="l00656"></a>00656
+<a name="l00657"></a>00657 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a1020617e313312866c30e376a9e4558f">ViewISelDAGs</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"isel input for "</span> + BlockName);
+<a name="l00658"></a>00658
+<a name="l00659"></a>00659 <span class="comment">// Third, instruction select all of the operations to machine code, adding the</span>
+<a name="l00660"></a>00660 <span class="comment">// code to the MachineBasicBlock.</span>
+<a name="l00661"></a>00661 {
+<a name="l00662"></a>00662 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Instruction Selection"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00663"></a>00663 DoInstructionSelection();
+<a name="l00664"></a>00664 }
+<a name="l00665"></a>00665
+<a name="l00666"></a>00666 <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">"Selected selection DAG: BB#"</span> << BlockNumber
+<a name="l00667"></a>00667 << <span class="stringliteral">" '"</span> << BlockName << <span class="stringliteral">"'\n"</span>; <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac0ef17bd607d2bf65048d35672971f28">dump</a>());
+<a name="l00668"></a>00668
+<a name="l00669"></a>00669 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a561cc487aa2f40047631afeca18a058a">ViewSchedDAGs</a>) <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a6ec02a7ebbe56dfc864242c77c5a194f">viewGraph</a>(<span class="stringliteral">"scheduler input for "</span> + BlockName);
+<a name="l00670"></a>00670
+<a name="l00671"></a>00671 <span class="comment">// Schedule machine code.</span>
+<a name="l00672"></a>00672 <a class="code" href="classllvm_1_1ScheduleDAGSDNodes.html">ScheduleDAGSDNodes</a> *<a class="code" href="MachineScheduler_8cpp.html#a127ed1a56215acb4c76dcbb1e8aad935">Scheduler</a> = CreateScheduler();
+<a name="l00673"></a>00673 {
+<a name="l00674"></a>00674 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Instruction Scheduling"</span>, GroupName,
+<a name="l00675"></a>00675 <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00676"></a>00676 Scheduler-><a class="code" href="classllvm_1_1ScheduleDAGSDNodes.html#aa00d73e05dee6c2701209bac3d7786b8">Run</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l00677"></a>00677 }
+<a name="l00678"></a>00678
+<a name="l00679"></a>00679 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#ae7868871a8317ca2ce9ff0dfde545b24">ViewSUnitDAGs</a>) Scheduler-><a class="code" href="classllvm_1_1ScheduleDAG.html#a209b615edbcad3e1a7afd7411ce4eae2">viewGraph</a>();
+<a name="l00680"></a>00680
+<a name="l00681"></a>00681 <span class="comment">// Emit machine code to BB. This can change 'BB' to the last block being</span>
+<a name="l00682"></a>00682 <span class="comment">// inserted into.</span>
+<a name="l00683"></a>00683 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *FirstMBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>, *LastMBB;
+<a name="l00684"></a>00684 {
+<a name="l00685"></a>00685 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Instruction Creation"</span>, GroupName, <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00686"></a>00686
+<a name="l00687"></a>00687 <span class="comment">// FuncInfo->InsertPt is passed by reference and set to the end of the</span>
+<a name="l00688"></a>00688 <span class="comment">// scheduled instructions.</span>
+<a name="l00689"></a>00689 LastMBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = Scheduler-><a class="code" href="classllvm_1_1ScheduleDAGSDNodes.html#a6f60ed03227dbeb711a3ae9b1f0238e9">EmitSchedule</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a>);
+<a name="l00690"></a>00690 }
+<a name="l00691"></a>00691
+<a name="l00692"></a>00692 <span class="comment">// If the block was split, make sure we update any references that are used to</span>
+<a name="l00693"></a>00693 <span class="comment">// update PHI nodes later on.</span>
+<a name="l00694"></a>00694 <span class="keywordflow">if</span> (FirstMBB != LastMBB)
+<a name="l00695"></a>00695 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#af6e9499206c6a56801d70a567fc8862a">UpdateSplitBlock</a>(FirstMBB, LastMBB);
+<a name="l00696"></a>00696
+<a name="l00697"></a>00697 <span class="comment">// Free the scheduler state.</span>
+<a name="l00698"></a>00698 {
+<a name="l00699"></a>00699 <a class="code" href="structllvm_1_1NamedRegionTimer.html">NamedRegionTimer</a> T(<span class="stringliteral">"Instruction Scheduling Cleanup"</span>, GroupName,
+<a name="l00700"></a>00700 <a class="code" href="namespacellvm.html#a44e2fc6ce783a1ca396d473139a0ae76" title="This is the storage for the -time-passes option.">TimePassesIsEnabled</a>);
+<a name="l00701"></a>00701 <span class="keyword">delete</span> <a class="code" href="MachineScheduler_8cpp.html#a127ed1a56215acb4c76dcbb1e8aad935">Scheduler</a>;
+<a name="l00702"></a>00702 }
+<a name="l00703"></a>00703
+<a name="l00704"></a>00704 <span class="comment">// Free the SelectionDAG state, now that we're finished with it.</span>
+<a name="l00705"></a>00705 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a834591cc93f24897577aabeffe3b7913">clear</a>();
+<a name="l00706"></a>00706 }
+<a name="l00707"></a>00707
+<a name="l00708"></a>00708 <span class="keyword">namespace </span>{<span class="comment"></span>
+<a name="l00709"></a>00709 <span class="comment">/// ISelUpdater - helper class to handle updates of the instruction selection</span>
+<a name="l00710"></a>00710 <span class="comment">/// graph.</span>
+<a name="l00711"></a>00711 <span class="comment"></span><span class="keyword">class </span>ISelUpdater : <span class="keyword">public</span> <a class="code" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a>::DAGUpdateListener {
+<a name="l00712"></a>00712 <a class="code" href="classllvm_1_1SelectionDAG.html#a62d7889af421e6465805c3e67d7f0610">SelectionDAG::allnodes_iterator</a> &ISelPosition;
+<a name="l00713"></a>00713 <span class="keyword">public</span>:
+<a name="l00714"></a>00714 ISelUpdater(<a class="code" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> &DAG, <a class="code" href="classllvm_1_1SelectionDAG.html#a62d7889af421e6465805c3e67d7f0610">SelectionDAG::allnodes_iterator</a> &isp)
+<a name="l00715"></a>00715 : <a class="code" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a>::DAGUpdateListener(DAG), ISelPosition(isp) {}
+<a name="l00716"></a>00716 <span class="comment"></span>
+<a name="l00717"></a>00717 <span class="comment"> /// NodeDeleted - Handle nodes deleted from the graph. If the node being</span>
+<a name="l00718"></a>00718 <span class="comment"> /// deleted is the current ISelPosition node, update ISelPosition.</span>
+<a name="l00719"></a>00719 <span class="comment"> ///</span>
+<a name="l00720"></a>00720 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> NodeDeleted(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *E) {
+<a name="l00721"></a>00721 <span class="keywordflow">if</span> (ISelPosition == <a class="code" href="classllvm_1_1SelectionDAG.html#a62d7889af421e6465805c3e67d7f0610">SelectionDAG::allnodes_iterator</a>(N))
+<a name="l00722"></a>00722 ++ISelPosition;
+<a name="l00723"></a>00723 }
+<a name="l00724"></a>00724 };
+<a name="l00725"></a>00725 } <span class="comment">// end anonymous namespace</span>
+<a name="l00726"></a>00726
+<a name="l00727"></a>00727 <span class="keywordtype">void</span> SelectionDAGISel::DoInstructionSelection() {
+<a name="l00728"></a>00728 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"===== Instruction selection begins: BB#"</span>
+<a name="l00729"></a>00729 << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a6acda287e5c19ffb173b0bf8f1dd9c5e">getNumber</a>()
+<a name="l00730"></a>00730 << <span class="stringliteral">" '"</span> << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a454838c989e99a86bd804e056c367bd9">getName</a>() << <span class="stringliteral">"'\n"</span>);
+<a name="l00731"></a>00731
+<a name="l00732"></a>00732 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a9bcf997fee822474340db5e11c5217f7">PreprocessISelDAG</a>();
+<a name="l00733"></a>00733
+<a name="l00734"></a>00734 <span class="comment">// Select target instructions for the DAG.</span>
+<a name="l00735"></a>00735 {
+<a name="l00736"></a>00736 <span class="comment">// Number all nodes with a topological order and set DAGSize.</span>
+<a name="l00737"></a>00737 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a3206f1a81f9832fbffe4fe3cb2be4d52">DAGSize</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#abb8c86cb032981edbbf6bf507ba2aa32">AssignTopologicalOrder</a>();
+<a name="l00738"></a>00738
+<a name="l00739"></a>00739 <span class="comment">// Create a dummy node (which is not added to allnodes), that adds</span>
+<a name="l00740"></a>00740 <span class="comment">// a reference to the root node, preventing it from being deleted,</span>
+<a name="l00741"></a>00741 <span class="comment">// and tracking any changes of the root.</span>
+<a name="l00742"></a>00742 <a class="code" href="classllvm_1_1HandleSDNode.html">HandleSDNode</a> <a class="code" href="DynamicLibrary_8cpp.html#a8efa6281b644eb26fe749fc5c2af4d66">Dummy</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a2afe36f1344e00c9ef5f8cdb39d21890">getRoot</a>());
+<a name="l00743"></a>00743 <a class="code" href="classllvm_1_1SelectionDAG.html#a62d7889af421e6465805c3e67d7f0610">SelectionDAG::allnodes_iterator</a> ISelPosition (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a2afe36f1344e00c9ef5f8cdb39d21890">getRoot</a>().<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>());
+<a name="l00744"></a>00744 ++ISelPosition;
+<a name="l00745"></a>00745
+<a name="l00746"></a>00746 <span class="comment">// Make sure that ISelPosition gets properly updated when nodes are deleted</span>
+<a name="l00747"></a>00747 <span class="comment">// in calls made from this function.</span>
+<a name="l00748"></a>00748 ISelUpdater ISU(*<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>, ISelPosition);
+<a name="l00749"></a>00749
+<a name="l00750"></a>00750 <span class="comment">// The AllNodes list is now topological-sorted. Visit the</span>
+<a name="l00751"></a>00751 <span class="comment">// nodes by starting at the end of the list (the root of the</span>
+<a name="l00752"></a>00752 <span class="comment">// graph) and preceding back toward the beginning (the entry</span>
+<a name="l00753"></a>00753 <span class="comment">// node).</span>
+<a name="l00754"></a>00754 <span class="keywordflow">while</span> (ISelPosition != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac493b7df1666d70c1b355c82028148f0">allnodes_begin</a>()) {
+<a name="l00755"></a>00755 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Node = --ISelPosition;
+<a name="l00756"></a>00756 <span class="comment">// Skip dead nodes. DAGCombiner is expected to eliminate all dead nodes,</span>
+<a name="l00757"></a>00757 <span class="comment">// but there are currently some corner cases that it misses. Also, this</span>
+<a name="l00758"></a>00758 <span class="comment">// makes it theoretically possible to disable the DAGCombiner.</span>
+<a name="l00759"></a>00759 <span class="keywordflow">if</span> (Node-><a class="code" href="classllvm_1_1SDNode.html#afc071edeb7e2007d000374eba843f76a">use_empty</a>())
+<a name="l00760"></a>00760 <span class="keywordflow">continue</span>;
+<a name="l00761"></a>00761
+<a name="l00762"></a>00762 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *ResNode = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a5276d410489e22e2f40aec94d12475cb" title="Select - Main hook targets implement to select a node.">Select</a>(Node);
+<a name="l00763"></a>00763
+<a name="l00764"></a>00764 <span class="comment">// FIXME: This is pretty gross. 'Select' should be changed to not return</span>
+<a name="l00765"></a>00765 <span class="comment">// anything at all and this code should be nuked with a tactical strike.</span>
+<a name="l00766"></a>00766
+<a name="l00767"></a>00767 <span class="comment">// If node should not be replaced, continue with the next one.</span>
+<a name="l00768"></a>00768 <span class="keywordflow">if</span> (ResNode == Node || Node-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a062083eb3ff8c441c73d3bf42ca09bba">ISD::DELETED_NODE</a>)
+<a name="l00769"></a>00769 <span class="keywordflow">continue</span>;
+<a name="l00770"></a>00770 <span class="comment">// Replace node.</span>
+<a name="l00771"></a>00771 <span class="keywordflow">if</span> (ResNode)
+<a name="l00772"></a>00772 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a84e771c0f56c984d8ee4a85c0cb46ed3">ReplaceUses</a>(Node, ResNode);
+<a name="l00773"></a>00773
+<a name="l00774"></a>00774 <span class="comment">// If after the replacement this node is not used any more,</span>
+<a name="l00775"></a>00775 <span class="comment">// remove this dead node.</span>
+<a name="l00776"></a>00776 <span class="keywordflow">if</span> (Node-><a class="code" href="classllvm_1_1SDNode.html#afc071edeb7e2007d000374eba843f76a">use_empty</a>()) <span class="comment">// Don't delete EntryToken, etc.</span>
+<a name="l00777"></a>00777 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a935ace76cef67c6da10cf0633371efe1">RemoveDeadNode</a>(Node);
+<a name="l00778"></a>00778 }
+<a name="l00779"></a>00779
+<a name="l00780"></a>00780 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="DynamicLibrary_8cpp.html#a8efa6281b644eb26fe749fc5c2af4d66">Dummy</a>.getValue());
+<a name="l00781"></a>00781 }
+<a name="l00782"></a>00782
+<a name="l00783"></a>00783 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"===== Instruction selection ends:\n"</span>);
+<a name="l00784"></a>00784
+<a name="l00785"></a>00785 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2070933838365d7033fa1038ef0bf22c">PostprocessISelDAG</a>();
+<a name="l00786"></a>00786 }
+<a name="l00787"></a>00787 <span class="comment"></span>
+<a name="l00788"></a>00788 <span class="comment">/// PrepareEHLandingPad - Emit an EH_LABEL, set up live-in registers, and</span>
+<a name="l00789"></a>00789 <span class="comment">/// do other setup for EH landing-pad blocks.</span>
+<a name="l00790"></a>00790 <span class="comment"></span><span class="keywordtype">void</span> SelectionDAGISel::PrepareEHLandingPad() {
+<a name="l00791"></a>00791 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *MBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>;
+<a name="l00792"></a>00792
+<a name="l00793"></a>00793 <span class="comment">// Add a label to mark the beginning of the landing pad. Deletion of the</span>
+<a name="l00794"></a>00794 <span class="comment">// landing pad can thus be detected via the MachineModuleInfo.</span>
+<a name="l00795"></a>00795 <a class="code" href="classllvm_1_1MCSymbol.html">MCSymbol</a> *Label = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#aaaa58853344cccb2ae6dcecea4ee54ad">getMMI</a>().<a class="code" href="classllvm_1_1MachineModuleInfo.html#ac504b93158e311edcdf423930b998bc9">addLandingPad</a>(MBB);
+<a name="l00796"></a>00796
+<a name="l00797"></a>00797 <span class="comment">// Assign the call site to the landing pad's begin label.</span>
+<a name="l00798"></a>00798 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#aaaa58853344cccb2ae6dcecea4ee54ad">getMMI</a>().<a class="code" href="classllvm_1_1MachineModuleInfo.html#a1c2f69d218d1271947ae1e618cccb34b">setCallSiteLandingPad</a>(Label, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a053b2cccf7a5a9531bb9a91a4eb78311" title="LPadToCallSiteMap - Map a landing pad to the call site indexes.">LPadToCallSiteMap</a>[MBB]);
+<a name="l00799"></a>00799
+<a name="l00800"></a>00800 <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &II = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ac13d0f6f2c915757013b101ef6e8afbc">getInstrInfo</a>()-><a class="code" href="classllvm_1_1MCInstrInfo.html#ab16f5a81fccfe4b7f645ba5a74ffad02">get</a>(<a class="code" href="namespacellvm_1_1TargetOpcode.html#aa2b3629c9319f86eee5a2c0e8c75ebfaa4464c39babc8c8afe5055a25af42b548">TargetOpcode::EH_LABEL</a>);
+<a name="l00801"></a>00801 <a class="code" href="namespacellvm.html#a980570dc1410d4ef53806f82028ca381">BuildMI</a>(*MBB, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a786df6ad0d47c92c8c411ab209dacd32">getCurDebugLoc</a>(), II)
+<a name="l00802"></a>00802 .addSym(Label);
+<a name="l00803"></a>00803
+<a name="l00804"></a>00804 <span class="comment">// Mark exception register as live in.</span>
+<a name="l00805"></a>00805 <span class="keywordtype">unsigned</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>.<a class="code" href="classllvm_1_1TargetLowering.html#ab1e1b66a1362edacfd3ff988066fd46a">getExceptionPointerRegister</a>();
+<a name="l00806"></a>00806 <span class="keywordflow">if</span> (Reg) MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ae26efdb76d5c56388c65dc5b02a2ae6f">addLiveIn</a>(Reg);
+<a name="l00807"></a>00807
+<a name="l00808"></a>00808 <span class="comment">// Mark exception selector register as live in.</span>
+<a name="l00809"></a>00809 Reg = <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>.<a class="code" href="classllvm_1_1TargetLowering.html#ac7d44c84d6fdfadbe86850f7429e1de8">getExceptionSelectorRegister</a>();
+<a name="l00810"></a>00810 <span class="keywordflow">if</span> (Reg) MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ae26efdb76d5c56388c65dc5b02a2ae6f">addLiveIn</a>(Reg);
+<a name="l00811"></a>00811 }
+<a name="l00812"></a>00812 <span class="comment"></span>
+<a name="l00813"></a>00813 <span class="comment">/// TryToFoldFastISelLoad - We're checking to see if we can fold the specified</span>
+<a name="l00814"></a>00814 <span class="comment">/// load into the specified FoldInst. Note that we could have a sequence where</span>
+<a name="l00815"></a>00815 <span class="comment">/// multiple LLVM IR instructions are folded into the same machineinstr. For</span>
+<a name="l00816"></a>00816 <span class="comment">/// example we could have:</span>
+<a name="l00817"></a>00817 <span class="comment">/// A: x = load i32 *P</span>
+<a name="l00818"></a>00818 <span class="comment">/// B: y = icmp A, 42</span>
+<a name="l00819"></a>00819 <span class="comment">/// C: br y, ...</span>
+<a name="l00820"></a>00820 <span class="comment">///</span>
+<a name="l00821"></a>00821 <span class="comment">/// In this scenario, LI is "A", and FoldInst is "C". We know about "B" (and</span>
+<a name="l00822"></a>00822 <span class="comment">/// any other folded instructions) because it is between A and C.</span>
+<a name="l00823"></a>00823 <span class="comment">///</span>
+<a name="l00824"></a>00824 <span class="comment">/// If we succeed in folding the load into the operation, return true.</span>
+<a name="l00825"></a>00825 <span class="comment">///</span>
+<a name="l00826"></a>00826 <span class="comment"></span><span class="keywordtype">bool</span> SelectionDAGISel::TryToFoldFastISelLoad(<span class="keyword">const</span> <a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>,
+<a name="l00827"></a>00827 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *FoldInst,
+<a name="l00828"></a>00828 <a class="code" href="classllvm_1_1FastISel.html">FastISel</a> *FastIS) {
+<a name="l00829"></a>00829 <span class="comment">// We know that the load has a single use, but don't know what it is. If it</span>
+<a name="l00830"></a>00830 <span class="comment">// isn't one of the folded instructions, then we can't succeed here. Handle</span>
+<a name="l00831"></a>00831 <span class="comment">// this by scanning the single-use users of the load until we get to FoldInst.</span>
+<a name="l00832"></a>00832 <span class="keywordtype">unsigned</span> MaxUsers = 6; <span class="comment">// Don't scan down huge single-use chains of instrs.</span>
+<a name="l00833"></a>00833
+<a name="l00834"></a>00834 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *TheUser = LI-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>();
+<a name="l00835"></a>00835 <span class="keywordflow">while</span> (TheUser != FoldInst && <span class="comment">// Scan up until we find FoldInst.</span>
+<a name="l00836"></a>00836 <span class="comment">// Stay in the right block.</span>
+<a name="l00837"></a>00837 TheUser-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>() == FoldInst-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>() &&
+<a name="l00838"></a>00838 --MaxUsers) { <span class="comment">// Don't scan too far.</span>
+<a name="l00839"></a>00839 <span class="comment">// If there are multiple or no uses of this instruction, then bail out.</span>
+<a name="l00840"></a>00840 <span class="keywordflow">if</span> (!TheUser-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00841"></a>00841 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00842"></a>00842
+<a name="l00843"></a>00843 TheUser = TheUser-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>();
+<a name="l00844"></a>00844 }
+<a name="l00845"></a>00845
+<a name="l00846"></a>00846 <span class="comment">// If we didn't find the fold instruction, then we failed to collapse the</span>
+<a name="l00847"></a>00847 <span class="comment">// sequence.</span>
+<a name="l00848"></a>00848 <span class="keywordflow">if</span> (TheUser != FoldInst)
+<a name="l00849"></a>00849 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00850"></a>00850
+<a name="l00851"></a>00851 <span class="comment">// Don't try to fold volatile loads. Target has to deal with alignment</span>
+<a name="l00852"></a>00852 <span class="comment">// constraints.</span>
+<a name="l00853"></a>00853 <span class="keywordflow">if</span> (LI-><a class="code" href="classllvm_1_1LoadInst.html#aeb96f1a88b4e58c34a988eebd843f688">isVolatile</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00854"></a>00854
+<a name="l00855"></a>00855 <span class="comment">// Figure out which vreg this is going into. If there is no assigned vreg yet</span>
+<a name="l00856"></a>00856 <span class="comment">// then there actually was no reference to it. Perhaps the load is referenced</span>
+<a name="l00857"></a>00857 <span class="comment">// by a dead instruction.</span>
+<a name="l00858"></a>00858 <span class="keywordtype">unsigned</span> LoadReg = FastIS-><a class="code" href="classllvm_1_1FastISel.html#a622597e6f1bb1a26e91b8fdc2aec0bde">getRegForValue</a>(LI);
+<a name="l00859"></a>00859 <span class="keywordflow">if</span> (LoadReg == 0)
+<a name="l00860"></a>00860 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00861"></a>00861
+<a name="l00862"></a>00862 <span class="comment">// Check to see what the uses of this vreg are. If it has no uses, or more</span>
+<a name="l00863"></a>00863 <span class="comment">// than one use (at the machine instr level) then we can't fold it.</span>
+<a name="l00864"></a>00864 <a class="code" href="classllvm_1_1MachineRegisterInfo_1_1defusechain__iterator.html">MachineRegisterInfo::reg_iterator</a> RI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#adfeaea4e5c82dea47ff9aa1f8367104c">reg_begin</a>(LoadReg);
+<a name="l00865"></a>00865 <span class="keywordflow">if</span> (RI == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a1d8edf72c1d3e14e4d2396b98e07ad72">reg_end</a>())
+<a name="l00866"></a>00866 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00867"></a>00867
+<a name="l00868"></a>00868 <span class="comment">// See if there is exactly one use of the vreg. If there are multiple uses,</span>
+<a name="l00869"></a>00869 <span class="comment">// then the instruction got lowered to multiple machine instructions or the</span>
+<a name="l00870"></a>00870 <span class="comment">// use of the loaded value ended up being multiple operands of the result, in</span>
+<a name="l00871"></a>00871 <span class="comment">// either case, we can't fold this.</span>
+<a name="l00872"></a>00872 <a class="code" href="classllvm_1_1MachineRegisterInfo_1_1defusechain__iterator.html">MachineRegisterInfo::reg_iterator</a> PostRI = RI; ++PostRI;
+<a name="l00873"></a>00873 <span class="keywordflow">if</span> (PostRI != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a303effb01b1d92c71b15cc25b2438917">RegInfo</a>-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a1d8edf72c1d3e14e4d2396b98e07ad72">reg_end</a>())
+<a name="l00874"></a>00874 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00875"></a>00875
+<a name="l00876"></a>00876 assert(RI.<a class="code" href="classllvm_1_1MachineRegisterInfo_1_1defusechain__iterator.html#a95a32f591bca64490f1fb1d5104e06c8">getOperand</a>().<a class="code" href="classllvm_1_1MachineOperand.html#a57bf9ee7219097ff0f98da23a3b3b782">isUse</a>() &&
+<a name="l00877"></a>00877 <span class="stringliteral">"The only use of the vreg must be a use, we haven't emitted the def!"</span>);
+<a name="l00878"></a>00878
+<a name="l00879"></a>00879 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="classllvm_1_1User.html">User</a> = &*RI;
+<a name="l00880"></a>00880
+<a name="l00881"></a>00881 <span class="comment">// Set the insertion point properly. Folding the load can cause generation of</span>
+<a name="l00882"></a>00882 <span class="comment">// other random instructions (like sign extends) for addressing modes, make</span>
+<a name="l00883"></a>00883 <span class="comment">// sure they get inserted in a logical place before the new instruction.</span>
+<a name="l00884"></a>00884 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = User;
+<a name="l00885"></a>00885 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = User-><a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00886"></a>00886
+<a name="l00887"></a>00887 <span class="comment">// Ask the target to try folding the load.</span>
+<a name="l00888"></a>00888 <span class="keywordflow">return</span> FastIS-><a class="code" href="classllvm_1_1FastISel.html#a8b27a4680521395dd03291fd7b5372e1">TryToFoldLoad</a>(User, RI.<a class="code" href="classllvm_1_1MachineRegisterInfo_1_1defusechain__iterator.html#a2ae4c129d83e0b28b8c5ca8691fa0a91">getOperandNo</a>(), <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>);
+<a name="l00889"></a>00889 }
+<a name="l00890"></a>00890 <span class="comment"></span>
+<a name="l00891"></a>00891 <span class="comment">/// isFoldedOrDeadInstruction - Return true if the specified instruction is</span>
+<a name="l00892"></a>00892 <span class="comment">/// side-effect free and is either dead or folded into a generated instruction.</span>
+<a name="l00893"></a>00893 <span class="comment">/// Return false if it needs to be emitted.</span>
+<a name="l00894"></a><a class="code" href="SelectionDAGISel_8cpp.html#a9eb151f67a54574fa315413f25a5b53c">00894</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SelectionDAGISel_8cpp.html#a9eb151f67a54574fa315413f25a5b53c">isFoldedOrDeadInstruction</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>,
+<a name="l00895"></a>00895 <a class="code" href="classllvm_1_1FunctionLoweringInfo.html">FunctionLoweringInfo</a> *FuncInfo) {
+<a name="l00896"></a>00896 <span class="keywordflow">return</span> !I-><a class="code" href="classllvm_1_1Instruction.html#aa26de3d6e38997b9041e824ea558c770">mayWriteToMemory</a>() && <span class="comment">// Side-effecting instructions aren't folded.</span>
+<a name="l00897"></a>00897 !isa<TerminatorInst>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) && <span class="comment">// Terminators aren't folded.</span>
+<a name="l00898"></a>00898 !isa<DbgInfoIntrinsic>(I) && <span class="comment">// Debug instructions aren't folded.</span>
+<a name="l00899"></a>00899 !isa<LandingPadInst>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) && <span class="comment">// Landingpad instructions aren't folded.</span>
+<a name="l00900"></a>00900 !FuncInfo-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a5001b6c031e4f880246c271fe3fb87ea">isExportedInst</a>(I); <span class="comment">// Exported instrs must be computed.</span>
+<a name="l00901"></a>00901 }
+<a name="l00902"></a>00902
+<a name="l00903"></a>00903 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l00904"></a>00904 <span class="preprocessor"></span><span class="comment">// Collect per Instruction statistics for fast-isel misses. Only those</span>
+<a name="l00905"></a>00905 <span class="comment">// instructions that cause the bail are accounted for. It does not account for</span>
+<a name="l00906"></a>00906 <span class="comment">// instructions higher in the block. Thus, summing the per instructions stats</span>
+<a name="l00907"></a>00907 <span class="comment">// will not add up to what is reported by NumFastIselFailures.</span>
+<a name="l00908"></a><a class="code" href="SelectionDAGISel_8cpp.html#abc62c7ae4b5f73ce4a6e84dcc10682a3">00908</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SelectionDAGISel_8cpp.html#abc62c7ae4b5f73ce4a6e84dcc10682a3">collectFailStats</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00909"></a>00909 <span class="keywordflow">switch</span> (I-><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="l00910"></a>00910 <span class="keywordflow">default</span>: assert (0 && <span class="stringliteral">"<Invalid operator> "</span>);
+<a name="l00911"></a>00911
+<a name="l00912"></a>00912 <span class="comment">// Terminators</span>
+<a name="l00913"></a>00913 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MBlazeISD.html#a4cbef502356ec86269d324dc7be5cbf7a4e52b775450b88b95f31bae9c160fe01">Instruction::Ret</a>: NumFastIselFailRet++; <span class="keywordflow">return</span>;
+<a name="l00914"></a>00914 <span class="keywordflow">case</span> Instruction::Br: NumFastIselFailBr++; <span class="keywordflow">return</span>;
+<a name="l00915"></a>00915 <span class="keywordflow">case</span> Instruction::Switch: NumFastIselFailSwitch++; <span class="keywordflow">return</span>;
+<a name="l00916"></a>00916 <span class="keywordflow">case</span> Instruction::IndirectBr: NumFastIselFailIndirectBr++; <span class="keywordflow">return</span>;
+<a name="l00917"></a>00917 <span class="keywordflow">case</span> Instruction::Invoke: NumFastIselFailInvoke++; <span class="keywordflow">return</span>;
+<a name="l00918"></a>00918 <span class="keywordflow">case</span> Instruction::Resume: NumFastIselFailResume++; <span class="keywordflow">return</span>;
+<a name="l00919"></a>00919 <span class="keywordflow">case</span> Instruction::Unreachable: NumFastIselFailUnreachable++; <span class="keywordflow">return</span>;
+<a name="l00920"></a>00920
+<a name="l00921"></a>00921 <span class="comment">// Standard binary operators...</span>
+<a name="l00922"></a>00922 <span class="keywordflow">case</span> Instruction::Add: NumFastIselFailAdd++; <span class="keywordflow">return</span>;
+<a name="l00923"></a>00923 <span class="keywordflow">case</span> Instruction::FAdd: NumFastIselFailFAdd++; <span class="keywordflow">return</span>;
+<a name="l00924"></a>00924 <span class="keywordflow">case</span> Instruction::Sub: NumFastIselFailSub++; <span class="keywordflow">return</span>;
+<a name="l00925"></a>00925 <span class="keywordflow">case</span> Instruction::FSub: NumFastIselFailFSub++; <span class="keywordflow">return</span>;
+<a name="l00926"></a>00926 <span class="keywordflow">case</span> Instruction::Mul: NumFastIselFailMul++; <span class="keywordflow">return</span>;
+<a name="l00927"></a>00927 <span class="keywordflow">case</span> Instruction::FMul: NumFastIselFailFMul++; <span class="keywordflow">return</span>;
+<a name="l00928"></a>00928 <span class="keywordflow">case</span> Instruction::UDiv: NumFastIselFailUDiv++; <span class="keywordflow">return</span>;
+<a name="l00929"></a>00929 <span class="keywordflow">case</span> Instruction::SDiv: NumFastIselFailSDiv++; <span class="keywordflow">return</span>;
+<a name="l00930"></a>00930 <span class="keywordflow">case</span> Instruction::FDiv: NumFastIselFailFDiv++; <span class="keywordflow">return</span>;
+<a name="l00931"></a>00931 <span class="keywordflow">case</span> Instruction::URem: NumFastIselFailURem++; <span class="keywordflow">return</span>;
+<a name="l00932"></a>00932 <span class="keywordflow">case</span> Instruction::SRem: NumFastIselFailSRem++; <span class="keywordflow">return</span>;
+<a name="l00933"></a>00933 <span class="keywordflow">case</span> Instruction::FRem: NumFastIselFailFRem++; <span class="keywordflow">return</span>;
+<a name="l00934"></a>00934
+<a name="l00935"></a>00935 <span class="comment">// Logical operators...</span>
+<a name="l00936"></a>00936 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a>: NumFastIselFailAnd++; <span class="keywordflow">return</span>;
+<a name="l00937"></a>00937 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>: NumFastIselFailOr++; <span class="keywordflow">return</span>;
+<a name="l00938"></a>00938 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>: NumFastIselFailXor++; <span class="keywordflow">return</span>;
+<a name="l00939"></a>00939
+<a name="l00940"></a>00940 <span class="comment">// Memory instructions...</span>
+<a name="l00941"></a>00941 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a046d5352df590c864fee454e53ac31c6">Instruction::Alloca</a>: NumFastIselFailAlloca++; <span class="keywordflow">return</span>;
+<a name="l00942"></a>00942 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a5069619ca8fdce305534f3fe85091a0f">Instruction::Load</a>: NumFastIselFailLoad++; <span class="keywordflow">return</span>;
+<a name="l00943"></a>00943 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a36b3dd3b84fde3f8494a9b18af131856">Instruction::Store</a>: NumFastIselFailStore++; <span class="keywordflow">return</span>;
+<a name="l00944"></a>00944 <span class="keywordflow">case</span> Instruction::AtomicCmpXchg: NumFastIselFailAtomicCmpXchg++; <span class="keywordflow">return</span>;
+<a name="l00945"></a>00945 <span class="keywordflow">case</span> Instruction::AtomicRMW: NumFastIselFailAtomicRMW++; <span class="keywordflow">return</span>;
+<a name="l00946"></a>00946 <span class="keywordflow">case</span> Instruction::Fence: NumFastIselFailFence++; <span class="keywordflow">return</span>;
+<a name="l00947"></a>00947 <span class="keywordflow">case</span> Instruction::GetElementPtr: NumFastIselFailGetElementPtr++; <span class="keywordflow">return</span>;
+<a name="l00948"></a>00948
+<a name="l00949"></a>00949 <span class="comment">// Convert instructions...</span>
+<a name="l00950"></a>00950 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Instruction::Trunc</a>: NumFastIselFailTrunc++; <span class="keywordflow">return</span>;
+<a name="l00951"></a>00951 <span class="keywordflow">case</span> Instruction::ZExt: NumFastIselFailZExt++; <span class="keywordflow">return</span>;
+<a name="l00952"></a>00952 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>: NumFastIselFailSExt++; <span class="keywordflow">return</span>;
+<a name="l00953"></a>00953 <span class="keywordflow">case</span> Instruction::FPTrunc: NumFastIselFailFPTrunc++; <span class="keywordflow">return</span>;
+<a name="l00954"></a>00954 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a24e13352d9c828e3de6682f4baae88fd">Instruction::FPExt</a>: NumFastIselFailFPExt++; <span class="keywordflow">return</span>;
+<a name="l00955"></a>00955 <span class="keywordflow">case</span> Instruction::FPToUI: NumFastIselFailFPToUI++; <span class="keywordflow">return</span>;
+<a name="l00956"></a>00956 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3677968984dd841410ed46288fd5ab6c">Instruction::FPToSI</a>: NumFastIselFailFPToSI++; <span class="keywordflow">return</span>;
+<a name="l00957"></a>00957 <span class="keywordflow">case</span> Instruction::UIToFP: NumFastIselFailUIToFP++; <span class="keywordflow">return</span>;
+<a name="l00958"></a>00958 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#aa7d131dc7d18431127ae9fe7d4429fa7">Instruction::SIToFP</a>: NumFastIselFailSIToFP++; <span class="keywordflow">return</span>;
+<a name="l00959"></a>00959 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a>: NumFastIselFailIntToPtr++; <span class="keywordflow">return</span>;
+<a name="l00960"></a>00960 <span class="keywordflow">case</span> Instruction::PtrToInt: NumFastIselFailPtrToInt++; <span class="keywordflow">return</span>;
+<a name="l00961"></a>00961 <span class="keywordflow">case</span> Instruction::BitCast: NumFastIselFailBitCast++; <span class="keywordflow">return</span>;
+<a name="l00962"></a>00962
+<a name="l00963"></a>00963 <span class="comment">// Other instructions...</span>
+<a name="l00964"></a>00964 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a6a4ce50f71e29df6dd1920cf067a2eb5">Instruction::ICmp</a>: NumFastIselFailICmp++; <span class="keywordflow">return</span>;
+<a name="l00965"></a>00965 <span class="keywordflow">case</span> Instruction::FCmp: NumFastIselFailFCmp++; <span class="keywordflow">return</span>;
+<a name="l00966"></a>00966 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">Instruction::PHI</a>: NumFastIselFailPHI++; <span class="keywordflow">return</span>;
+<a name="l00967"></a>00967 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MCID.html#accb16fffd544529ed4d816a45e40f425a32dbd2c72a98eaee90e3ad5ef7b5af16">Instruction::Select</a>: NumFastIselFailSelect++; <span class="keywordflow">return</span>;
+<a name="l00968"></a>00968 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#af6d6a791770bad2303c4399986979e3eae411369b2f0d8f484fec62c3291b1b51">Instruction::Call</a>: NumFastIselFailCall++; <span class="keywordflow">return</span>;
+<a name="l00969"></a>00969 <span class="keywordflow">case</span> Instruction::Shl: NumFastIselFailShl++; <span class="keywordflow">return</span>;
+<a name="l00970"></a>00970 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>: NumFastIselFailLShr++; <span class="keywordflow">return</span>;
+<a name="l00971"></a>00971 <span class="keywordflow">case</span> Instruction::AShr: NumFastIselFailAShr++; <span class="keywordflow">return</span>;
+<a name="l00972"></a>00972 <span class="keywordflow">case</span> Instruction::VAArg: NumFastIselFailVAArg++; <span class="keywordflow">return</span>;
+<a name="l00973"></a>00973 <span class="keywordflow">case</span> <a class="code" href="InstCombineCompares_8cpp.html#aa5ab8c7b55d8bc7cab66be444daa70a1">Instruction::ExtractElement</a>: NumFastIselFailExtractElement++; <span class="keywordflow">return</span>;
+<a name="l00974"></a>00974 <span class="keywordflow">case</span> Instruction::InsertElement: NumFastIselFailInsertElement++; <span class="keywordflow">return</span>;
+<a name="l00975"></a>00975 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#adf8e6afb8f89abc3900677224e37e9fc">Instruction::ShuffleVector</a>: NumFastIselFailShuffleVector++; <span class="keywordflow">return</span>;
+<a name="l00976"></a>00976 <span class="keywordflow">case</span> Instruction::ExtractValue: NumFastIselFailExtractValue++; <span class="keywordflow">return</span>;
+<a name="l00977"></a>00977 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a76c28bb2ffedc276a40a8898166e0d3a">Instruction::InsertValue</a>: NumFastIselFailInsertValue++; <span class="keywordflow">return</span>;
+<a name="l00978"></a>00978 <span class="keywordflow">case</span> Instruction::LandingPad: NumFastIselFailLandingPad++; <span class="keywordflow">return</span>;
+<a name="l00979"></a>00979 }
+<a name="l00980"></a>00980 }
+<a name="l00981"></a>00981 <span class="preprocessor">#endif</span>
+<a name="l00982"></a>00982 <span class="preprocessor"></span>
+<a name="l00983"></a>00983 <span class="keywordtype">void</span> SelectionDAGISel::SelectAllBasicBlocks(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> &Fn) {
+<a name="l00984"></a>00984 <span class="comment">// Initialize the Fast-ISel state, if needed.</span>
+<a name="l00985"></a>00985 <a class="code" href="classllvm_1_1FastISel.html">FastISel</a> *FastIS = 0;
+<a name="l00986"></a>00986 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ab1fb67187fc37e569cc5171cbebba873">Options</a>.<a class="code" href="classllvm_1_1TargetOptions.html#ab26d50483184808463759bea1da917f8">EnableFastISel</a>)
+<a name="l00987"></a>00987 FastIS = <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>.<a class="code" href="classllvm_1_1TargetLowering.html#ac0464176c5e6cc20826b9ad8495067df">createFastISel</a>(*<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a4539a142623c3a6f33247c1f291b742e">LibInfo</a>);
+<a name="l00988"></a>00988
+<a name="l00989"></a>00989 <span class="comment">// Iterate over all basic blocks in the function.</span>
+<a name="l00990"></a>00990 <a class="code" href="classllvm_1_1ReversePostOrderTraversal.html">ReversePostOrderTraversal<const Function*></a> RPOT(&Fn);
+<a name="l00991"></a>00991 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ReversePostOrderTraversal.html#aa447608e2881e813215c3f289496c6ea">ReversePostOrderTraversal<const Function*>::rpo_iterator</a>
+<a name="l00992"></a>00992 <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = RPOT.begin(), E = RPOT.end(); <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="l00993"></a>00993 <span class="keyword">const</span> <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *LLVMBB = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00994"></a>00994
+<a name="l00995"></a>00995 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a> != <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>) {
+<a name="l00996"></a>00996 <span class="keywordtype">bool</span> AllPredsVisited = <span class="keyword">true</span>;
+<a name="l00997"></a>00997 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1PredIterator.html">const_pred_iterator</a> PI = <a class="code" href="namespacellvm.html#a7e108932dc3da5294aed99a353aac9c4">pred_begin</a>(LLVMBB), PE = <a class="code" href="namespacellvm.html#a5eeaf08e96168c2cac8960f87f0ef360">pred_end</a>(LLVMBB);
+<a name="l00998"></a>00998 PI != PE; ++PI) {
+<a name="l00999"></a>00999 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a451ef41c10474698faf84831057575a1">VisitedBBs</a>.<a class="code" href="classllvm_1_1SmallPtrSet.html#a2ced6343b8ad006a757059554bbf9f37" title="count - Return true if the specified pointer is in the set.">count</a>(*PI)) {
+<a name="l01000"></a>01000 AllPredsVisited = <span class="keyword">false</span>;
+<a name="l01001"></a>01001 <span class="keywordflow">break</span>;
+<a name="l01002"></a>01002 }
+<a name="l01003"></a>01003 }
+<a name="l01004"></a>01004
+<a name="l01005"></a>01005 <span class="keywordflow">if</span> (AllPredsVisited) {
+<a name="l01006"></a>01006 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = LLVMBB-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l01007"></a>01007 isa<PHINode>(<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="l01008"></a>01008 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#acada979e9424b6f61142bbca85a0fea0">ComputePHILiveOutRegInfo</a>(cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>));
+<a name="l01009"></a>01009 } <span class="keywordflow">else</span> {
+<a name="l01010"></a>01010 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = LLVMBB-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l01011"></a>01011 isa<PHINode>(<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="l01012"></a>01012 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a39bc44baeb40615967a3ce797fb27900">InvalidatePHILiveOutRegInfo</a>(cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>));
+<a name="l01013"></a>01013 }
+<a name="l01014"></a>01014
+<a name="l01015"></a>01015 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a451ef41c10474698faf84831057575a1">VisitedBBs</a>.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(LLVMBB);
+<a name="l01016"></a>01016 }
+<a name="l01017"></a>01017
+<a name="l01018"></a>01018 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a4c53c37d30d9482f565f78751a3797d3" title="MBBMap - A mapping from LLVM basic blocks to their machine code entry.">MBBMap</a>[LLVMBB];
+<a name="l01019"></a>01019 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#aa7dc7faaab4856b8f0014b8283e26c7b">getFirstNonPHI</a>();
+<a name="l01020"></a>01020
+<a name="l01021"></a>01021 <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> <span class="keyword">const</span> Begin = LLVMBB-><a class="code" href="classllvm_1_1BasicBlock.html#a0e73f4e09745bb69fdd7b15232c45428">getFirstNonPHI</a>();
+<a name="l01022"></a>01022 <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> <span class="keyword">const</span> End = LLVMBB-><a class="code" href="classllvm_1_1BasicBlock.html#a0b4e7bee9b8575cc7db73329f1a561bd">end</a>();
+<a name="l01023"></a>01023 <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a> BI = End;
+<a name="l01024"></a>01024
+<a name="l01025"></a>01025 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#aa7dc7faaab4856b8f0014b8283e26c7b">getFirstNonPHI</a>();
+<a name="l01026"></a>01026
+<a name="l01027"></a>01027 <span class="comment">// Setup an EH landing-pad block.</span>
+<a name="l01028"></a>01028 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a3f522ae33859d693fb5781efe690e9e6">isLandingPad</a>())
+<a name="l01029"></a>01029 PrepareEHLandingPad();
+<a name="l01030"></a>01030
+<a name="l01031"></a>01031 <span class="comment">// Lower any arguments needed in this block if this is the entry block.</span>
+<a name="l01032"></a>01032 <span class="keywordflow">if</span> (LLVMBB == &Fn.<a class="code" href="classllvm_1_1Function.html#a30f2c362631e3728d2f47a8203071ade">getEntryBlock</a>())
+<a name="l01033"></a>01033 LowerArguments(LLVMBB);
+<a name="l01034"></a>01034
+<a name="l01035"></a>01035 <span class="comment">// Before doing SelectionDAG ISel, see if FastISel has been requested.</span>
+<a name="l01036"></a>01036 <span class="keywordflow">if</span> (FastIS) {
+<a name="l01037"></a>01037 FastIS-><a class="code" href="classllvm_1_1FastISel.html#a6a4d1b2ae70640755d4942597b65376e">startNewBlock</a>();
+<a name="l01038"></a>01038
+<a name="l01039"></a>01039 <span class="comment">// Emit code for any incoming arguments. This must happen before</span>
+<a name="l01040"></a>01040 <span class="comment">// beginning FastISel on the entry block.</span>
+<a name="l01041"></a>01041 <span class="keywordflow">if</span> (LLVMBB == &Fn.<a class="code" href="classllvm_1_1Function.html#a30f2c362631e3728d2f47a8203071ade">getEntryBlock</a>()) {
+<a name="l01042"></a>01042 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aef34360e8bb4bdecf3fd6345ff504f81">getControlRoot</a>());
+<a name="l01043"></a>01043 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01044"></a>01044 CodeGenAndEmitDAG();
+<a name="l01045"></a>01045
+<a name="l01046"></a>01046 <span class="comment">// If we inserted any instructions at the beginning, make a note of</span>
+<a name="l01047"></a>01047 <span class="comment">// where they are, so we can be sure to emit subsequent instructions</span>
+<a name="l01048"></a>01048 <span class="comment">// after them.</span>
+<a name="l01049"></a>01049 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ab2d91e7bec944efcbc39d8e30644f111">begin</a>())
+<a name="l01050"></a>01050 FastIS-><a class="code" href="classllvm_1_1FastISel.html#a0bfa1f986356fdcdcab1c98dcf9a84e5">setLastLocalValue</a>(<a class="code" href="namespacellvm.html#a7923e3e207de8bc1d0d6a5091316ddde">llvm::prior</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a>));
+<a name="l01051"></a>01051 <span class="keywordflow">else</span>
+<a name="l01052"></a>01052 FastIS-><a class="code" href="classllvm_1_1FastISel.html#a0bfa1f986356fdcdcab1c98dcf9a84e5">setLastLocalValue</a>(0);
+<a name="l01053"></a>01053 }
+<a name="l01054"></a>01054
+<a name="l01055"></a>01055 <span class="keywordtype">unsigned</span> NumFastIselRemaining = std::distance(Begin, End);
+<a name="l01056"></a>01056 <span class="comment">// Do FastISel on as many instructions as possible.</span>
+<a name="l01057"></a>01057 <span class="keywordflow">for</span> (; BI != Begin; --BI) {
+<a name="l01058"></a>01058 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Inst = <a class="code" href="namespacellvm.html#a7923e3e207de8bc1d0d6a5091316ddde">llvm::prior</a>(BI);
+<a name="l01059"></a>01059
+<a name="l01060"></a>01060 <span class="comment">// If we no longer require this instruction, skip it.</span>
+<a name="l01061"></a>01061 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a9eb151f67a54574fa315413f25a5b53c">isFoldedOrDeadInstruction</a>(Inst, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>)) {
+<a name="l01062"></a>01062 --NumFastIselRemaining;
+<a name="l01063"></a>01063 <span class="keywordflow">continue</span>;
+<a name="l01064"></a>01064 }
+<a name="l01065"></a>01065
+<a name="l01066"></a>01066 <span class="comment">// Bottom-up: reset the insert pos at the top, after any local-value</span>
+<a name="l01067"></a>01067 <span class="comment">// instructions.</span>
+<a name="l01068"></a>01068 FastIS-><a class="code" href="classllvm_1_1FastISel.html#acb5337d3078000bf9b580b28031136af">recomputeInsertPt</a>();
+<a name="l01069"></a>01069
+<a name="l01070"></a>01070 <span class="comment">// Try to select the instruction with FastISel.</span>
+<a name="l01071"></a>01071 <span class="keywordflow">if</span> (FastIS-><a class="code" href="classllvm_1_1FastISel.html#a81099b1c657ff7348cc7d25130149f6b">SelectInstruction</a>(Inst)) {
+<a name="l01072"></a>01072 --NumFastIselRemaining;
+<a name="l01073"></a>01073 ++NumFastIselSuccess;
+<a name="l01074"></a>01074 <span class="comment">// If fast isel succeeded, skip over all the folded instructions, and</span>
+<a name="l01075"></a>01075 <span class="comment">// then see if there is a load right before the selected instructions.</span>
+<a name="l01076"></a>01076 <span class="comment">// Try to fold the load if so.</span>
+<a name="l01077"></a>01077 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *BeforeInst = Inst;
+<a name="l01078"></a>01078 <span class="keywordflow">while</span> (BeforeInst != Begin) {
+<a name="l01079"></a>01079 BeforeInst = <a class="code" href="namespacellvm.html#a7923e3e207de8bc1d0d6a5091316ddde">llvm::prior</a>(<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a>(BeforeInst));
+<a name="l01080"></a>01080 <span class="keywordflow">if</span> (!<a class="code" href="SelectionDAGISel_8cpp.html#a9eb151f67a54574fa315413f25a5b53c">isFoldedOrDeadInstruction</a>(BeforeInst, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>))
+<a name="l01081"></a>01081 <span class="keywordflow">break</span>;
+<a name="l01082"></a>01082 }
+<a name="l01083"></a>01083 <span class="keywordflow">if</span> (BeforeInst != Inst && isa<LoadInst>(BeforeInst) &&
+<a name="l01084"></a>01084 BeforeInst-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l01085"></a>01085 TryToFoldFastISelLoad(cast<LoadInst>(BeforeInst), Inst, FastIS)) {
+<a name="l01086"></a>01086 <span class="comment">// If we succeeded, don't re-select the load.</span>
+<a name="l01087"></a>01087 BI = <a class="code" href="namespacellvm.html#aa1704159f75e6eacd595962ea6d93ffe">llvm::next</a>(<a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::const_iterator</a>(BeforeInst));
+<a name="l01088"></a>01088 --NumFastIselRemaining;
+<a name="l01089"></a>01089 ++NumFastIselSuccess;
+<a name="l01090"></a>01090 }
+<a name="l01091"></a>01091 <span class="keywordflow">continue</span>;
+<a name="l01092"></a>01092 }
+<a name="l01093"></a>01093
+<a name="l01094"></a>01094 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l01095"></a>01095 <span class="preprocessor"></span> <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a086b60310efb455c4b210eeae130b974">EnableFastISelVerbose2</a>)
+<a name="l01096"></a>01096 <a class="code" href="SelectionDAGISel_8cpp.html#abc62c7ae4b5f73ce4a6e84dcc10682a3">collectFailStats</a>(Inst);
+<a name="l01097"></a>01097 <span class="preprocessor">#endif</span>
+<a name="l01098"></a>01098 <span class="preprocessor"></span>
+<a name="l01099"></a>01099 <span class="comment">// Then handle certain instructions as single-LLVM-Instruction blocks.</span>
+<a name="l01100"></a>01100 <span class="keywordflow">if</span> (isa<CallInst>(Inst)) {
+<a name="l01101"></a>01101
+<a name="l01102"></a>01102 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#ad64839db51b02e2d40ec293faabeeec2">EnableFastISelVerbose</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a>) {
+<a name="l01103"></a>01103 <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"FastISel missed call: "</span>;
+<a name="l01104"></a>01104 Inst-><a class="code" href="classllvm_1_1Value.html#a1933ce346f4cbadcc151cea432c2b316" title="dump - Support for debugging, callable in GDB: V->dump()">dump</a>();
+<a name="l01105"></a>01105 }
+<a name="l01106"></a>01106
+<a name="l01107"></a>01107 <span class="keywordflow">if</span> (!Inst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#af5c7041df3ad5edffe5da17b5264c1fc" title="isVoidTy - Return true if this is 'void'.">isVoidTy</a>() && !Inst-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>()) {
+<a name="l01108"></a>01108 <span class="keywordtype">unsigned</span> &R = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a7465059e82380b0b0aa6f103ed28c8dc">ValueMap</a>[Inst];
+<a name="l01109"></a>01109 <span class="keywordflow">if</span> (!R)
+<a name="l01110"></a>01110 R = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a2d6bdc7bcc1f94fb003f83533c11819c">CreateRegs</a>(Inst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01111"></a>01111 }
+<a name="l01112"></a>01112
+<a name="l01113"></a>01113 <span class="keywordtype">bool</span> HadTailCall = <span class="keyword">false</span>;
+<a name="l01114"></a>01114 SelectBasicBlock(Inst, BI, HadTailCall);
+<a name="l01115"></a>01115
+<a name="l01116"></a>01116 <span class="comment">// Recompute NumFastIselRemaining as Selection DAG instruction</span>
+<a name="l01117"></a>01117 <span class="comment">// selection may have handled the call, input args, etc.</span>
+<a name="l01118"></a>01118 <span class="keywordtype">unsigned</span> RemainingNow = std::distance(Begin, BI);
+<a name="l01119"></a>01119 NumFastIselFailures += NumFastIselRemaining - RemainingNow;
+<a name="l01120"></a>01120
+<a name="l01121"></a>01121 <span class="comment">// If the call was emitted as a tail call, we're done with the block.</span>
+<a name="l01122"></a>01122 <span class="keywordflow">if</span> (HadTailCall) {
+<a name="l01123"></a>01123 --BI;
+<a name="l01124"></a>01124 <span class="keywordflow">break</span>;
+<a name="l01125"></a>01125 }
+<a name="l01126"></a>01126
+<a name="l01127"></a>01127 NumFastIselRemaining = RemainingNow;
+<a name="l01128"></a>01128 <span class="keywordflow">continue</span>;
+<a name="l01129"></a>01129 }
+<a name="l01130"></a>01130
+<a name="l01131"></a>01131 <span class="keywordflow">if</span> (isa<TerminatorInst>(Inst) && !isa<BranchInst>(Inst)) {
+<a name="l01132"></a>01132 <span class="comment">// Don't abort, and use a different message for terminator misses.</span>
+<a name="l01133"></a>01133 NumFastIselFailures += NumFastIselRemaining;
+<a name="l01134"></a>01134 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#ad64839db51b02e2d40ec293faabeeec2">EnableFastISelVerbose</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a>) {
+<a name="l01135"></a>01135 <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"FastISel missed terminator: "</span>;
+<a name="l01136"></a>01136 Inst-><a class="code" href="classllvm_1_1Value.html#a1933ce346f4cbadcc151cea432c2b316" title="dump - Support for debugging, callable in GDB: V->dump()">dump</a>();
+<a name="l01137"></a>01137 }
+<a name="l01138"></a>01138 } <span class="keywordflow">else</span> {
+<a name="l01139"></a>01139 NumFastIselFailures += NumFastIselRemaining;
+<a name="l01140"></a>01140 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#ad64839db51b02e2d40ec293faabeeec2">EnableFastISelVerbose</a> || <a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a>) {
+<a name="l01141"></a>01141 <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"FastISel miss: "</span>;
+<a name="l01142"></a>01142 Inst-><a class="code" href="classllvm_1_1Value.html#a1933ce346f4cbadcc151cea432c2b316" title="dump - Support for debugging, callable in GDB: V->dump()">dump</a>();
+<a name="l01143"></a>01143 }
+<a name="l01144"></a>01144 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a9d50504a9daa484cb9ffe06b0a4e8d0c">EnableFastISelAbort</a>)
+<a name="l01145"></a>01145 <span class="comment">// The "fast" selector couldn't handle something and bailed.</span>
+<a name="l01146"></a>01146 <span class="comment">// For the purpose of debugging, just abort.</span>
+<a name="l01147"></a>01147 <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"FastISel didn't select the entire block"</span>);
+<a name="l01148"></a>01148 }
+<a name="l01149"></a>01149 <span class="keywordflow">break</span>;
+<a name="l01150"></a>01150 }
+<a name="l01151"></a>01151
+<a name="l01152"></a>01152 FastIS-><a class="code" href="classllvm_1_1FastISel.html#acb5337d3078000bf9b580b28031136af">recomputeInsertPt</a>();
+<a name="l01153"></a>01153 }
+<a name="l01154"></a>01154
+<a name="l01155"></a>01155 <span class="keywordflow">if</span> (Begin != BI)
+<a name="l01156"></a>01156 ++NumDAGBlocks;
+<a name="l01157"></a>01157 <span class="keywordflow">else</span>
+<a name="l01158"></a>01158 ++NumFastIselBlocks;
+<a name="l01159"></a>01159
+<a name="l01160"></a>01160 <span class="keywordflow">if</span> (Begin != BI) {
+<a name="l01161"></a>01161 <span class="comment">// Run SelectionDAG instruction selection on the remainder of the block</span>
+<a name="l01162"></a>01162 <span class="comment">// not handled by FastISel. If FastISel is not run, this is the entire</span>
+<a name="l01163"></a>01163 <span class="comment">// block.</span>
+<a name="l01164"></a>01164 <span class="keywordtype">bool</span> HadTailCall;
+<a name="l01165"></a>01165 SelectBasicBlock(Begin, BI, HadTailCall);
+<a name="l01166"></a>01166 }
+<a name="l01167"></a>01167
+<a name="l01168"></a>01168 FinishBasicBlock();
+<a name="l01169"></a>01169 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.clear();
+<a name="l01170"></a>01170 }
+<a name="l01171"></a>01171
+<a name="l01172"></a>01172 <span class="keyword">delete</span> FastIS;
+<a name="l01173"></a>01173 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a1b90604db120716e786d9d33babc3edd">clearDanglingDebugInfo</a>();
+<a name="l01174"></a>01174 }
+<a name="l01175"></a>01175
+<a name="l01176"></a>01176 <span class="keywordtype">void</span>
+<a name="l01177"></a>01177 SelectionDAGISel::FinishBasicBlock() {
+<a name="l01178"></a>01178
+<a name="l01179"></a>01179 <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">"Total amount of phi nodes to update: "</span>
+<a name="l01180"></a>01180 << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size() << <span class="stringliteral">"\n"</span>;
+<a name="l01181"></a>01181 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size(); i != e; ++i)
+<a name="l01182"></a>01182 <a class="code" href="namespacellvm.html#a7c46c742c31be54870e2038048e6b391" title="dbgs - Return a circular-buffered debug stream.">dbgs</a>() << <span class="stringliteral">"Node "</span> << i << <span class="stringliteral">" : ("</span>
+<a name="l01183"></a>01183 << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].first
+<a name="l01184"></a>01184 << <span class="stringliteral">", "</span> << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].second << <span class="stringliteral">")\n"</span>);
+<a name="l01185"></a>01185
+<a name="l01186"></a>01186 <span class="comment">// Next, now that we know what the last MBB the LLVM BB expanded is, update</span>
+<a name="l01187"></a>01187 <span class="comment">// PHI nodes in successors.</span>
+<a name="l01188"></a>01188 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>.empty() &&
+<a name="l01189"></a>01189 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>.empty() &&
+<a name="l01190"></a>01190 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>.empty()) {
+<a name="l01191"></a>01191 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size(); i != e; ++i) {
+<a name="l01192"></a>01192 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">PHI</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].first;
+<a name="l01193"></a>01193 assert(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#ad70025709baab4e42d5d9d83023bc402">isPHI</a>() &&
+<a name="l01194"></a>01194 <span class="stringliteral">"This is not a machine PHI node that we are updating!"</span>);
+<a name="l01195"></a>01195 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a57f25804288bc580d7b2e4016a38aec9">isSuccessor</a>(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>()))
+<a name="l01196"></a>01196 <span class="keywordflow">continue</span>;
+<a name="l01197"></a>01197 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(
+<a name="l01198"></a>01198 <a class="code" href="classllvm_1_1MachineOperand.html#a18124eff2d5106b9bf041f948a1912cc">MachineOperand::CreateReg</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].second, <span class="keyword">false</span>));
+<a name="l01199"></a>01199 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>));
+<a name="l01200"></a>01200 }
+<a name="l01201"></a>01201 <span class="keywordflow">return</span>;
+<a name="l01202"></a>01202 }
+<a name="l01203"></a>01203
+<a name="l01204"></a>01204 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>.size(); i != e; ++i) {
+<a name="l01205"></a>01205 <span class="comment">// Lower header first, if it wasn't already lowered</span>
+<a name="l01206"></a>01206 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Emitted) {
+<a name="l01207"></a>01207 <span class="comment">// Set the current basic block to the mbb we wish to insert the code into</span>
+<a name="l01208"></a>01208 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Parent;
+<a name="l01209"></a>01209 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01210"></a>01210 <span class="comment">// Emit the code</span>
+<a name="l01211"></a>01211 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa57e81be4daba055c7fa4a6fea96ce8d">visitBitTestHeader</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i], <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l01212"></a>01212 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa3e946c1fc678a70e849244389bd929a">getRoot</a>());
+<a name="l01213"></a>01213 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01214"></a>01214 CodeGenAndEmitDAG();
+<a name="l01215"></a>01215 }
+<a name="l01216"></a>01216
+<a name="l01217"></a>01217 uint32_t UnhandledWeight = 0;
+<a name="l01218"></a>01218 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0, ej = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases.size(); j != ej; ++j)
+<a name="l01219"></a>01219 UnhandledWeight += <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j].ExtraWeight;
+<a name="l01220"></a>01220
+<a name="l01221"></a>01221 for (<span class="keywordtype">unsigned</span> j = 0, ej = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases.size(); j != ej; ++j) {
+<a name="l01222"></a>01222 UnhandledWeight -= <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j].ExtraWeight;
+<a name="l01223"></a>01223 <span class="comment">// Set the current basic block to the mbb we wish to insert the code into</span>
+<a name="l01224"></a>01224 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j].ThisBB;
+<a name="l01225"></a>01225 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01226"></a>01226 <span class="comment">// Emit the code</span>
+<a name="l01227"></a>01227 <span class="keywordflow">if</span> (j+1 != ej)
+<a name="l01228"></a>01228 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a318504e3fe7e4589c750f145a1f663f3" title="visitBitTestCase - this function produces one "bit test"">visitBitTestCase</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i],
+<a name="l01229"></a>01229 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j+1].ThisBB,
+<a name="l01230"></a>01230 UnhandledWeight,
+<a name="l01231"></a>01231 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Reg,
+<a name="l01232"></a>01232 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j],
+<a name="l01233"></a>01233 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l01234"></a>01234 <span class="keywordflow">else</span>
+<a name="l01235"></a>01235 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a318504e3fe7e4589c750f145a1f663f3" title="visitBitTestCase - this function produces one "bit test"">visitBitTestCase</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i],
+<a name="l01236"></a>01236 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Default,
+<a name="l01237"></a>01237 UnhandledWeight,
+<a name="l01238"></a>01238 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Reg,
+<a name="l01239"></a>01239 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j],
+<a name="l01240"></a>01240 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l01241"></a>01241
+<a name="l01242"></a>01242
+<a name="l01243"></a>01243 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa3e946c1fc678a70e849244389bd929a">getRoot</a>());
+<a name="l01244"></a>01244 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01245"></a>01245 CodeGenAndEmitDAG();
+<a name="l01246"></a>01246 }
+<a name="l01247"></a>01247
+<a name="l01248"></a>01248 <span class="comment">// Update PHI Nodes</span>
+<a name="l01249"></a>01249 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> pi = 0, pe = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size();
+<a name="l01250"></a>01250 pi != pe; ++pi) {
+<a name="l01251"></a>01251 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *PHI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].first;
+<a name="l01252"></a>01252 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *PHIBB = PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>();
+<a name="l01253"></a>01253 assert(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#ad70025709baab4e42d5d9d83023bc402">isPHI</a>() &&
+<a name="l01254"></a>01254 <span class="stringliteral">"This is not a machine PHI node that we are updating!"</span>);
+<a name="l01255"></a>01255 <span class="comment">// This is "default" BB. We have two jumps to it. From "header" BB and</span>
+<a name="l01256"></a>01256 <span class="comment">// from last "case" BB.</span>
+<a name="l01257"></a>01257 <span class="keywordflow">if</span> (PHIBB == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Default) {
+<a name="l01258"></a>01258 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html">MachineOperand</a>::
+<a name="l01259"></a>01259 CreateReg(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].second,
+<a name="l01260"></a>01260 <span class="keyword">false</span>));
+<a name="l01261"></a>01261 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Parent));
+<a name="l01262"></a>01262 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html">MachineOperand</a>::
+<a name="l01263"></a>01263 CreateReg(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].second,
+<a name="l01264"></a>01264 <span class="keyword">false</span>));
+<a name="l01265"></a>01265 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases.
+<a name="l01266"></a>01266 back().ThisBB));
+<a name="l01267"></a>01267 }
+<a name="l01268"></a>01268 <span class="comment">// One of "cases" BB.</span>
+<a name="l01269"></a>01269 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0, ej = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases.size();
+<a name="l01270"></a>01270 j != ej; ++j) {
+<a name="l01271"></a>01271 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a>* cBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>[i].Cases[j].ThisBB;
+<a name="l01272"></a>01272 <span class="keywordflow">if</span> (cBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a57f25804288bc580d7b2e4016a38aec9">isSuccessor</a>(PHIBB)) {
+<a name="l01273"></a>01273 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html">MachineOperand</a>::
+<a name="l01274"></a>01274 CreateReg(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].second,
+<a name="l01275"></a>01275 <span class="keyword">false</span>));
+<a name="l01276"></a>01276 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(cBB));
+<a name="l01277"></a>01277 }
+<a name="l01278"></a>01278 }
+<a name="l01279"></a>01279 }
+<a name="l01280"></a>01280 }
+<a name="l01281"></a>01281 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a344f912d5c4f1ec4fdceb14d61a62331">BitTestCases</a>.clear();
+<a name="l01282"></a>01282
+<a name="l01283"></a>01283 <span class="comment">// If the JumpTable record is filled in, then we need to emit a jump table.</span>
+<a name="l01284"></a>01284 <span class="comment">// Updating the PHI nodes is tricky in this case, since we need to determine</span>
+<a name="l01285"></a>01285 <span class="comment">// whether the PHI is a successor of the range check MBB or the jump table MBB</span>
+<a name="l01286"></a>01286 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>.size(); i != e; ++i) {
+<a name="l01287"></a>01287 <span class="comment">// Lower header first, if it wasn't already lowered</span>
+<a name="l01288"></a>01288 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].first.Emitted) {
+<a name="l01289"></a>01289 <span class="comment">// Set the current basic block to the mbb we wish to insert the code into</span>
+<a name="l01290"></a>01290 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].first.HeaderBB;
+<a name="l01291"></a>01291 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01292"></a>01292 <span class="comment">// Emit the code</span>
+<a name="l01293"></a>01293 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#afe740b90e18adb6aa5f36a308c37398e">visitJumpTableHeader</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].second, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].first,
+<a name="l01294"></a>01294 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l01295"></a>01295 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa3e946c1fc678a70e849244389bd929a">getRoot</a>());
+<a name="l01296"></a>01296 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01297"></a>01297 CodeGenAndEmitDAG();
+<a name="l01298"></a>01298 }
+<a name="l01299"></a>01299
+<a name="l01300"></a>01300 <span class="comment">// Set the current basic block to the mbb we wish to insert the code into</span>
+<a name="l01301"></a>01301 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].second.MBB;
+<a name="l01302"></a>01302 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01303"></a>01303 <span class="comment">// Emit the code</span>
+<a name="l01304"></a>01304 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a8b4ce7202ecace03bcfa27f8be506c81" title="visitJumpTable - Emit JumpTable node in the current MBB">visitJumpTable</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].second);
+<a name="l01305"></a>01305 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa3e946c1fc678a70e849244389bd929a">getRoot</a>());
+<a name="l01306"></a>01306 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01307"></a>01307 CodeGenAndEmitDAG();
+<a name="l01308"></a>01308
+<a name="l01309"></a>01309 <span class="comment">// Update PHI Nodes</span>
+<a name="l01310"></a>01310 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> pi = 0, pe = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size();
+<a name="l01311"></a>01311 pi != pe; ++pi) {
+<a name="l01312"></a>01312 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *PHI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].first;
+<a name="l01313"></a>01313 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *PHIBB = PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>();
+<a name="l01314"></a>01314 assert(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#ad70025709baab4e42d5d9d83023bc402">isPHI</a>() &&
+<a name="l01315"></a>01315 <span class="stringliteral">"This is not a machine PHI node that we are updating!"</span>);
+<a name="l01316"></a>01316 <span class="comment">// "default" BB. We can go there only from header BB.</span>
+<a name="l01317"></a>01317 <span class="keywordflow">if</span> (PHIBB == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].second.Default) {
+<a name="l01318"></a>01318 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>
+<a name="l01319"></a>01319 (<a class="code" href="classllvm_1_1MachineOperand.html#a18124eff2d5106b9bf041f948a1912cc">MachineOperand::CreateReg</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].second,
+<a name="l01320"></a>01320 <span class="keyword">false</span>));
+<a name="l01321"></a>01321 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>
+<a name="l01322"></a>01322 (<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>[i].first.HeaderBB));
+<a name="l01323"></a>01323 }
+<a name="l01324"></a>01324 <span class="comment">// JT BB. Just iterate over successors here</span>
+<a name="l01325"></a>01325 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a57f25804288bc580d7b2e4016a38aec9">isSuccessor</a>(PHIBB)) {
+<a name="l01326"></a>01326 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>
+<a name="l01327"></a>01327 (<a class="code" href="classllvm_1_1MachineOperand.html#a18124eff2d5106b9bf041f948a1912cc">MachineOperand::CreateReg</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pi].second,
+<a name="l01328"></a>01328 <span class="keyword">false</span>));
+<a name="l01329"></a>01329 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>));
+<a name="l01330"></a>01330 }
+<a name="l01331"></a>01331 }
+<a name="l01332"></a>01332 }
+<a name="l01333"></a>01333 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a9e9f0e8bba0c07aa975df97765117fa5">JTCases</a>.clear();
+<a name="l01334"></a>01334
+<a name="l01335"></a>01335 <span class="comment">// If the switch block involved a branch to one of the actual successors, we</span>
+<a name="l01336"></a>01336 <span class="comment">// need to update PHI nodes in that block.</span>
+<a name="l01337"></a>01337 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size(); i != e; ++i) {
+<a name="l01338"></a>01338 <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *PHI = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].first;
+<a name="l01339"></a>01339 assert(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#ad70025709baab4e42d5d9d83023bc402">isPHI</a>() &&
+<a name="l01340"></a>01340 <span class="stringliteral">"This is not a machine PHI node that we are updating!"</span>);
+<a name="l01341"></a>01341 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a57f25804288bc580d7b2e4016a38aec9">isSuccessor</a>(PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>())) {
+<a name="l01342"></a>01342 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(
+<a name="l01343"></a>01343 <a class="code" href="classllvm_1_1MachineOperand.html#a18124eff2d5106b9bf041f948a1912cc">MachineOperand::CreateReg</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[i].second, <span class="keyword">false</span>));
+<a name="l01344"></a>01344 PHI-><a class="code" href="classllvm_1_1MachineInstr.html#aabf3514a1ace5d142cc33b48f3eb3f63">addOperand</a>(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>));
+<a name="l01345"></a>01345 }
+<a name="l01346"></a>01346 }
+<a name="l01347"></a>01347
+<a name="l01348"></a>01348 <span class="comment">// If we generated any switch lowering information, build and codegen any</span>
+<a name="l01349"></a>01349 <span class="comment">// additional DAGs necessary.</span>
+<a name="l01350"></a>01350 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>.size(); i != e; ++i) {
+<a name="l01351"></a>01351 <span class="comment">// Set the current basic block to the mbb we wish to insert the code into</span>
+<a name="l01352"></a>01352 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i].ThisBB;
+<a name="l01353"></a>01353 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01354"></a>01354
+<a name="l01355"></a>01355 <span class="comment">// Determine the unique successors.</span>
+<a name="l01356"></a>01356 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<MachineBasicBlock *, 2></a> Succs;
+<a name="l01357"></a>01357 Succs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i].TrueBB);
+<a name="l01358"></a>01358 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i].TrueBB != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i].FalseBB)
+<a name="l01359"></a>01359 Succs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i].FalseBB);
+<a name="l01360"></a>01360
+<a name="l01361"></a>01361 <span class="comment">// Emit the code. Note that this could result in FuncInfo->MBB being split.</span>
+<a name="l01362"></a>01362 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a23e7312cc9cf434846a35684ccd4b28d">visitSwitchCase</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>[i], <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>);
+<a name="l01363"></a>01363 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a3d2e079387a6e69ce2c8bb27bf7c2f32">setRoot</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#aa3e946c1fc678a70e849244389bd929a">getRoot</a>());
+<a name="l01364"></a>01364 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2c224fcb5175ab1e842dd2a1371eb3d8">clear</a>();
+<a name="l01365"></a>01365 CodeGenAndEmitDAG();
+<a name="l01366"></a>01366
+<a name="l01367"></a>01367 <span class="comment">// Remember the last block, now that any splitting is done, for use in</span>
+<a name="l01368"></a>01368 <span class="comment">// populating PHI nodes in successors.</span>
+<a name="l01369"></a>01369 <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *ThisBB = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>;
+<a name="l01370"></a>01370
+<a name="l01371"></a>01371 <span class="comment">// Handle any PHI nodes in successors of this chunk, as if we were coming</span>
+<a name="l01372"></a>01372 <span class="comment">// from the original BB before switch expansion. Note that PHI nodes can</span>
+<a name="l01373"></a>01373 <span class="comment">// occur multiple times in PHINodesToUpdate. We have to be very careful to</span>
+<a name="l01374"></a>01374 <span class="comment">// handle them the right number of times.</span>
+<a name="l01375"></a>01375 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Succs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l01376"></a>01376 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a> = Succs[i];
+<a name="l01377"></a>01377 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a90b6dd55afe6936ce5854c71baadbf92" title="MBB - The current insert position inside the current block.">InsertPt</a> = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>();
+<a name="l01378"></a>01378 <span class="comment">// FuncInfo->MBB may have been removed from the CFG if a branch was</span>
+<a name="l01379"></a>01379 <span class="comment">// constant folded.</span>
+<a name="l01380"></a>01380 <span class="keywordflow">if</span> (ThisBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#a57f25804288bc580d7b2e4016a38aec9">isSuccessor</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>)) {
+<a name="l01381"></a>01381 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> Phi = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ab2d91e7bec944efcbc39d8e30644f111">begin</a>();
+<a name="l01382"></a>01382 Phi != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a9893077f1825192ca0f3d173afefb573" title="MBB - The current block.">MBB</a>-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>() && Phi->isPHI();
+<a name="l01383"></a>01383 ++Phi) {
+<a name="l01384"></a>01384 <span class="comment">// This value for this PHI node is recorded in PHINodesToUpdate.</span>
+<a name="l01385"></a>01385 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> pn = 0; ; ++pn) {
+<a name="l01386"></a>01386 assert(pn != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>.size() &&
+<a name="l01387"></a>01387 <span class="stringliteral">"Didn't find PHI entry!"</span>);
+<a name="l01388"></a>01388 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pn].first == Phi) {
+<a name="l01389"></a>01389 Phi->addOperand(<a class="code" href="classllvm_1_1MachineOperand.html">MachineOperand</a>::
+<a name="l01390"></a>01390 CreateReg(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a67db3969c1e61b8d020a3817d1f755cb">FuncInfo</a>-><a class="code" href="classllvm_1_1FunctionLoweringInfo.html#a99d5184cf5e487012782adccecbc2dd6">PHINodesToUpdate</a>[pn].second,
+<a name="l01391"></a>01391 <span class="keyword">false</span>));
+<a name="l01392"></a>01392 Phi->addOperand(<a class="code" href="classllvm_1_1MachineOperand.html#afff7622ffefd3560aafe2025d245d4c5">MachineOperand::CreateMBB</a>(ThisBB));
+<a name="l01393"></a>01393 <span class="keywordflow">break</span>;
+<a name="l01394"></a>01394 }
+<a name="l01395"></a>01395 }
+<a name="l01396"></a>01396 }
+<a name="l01397"></a>01397 }
+<a name="l01398"></a>01398 }
+<a name="l01399"></a>01399 }
+<a name="l01400"></a>01400 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a312f923b3a36e342969c005f7779f761">SDB</a>-><a class="code" href="classllvm_1_1SelectionDAGBuilder.html#a2399a2e82821e050e9a00c8ad33e2aae">SwitchCases</a>.clear();
+<a name="l01401"></a>01401 }
+<a name="l01402"></a>01402
+<a name="l01403"></a>01403 <span class="comment"></span>
+<a name="l01404"></a>01404 <span class="comment">/// Create the scheduler. If a specific scheduler was specified</span>
+<a name="l01405"></a>01405 <span class="comment">/// via the SchedulerRegistry, use it, otherwise select the</span>
+<a name="l01406"></a>01406 <span class="comment">/// one preferred by the target.</span>
+<a name="l01407"></a>01407 <span class="comment">///</span>
+<a name="l01408"></a>01408 <span class="comment"></span><a class="code" href="classllvm_1_1ScheduleDAGSDNodes.html">ScheduleDAGSDNodes</a> *SelectionDAGISel::CreateScheduler() {
+<a name="l01409"></a>01409 <a class="code" href="classllvm_1_1RegisterScheduler.html#a360361b84089ef7c4103152b3c02a40e">RegisterScheduler::FunctionPassCtor</a> Ctor = <a class="code" href="classllvm_1_1RegisterScheduler.html#ac22e4155a7381e68c1180117fea35c75">RegisterScheduler::getDefault</a>();
+<a name="l01410"></a>01410
+<a name="l01411"></a>01411 <span class="keywordflow">if</span> (!Ctor) {
+<a name="l01412"></a>01412 Ctor = <a class="code" href="SelectionDAGISel_8cpp.html#afabfb264c515ec09675c6a53ecf95785">ISHeuristic</a>;
+<a name="l01413"></a>01413 <a class="code" href="classllvm_1_1RegisterScheduler.html#a40bdb2b1f28b916e0fdcd93453fdfd73">RegisterScheduler::setDefault</a>(Ctor);
+<a name="l01414"></a>01414 }
+<a name="l01415"></a>01415
+<a name="l01416"></a>01416 <span class="keywordflow">return</span> Ctor(<span class="keyword">this</span>, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>);
+<a name="l01417"></a>01417 }
+<a name="l01418"></a>01418
+<a name="l01419"></a>01419 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l01420"></a>01420 <span class="comment">// Helper functions used by the generated instruction selector.</span>
+<a name="l01421"></a>01421 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l01422"></a>01422 <span class="comment">// Calls to these methods are generated by tblgen.</span>
+<a name="l01423"></a>01423 <span class="comment"></span>
+<a name="l01424"></a>01424 <span class="comment">/// CheckAndMask - The isel is trying to match something like (and X, 255). If</span>
+<a name="l01425"></a>01425 <span class="comment">/// the dag combiner simplified the 255, we still want to match. RHS is the</span>
+<a name="l01426"></a>01426 <span class="comment">/// actual value in the DAG on the RHS of an AND, and DesiredMaskS is the value</span>
+<a name="l01427"></a>01427 <span class="comment">/// specified in the .td file (e.g. 255).</span>
+<a name="l01428"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#ad51b12121dcca6c724763203d1132498">01428</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad51b12121dcca6c724763203d1132498">SelectionDAGISel::CheckAndMask</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a> LHS, <a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> *RHS,
+<a name="l01429"></a>01429 <a class="code" href="classint64__t.html">int64_t</a> DesiredMaskS)<span class="keyword"> const </span>{
+<a name="l01430"></a>01430 <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &ActualMask = RHS-><a class="code" href="classllvm_1_1ConstantSDNode.html#a7951626d3fc3c89c4efee59ed9c3d8bf">getAPIntValue</a>();
+<a name="l01431"></a>01431 <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &DesiredMask = <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(LHS.<a class="code" href="classllvm_1_1SDValue.html#a70aa652293da070dfe5b9fae309d0112">getValueSizeInBits</a>(), DesiredMaskS);
+<a name="l01432"></a>01432
+<a name="l01433"></a>01433 <span class="comment">// If the actual mask exactly matches, success!</span>
+<a name="l01434"></a>01434 <span class="keywordflow">if</span> (ActualMask == DesiredMask)
+<a name="l01435"></a>01435 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01436"></a>01436
+<a name="l01437"></a>01437 <span class="comment">// If the actual AND mask is allowing unallowed bits, this doesn't match.</span>
+<a name="l01438"></a>01438 <span class="keywordflow">if</span> (ActualMask.<a class="code" href="classllvm_1_1APInt.html#ab632770908427bb412c81505b13feada">intersects</a>(~DesiredMask))
+<a name="l01439"></a>01439 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01440"></a>01440
+<a name="l01441"></a>01441 <span class="comment">// Otherwise, the DAG Combiner may have proven that the value coming in is</span>
+<a name="l01442"></a>01442 <span class="comment">// either already zero or is not demanded. Check for known zero input bits.</span>
+<a name="l01443"></a>01443 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> NeededMask = DesiredMask & ~ActualMask;
+<a name="l01444"></a>01444 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#af99f246db9e144fefd7a73b54ef0bbf7">MaskedValueIsZero</a>(LHS, NeededMask))
+<a name="l01445"></a>01445 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01446"></a>01446
+<a name="l01447"></a>01447 <span class="comment">// TODO: check to see if missing bits are just not demanded.</span>
+<a name="l01448"></a>01448
+<a name="l01449"></a>01449 <span class="comment">// Otherwise, this pattern doesn't match.</span>
+<a name="l01450"></a>01450 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01451"></a>01451 }
+<a name="l01452"></a>01452 <span class="comment"></span>
+<a name="l01453"></a>01453 <span class="comment">/// CheckOrMask - The isel is trying to match something like (or X, 255). If</span>
+<a name="l01454"></a>01454 <span class="comment">/// the dag combiner simplified the 255, we still want to match. RHS is the</span>
+<a name="l01455"></a>01455 <span class="comment">/// actual value in the DAG on the RHS of an OR, and DesiredMaskS is the value</span>
+<a name="l01456"></a>01456 <span class="comment">/// specified in the .td file (e.g. 255).</span>
+<a name="l01457"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#a34ef61e9e1f8ff4fa700ad52648e19cf">01457</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a34ef61e9e1f8ff4fa700ad52648e19cf">SelectionDAGISel::CheckOrMask</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a> LHS, <a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> *RHS,
+<a name="l01458"></a>01458 <a class="code" href="classint64__t.html">int64_t</a> DesiredMaskS)<span class="keyword"> const </span>{
+<a name="l01459"></a>01459 <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &ActualMask = RHS-><a class="code" href="classllvm_1_1ConstantSDNode.html#a7951626d3fc3c89c4efee59ed9c3d8bf">getAPIntValue</a>();
+<a name="l01460"></a>01460 <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &DesiredMask = <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(LHS.<a class="code" href="classllvm_1_1SDValue.html#a70aa652293da070dfe5b9fae309d0112">getValueSizeInBits</a>(), DesiredMaskS);
+<a name="l01461"></a>01461
+<a name="l01462"></a>01462 <span class="comment">// If the actual mask exactly matches, success!</span>
+<a name="l01463"></a>01463 <span class="keywordflow">if</span> (ActualMask == DesiredMask)
+<a name="l01464"></a>01464 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01465"></a>01465
+<a name="l01466"></a>01466 <span class="comment">// If the actual AND mask is allowing unallowed bits, this doesn't match.</span>
+<a name="l01467"></a>01467 <span class="keywordflow">if</span> (ActualMask.<a class="code" href="classllvm_1_1APInt.html#ab632770908427bb412c81505b13feada">intersects</a>(~DesiredMask))
+<a name="l01468"></a>01468 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01469"></a>01469
+<a name="l01470"></a>01470 <span class="comment">// Otherwise, the DAG Combiner may have proven that the value coming in is</span>
+<a name="l01471"></a>01471 <span class="comment">// either already zero or is not demanded. Check for known zero input bits.</span>
+<a name="l01472"></a>01472 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> NeededMask = DesiredMask & ~ActualMask;
+<a name="l01473"></a>01473
+<a name="l01474"></a>01474 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZero, KnownOne;
+<a name="l01475"></a>01475 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ad06ca140783fd9f03eed498e8485fc3d">ComputeMaskedBits</a>(LHS, KnownZero, KnownOne);
+<a name="l01476"></a>01476
+<a name="l01477"></a>01477 <span class="comment">// If all the missing bits in the or are already known to be set, match!</span>
+<a name="l01478"></a>01478 <span class="keywordflow">if</span> ((NeededMask & KnownOne) == NeededMask)
+<a name="l01479"></a>01479 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01480"></a>01480
+<a name="l01481"></a>01481 <span class="comment">// TODO: check to see if missing bits are just not demanded.</span>
+<a name="l01482"></a>01482
+<a name="l01483"></a>01483 <span class="comment">// Otherwise, this pattern doesn't match.</span>
+<a name="l01484"></a>01484 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01485"></a>01485 }
+<a name="l01486"></a>01486
+<a name="l01487"></a>01487 <span class="comment"></span>
+<a name="l01488"></a>01488 <span class="comment">/// SelectInlineAsmMemoryOperands - Calls to this are automatically generated</span>
+<a name="l01489"></a>01489 <span class="comment">/// by tblgen. Others should not call it.</span>
+<a name="l01490"></a>01490 <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a93c0fc0673147d4ecb1e4731f9cce4ad">SelectionDAGISel::</a>
+<a name="l01491"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#a93c0fc0673147d4ecb1e4731f9cce4ad">01491</a> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a93c0fc0673147d4ecb1e4731f9cce4ad">SelectInlineAsmMemoryOperands</a>(std::vector<SDValue> &Ops) {
+<a name="l01492"></a>01492 std::vector<SDValue> InOps;
+<a name="l01493"></a>01493 <a class="code" href="namespacellvm.html#a39bdaf6372ed2ef16d951fc0f6d54dd4">std::swap</a>(InOps, Ops);
+<a name="l01494"></a>01494
+<a name="l01495"></a>01495 Ops.push_back(InOps[<a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5a561c23f9fc6d8fe79f70cebf74937b30">InlineAsm::Op_InputChain</a>]); <span class="comment">// 0</span>
+<a name="l01496"></a>01496 Ops.push_back(InOps[<a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5a697a92728413dc065842407e006b87fe">InlineAsm::Op_AsmString</a>]); <span class="comment">// 1</span>
+<a name="l01497"></a>01497 Ops.push_back(InOps[<a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5aa7de3aedc6eaa004e9c6523f21fa4a53">InlineAsm::Op_MDNode</a>]); <span class="comment">// 2, !srcloc</span>
+<a name="l01498"></a>01498 Ops.push_back(InOps[<a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5a5c9183275c4ec573ab0f9ecc202ed26e">InlineAsm::Op_ExtraInfo</a>]); <span class="comment">// 3 (SideEffect, AlignStack)</span>
+<a name="l01499"></a>01499
+<a name="l01500"></a>01500 <span class="keywordtype">unsigned</span> i = <a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5afed51603ce2d64ec9af92ff0154913ca">InlineAsm::Op_FirstOperand</a>, e = InOps.size();
+<a name="l01501"></a>01501 <span class="keywordflow">if</span> (InOps[e-1].getValueType() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>)
+<a name="l01502"></a>01502 --e; <span class="comment">// Don't process a glue operand if it is here.</span>
+<a name="l01503"></a>01503
+<a name="l01504"></a>01504 <span class="keywordflow">while</span> (i != e) {
+<a name="l01505"></a>01505 <span class="keywordtype">unsigned</span> Flags = cast<ConstantSDNode>(InOps[i])->getZExtValue();
+<a name="l01506"></a>01506 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1InlineAsm.html#a20a6d489de78da41c6032c7651f405a6">InlineAsm::isMemKind</a>(Flags)) {
+<a name="l01507"></a>01507 <span class="comment">// Just skip over this operand, copying the operands verbatim.</span>
+<a name="l01508"></a>01508 Ops.insert(Ops.end(), InOps.begin()+i,
+<a name="l01509"></a>01509 InOps.begin()+i+<a class="code" href="classllvm_1_1InlineAsm.html#a4437506c56127755bed59ee1b30e95b9">InlineAsm::getNumOperandRegisters</a>(Flags) + 1);
+<a name="l01510"></a>01510 i += <a class="code" href="classllvm_1_1InlineAsm.html#a4437506c56127755bed59ee1b30e95b9">InlineAsm::getNumOperandRegisters</a>(Flags) + 1;
+<a name="l01511"></a>01511 } <span class="keywordflow">else</span> {
+<a name="l01512"></a>01512 assert(<a class="code" href="classllvm_1_1InlineAsm.html#a4437506c56127755bed59ee1b30e95b9">InlineAsm::getNumOperandRegisters</a>(Flags) == 1 &&
+<a name="l01513"></a>01513 <span class="stringliteral">"Memory operand with multiple values?"</span>);
+<a name="l01514"></a>01514 <span class="comment">// Otherwise, this is a memory operand. Ask the target to select it.</span>
+<a name="l01515"></a>01515 std::vector<SDValue> SelOps;
+<a name="l01516"></a>01516 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#ab063178098b4d0bc5a50a94195c28590">SelectInlineAsmMemoryOperand</a>(InOps[i+1], <span class="charliteral">'m'</span>, SelOps))
+<a name="l01517"></a>01517 <a class="code" href="namespacellvm.html#af9521f126aaffcc4bbe06c554b8b4bc1">report_fatal_error</a>(<span class="stringliteral">"Could not match memory address. Inline asm"</span>
+<a name="l01518"></a>01518 <span class="stringliteral">" failure!"</span>);
+<a name="l01519"></a>01519
+<a name="l01520"></a>01520 <span class="comment">// Add this to the output node.</span>
+<a name="l01521"></a>01521 <span class="keywordtype">unsigned</span> NewFlags =
+<a name="l01522"></a>01522 <a class="code" href="classllvm_1_1InlineAsm.html#a14fae851fdfe0477b8017dfde555e083">InlineAsm::getFlagWord</a>(<a class="code" href="classllvm_1_1InlineAsm.html#a25464ee25a64b02cb48356ca2284dab5ab0e1673a8cfccd30c66a4beaf1dd6368">InlineAsm::Kind_Mem</a>, SelOps.size());
+<a name="l01523"></a>01523 Ops.push_back(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ace5bddfde14abf966790e8438e88d6d2">getTargetConstant</a>(NewFlags, <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca04cca8bc12888d0a7238f55a6c550ad0">MVT::i32</a>));
+<a name="l01524"></a>01524 Ops.insert(Ops.end(), SelOps.begin(), SelOps.end());
+<a name="l01525"></a>01525 i += 2;
+<a name="l01526"></a>01526 }
+<a name="l01527"></a>01527 }
+<a name="l01528"></a>01528
+<a name="l01529"></a>01529 <span class="comment">// Add the glue input back if present.</span>
+<a name="l01530"></a>01530 <span class="keywordflow">if</span> (e != InOps.size())
+<a name="l01531"></a>01531 Ops.push_back(InOps.back());
+<a name="l01532"></a>01532 }
+<a name="l01533"></a>01533 <span class="comment"></span>
+<a name="l01534"></a>01534 <span class="comment">/// findGlueUse - Return use of MVT::Glue value produced by the specified</span>
+<a name="l01535"></a>01535 <span class="comment">/// SDNode.</span>
+<a name="l01536"></a>01536 <span class="comment">///</span>
+<a name="l01537"></a><a class="code" href="SelectionDAGISel_8cpp.html#ad2b055f61a61a64d892bdae575ca6209">01537</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *<a class="code" href="SelectionDAGISel_8cpp.html#ad2b055f61a61a64d892bdae575ca6209">findGlueUse</a>(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l01538"></a>01538 <span class="keywordtype">unsigned</span> FlagResNo = N-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1;
+<a name="l01539"></a>01539 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SDNode_1_1use__iterator.html">SDNode::use_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = N-><a class="code" href="classllvm_1_1SDNode.html#a8810bf428dcf84d48f39c8f5ba9a8c94">use_begin</a>(), E = N-><a class="code" href="classllvm_1_1SDNode.html#aef02f2c1bd12936a80611b134b24a47d">use_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="l01540"></a>01540 <a class="code" href="classllvm_1_1SDUse.html">SDUse</a> &<a class="code" href="classllvm_1_1Use.html">Use</a> = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>.getUse();
+<a name="l01541"></a>01541 <span class="keywordflow">if</span> (Use.<a class="code" href="classllvm_1_1SDUse.html#a837a4522010445da3f5161dcd2b95880" title="getResNo - Convenience function for get().getResNo().">getResNo</a>() == FlagResNo)
+<a name="l01542"></a>01542 <span class="keywordflow">return</span> Use.<a class="code" href="classllvm_1_1SDUse.html#a469c58f8a39344294563f11514c352de" title="getUser - This returns the SDNode that contains this Use.">getUser</a>();
+<a name="l01543"></a>01543 }
+<a name="l01544"></a>01544 <span class="keywordflow">return</span> NULL;
+<a name="l01545"></a>01545 }
+<a name="l01546"></a>01546 <span class="comment"></span>
+<a name="l01547"></a>01547 <span class="comment">/// findNonImmUse - Return true if "Use" is a non-immediate use of "Def".</span>
+<a name="l01548"></a>01548 <span class="comment">/// This function recursively traverses up the operand chain, ignoring</span>
+<a name="l01549"></a>01549 <span class="comment">/// certain nodes.</span>
+<a name="l01550"></a><a class="code" href="SelectionDAGISel_8cpp.html#a3834318b09ff2507fd007a27e734d8d6">01550</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SelectionDAGISel_8cpp.html#a3834318b09ff2507fd007a27e734d8d6">findNonImmUse</a>(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *<a class="code" href="classllvm_1_1Use.html">Use</a>, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a>* <a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a>, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *ImmedUse,
+<a name="l01551"></a>01551 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Root, <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<SDNode*, 16></a> &Visited,
+<a name="l01552"></a>01552 <span class="keywordtype">bool</span> IgnoreChains) {
+<a name="l01553"></a>01553 <span class="comment">// The NodeID's are given uniques ID's where a node ID is guaranteed to be</span>
+<a name="l01554"></a>01554 <span class="comment">// greater than all of its (recursive) operands. If we scan to a point where</span>
+<a name="l01555"></a>01555 <span class="comment">// 'use' is smaller than the node we're scanning for, then we know we will</span>
+<a name="l01556"></a>01556 <span class="comment">// never find it.</span>
+<a name="l01557"></a>01557 <span class="comment">//</span>
+<a name="l01558"></a>01558 <span class="comment">// The Use may be -1 (unassigned) if it is a newly allocated node. This can</span>
+<a name="l01559"></a>01559 <span class="comment">// happen because we scan down to newly selected nodes in the case of glue</span>
+<a name="l01560"></a>01560 <span class="comment">// uses.</span>
+<a name="l01561"></a>01561 <span class="keywordflow">if</span> ((Use-><a class="code" href="classllvm_1_1SDNode.html#a7869db2aca4044d21da972bed855b0d0">getNodeId</a>() < Def-><a class="code" href="classllvm_1_1SDNode.html#a7869db2aca4044d21da972bed855b0d0">getNodeId</a>() && Use-><a class="code" href="classllvm_1_1SDNode.html#a7869db2aca4044d21da972bed855b0d0">getNodeId</a>() != -1))
+<a name="l01562"></a>01562 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01563"></a>01563
+<a name="l01564"></a>01564 <span class="comment">// Don't revisit nodes if we already scanned it and didn't fail, we know we</span>
+<a name="l01565"></a>01565 <span class="comment">// won't fail if we scan it again.</span>
+<a name="l01566"></a>01566 <span class="keywordflow">if</span> (!Visited.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(Use))
+<a name="l01567"></a>01567 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01568"></a>01568
+<a name="l01569"></a>01569 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Use-><a class="code" href="classllvm_1_1SDNode.html#abc5c2f1d47a517373030133c6a102106">getNumOperands</a>(); i != e; ++i) {
+<a name="l01570"></a>01570 <span class="comment">// Ignore chain uses, they are validated by HandleMergeInputChains.</span>
+<a name="l01571"></a>01571 <span class="keywordflow">if</span> (Use-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(i).<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a> && IgnoreChains)
+<a name="l01572"></a>01572 <span class="keywordflow">continue</span>;
+<a name="l01573"></a>01573
+<a name="l01574"></a>01574 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N = Use-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(i).<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>();
+<a name="l01575"></a>01575 <span class="keywordflow">if</span> (N == Def) {
+<a name="l01576"></a>01576 <span class="keywordflow">if</span> (Use == ImmedUse || Use == Root)
+<a name="l01577"></a>01577 <span class="keywordflow">continue</span>; <span class="comment">// We are not looking for immediate use.</span>
+<a name="l01578"></a>01578 assert(N != Root);
+<a name="l01579"></a>01579 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01580"></a>01580 }
+<a name="l01581"></a>01581
+<a name="l01582"></a>01582 <span class="comment">// Traverse up the operand chain.</span>
+<a name="l01583"></a>01583 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#a3834318b09ff2507fd007a27e734d8d6">findNonImmUse</a>(N, Def, ImmedUse, Root, Visited, IgnoreChains))
+<a name="l01584"></a>01584 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01585"></a>01585 }
+<a name="l01586"></a>01586 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01587"></a>01587 }
+<a name="l01588"></a>01588 <span class="comment"></span>
+<a name="l01589"></a>01589 <span class="comment">/// IsProfitableToFold - Returns true if it's profitable to fold the specific</span>
+<a name="l01590"></a>01590 <span class="comment">/// operand node N of U during instruction selection that starts at Root.</span>
+<a name="l01591"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#a7c45584212fcb230d5bcee0754b3ce64">01591</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a7c45584212fcb230d5bcee0754b3ce64">SelectionDAGISel::IsProfitableToFold</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *U,
+<a name="l01592"></a>01592 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Root)<span class="keyword"> const </span>{
+<a name="l01593"></a>01593 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a> == <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01594"></a>01594 <span class="keywordflow">return</span> N.<a class="code" href="classllvm_1_1SDValue.html#a97b0f24f3e52f030830fca6fbfcbd37d">hasOneUse</a>();
+<a name="l01595"></a>01595 }
+<a name="l01596"></a>01596 <span class="comment"></span>
+<a name="l01597"></a>01597 <span class="comment">/// IsLegalToFold - Returns true if the specific operand node N of</span>
+<a name="l01598"></a>01598 <span class="comment">/// U can be folded during instruction selection that starts at Root.</span>
+<a name="l01599"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#afde899bbadc9622ad6108694d44d7f36">01599</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#afde899bbadc9622ad6108694d44d7f36">SelectionDAGISel::IsLegalToFold</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *U, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Root,
+<a name="l01600"></a>01600 <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4">CodeGenOpt::Level</a> OptLevel,
+<a name="l01601"></a>01601 <span class="keywordtype">bool</span> IgnoreChains) {
+<a name="l01602"></a>01602 <span class="keywordflow">if</span> (OptLevel == <a class="code" href="namespacellvm_1_1CodeGenOpt.html#a411055ea15209051c2370bbf655ec8d4a451bbac85aff02d070be3c17a6bef928">CodeGenOpt::None</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01603"></a>01603
+<a name="l01604"></a>01604 <span class="comment">// If Root use can somehow reach N through a path that that doesn't contain</span>
+<a name="l01605"></a>01605 <span class="comment">// U then folding N would create a cycle. e.g. In the following</span>
+<a name="l01606"></a>01606 <span class="comment">// diagram, Root can reach N through X. If N is folded into into Root, then</span>
+<a name="l01607"></a>01607 <span class="comment">// X is both a predecessor and a successor of U.</span>
+<a name="l01608"></a>01608 <span class="comment">//</span>
+<a name="l01609"></a>01609 <span class="comment">// [N*] //</span>
+<a name="l01610"></a>01610 <span class="comment">// ^ ^ //</span>
+<a name="l01611"></a>01611 <span class="comment">// / \ //</span>
+<a name="l01612"></a>01612 <span class="comment">// [U*] [X]? //</span>
+<a name="l01613"></a>01613 <span class="comment">// ^ ^ //</span>
+<a name="l01614"></a>01614 <span class="comment">// \ / //</span>
+<a name="l01615"></a>01615 <span class="comment">// \ / //</span>
+<a name="l01616"></a>01616 <span class="comment">// [Root*] //</span>
+<a name="l01617"></a>01617 <span class="comment">//</span>
+<a name="l01618"></a>01618 <span class="comment">// * indicates nodes to be folded together.</span>
+<a name="l01619"></a>01619 <span class="comment">//</span>
+<a name="l01620"></a>01620 <span class="comment">// If Root produces glue, then it gets (even more) interesting. Since it</span>
+<a name="l01621"></a>01621 <span class="comment">// will be "glued" together with its glue use in the scheduler, we need to</span>
+<a name="l01622"></a>01622 <span class="comment">// check if it might reach N.</span>
+<a name="l01623"></a>01623 <span class="comment">//</span>
+<a name="l01624"></a>01624 <span class="comment">// [N*] //</span>
+<a name="l01625"></a>01625 <span class="comment">// ^ ^ //</span>
+<a name="l01626"></a>01626 <span class="comment">// / \ //</span>
+<a name="l01627"></a>01627 <span class="comment">// [U*] [X]? //</span>
+<a name="l01628"></a>01628 <span class="comment">// ^ ^ //</span>
+<a name="l01629"></a>01629 <span class="comment">// \ \ //</span>
+<a name="l01630"></a>01630 <span class="comment">// \ | //</span>
+<a name="l01631"></a>01631 <span class="comment">// [Root*] | //</span>
+<a name="l01632"></a>01632 <span class="comment">// ^ | //</span>
+<a name="l01633"></a>01633 <span class="comment">// f | //</span>
+<a name="l01634"></a>01634 <span class="comment">// | / //</span>
+<a name="l01635"></a>01635 <span class="comment">// [Y] / //</span>
+<a name="l01636"></a>01636 <span class="comment">// ^ / //</span>
+<a name="l01637"></a>01637 <span class="comment">// f / //</span>
+<a name="l01638"></a>01638 <span class="comment">// | / //</span>
+<a name="l01639"></a>01639 <span class="comment">// [GU] //</span>
+<a name="l01640"></a>01640 <span class="comment">//</span>
+<a name="l01641"></a>01641 <span class="comment">// If GU (glue use) indirectly reaches N (the load), and Root folds N</span>
+<a name="l01642"></a>01642 <span class="comment">// (call it Fold), then X is a predecessor of GU and a successor of</span>
+<a name="l01643"></a>01643 <span class="comment">// Fold. But since Fold and GU are glued together, this will create</span>
+<a name="l01644"></a>01644 <span class="comment">// a cycle in the scheduling graph.</span>
+<a name="l01645"></a>01645
+<a name="l01646"></a>01646 <span class="comment">// If the node has glue, walk down the graph to the "lowest" node in the</span>
+<a name="l01647"></a>01647 <span class="comment">// glueged set.</span>
+<a name="l01648"></a>01648 <a class="code" href="structllvm_1_1EVT.html">EVT</a> VT = Root-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(Root-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1);
+<a name="l01649"></a>01649 <span class="keywordflow">while</span> (VT == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>) {
+<a name="l01650"></a>01650 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *GU = <a class="code" href="SelectionDAGISel_8cpp.html#ad2b055f61a61a64d892bdae575ca6209">findGlueUse</a>(Root);
+<a name="l01651"></a>01651 <span class="keywordflow">if</span> (GU == NULL)
+<a name="l01652"></a>01652 <span class="keywordflow">break</span>;
+<a name="l01653"></a>01653 Root = GU;
+<a name="l01654"></a>01654 VT = Root-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(Root-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1);
+<a name="l01655"></a>01655
+<a name="l01656"></a>01656 <span class="comment">// If our query node has a glue result with a use, we've walked up it. If</span>
+<a name="l01657"></a>01657 <span class="comment">// the user (which has already been selected) has a chain or indirectly uses</span>
+<a name="l01658"></a>01658 <span class="comment">// the chain, our WalkChainUsers predicate will not consider it. Because of</span>
+<a name="l01659"></a>01659 <span class="comment">// this, we cannot ignore chains in this predicate.</span>
+<a name="l01660"></a>01660 IgnoreChains = <span class="keyword">false</span>;
+<a name="l01661"></a>01661 }
+<a name="l01662"></a>01662
+<a name="l01663"></a>01663
+<a name="l01664"></a>01664 <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<SDNode*, 16></a> Visited;
+<a name="l01665"></a>01665 <span class="keywordflow">return</span> !<a class="code" href="SelectionDAGISel_8cpp.html#a3834318b09ff2507fd007a27e734d8d6">findNonImmUse</a>(Root, N.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>(), U, Root, Visited, IgnoreChains);
+<a name="l01666"></a>01666 }
+<a name="l01667"></a>01667
+<a name="l01668"></a>01668 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *SelectionDAGISel::Select_INLINEASM(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l01669"></a>01669 std::vector<SDValue> Ops(N-><a class="code" href="classllvm_1_1SDNode.html#a20f382e841761654032bf8b4712e805f">op_begin</a>(), N-><a class="code" href="classllvm_1_1SDNode.html#a992906781101abb22f6e4d16622bbe24">op_end</a>());
+<a name="l01670"></a>01670 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a93c0fc0673147d4ecb1e4731f9cce4ad">SelectInlineAsmMemoryOperands</a>(Ops);
+<a name="l01671"></a>01671
+<a name="l01672"></a>01672 std::vector<EVT> VTs;
+<a name="l01673"></a>01673 VTs.push_back(<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>);
+<a name="l01674"></a>01674 VTs.push_back(<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>);
+<a name="l01675"></a>01675 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> New = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac65c8a6cfb8608d6722c6df997870780">getNode</a>(<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ae35d57f3c020672748fcc95607348986">ISD::INLINEASM</a>, N-><a class="code" href="classllvm_1_1SDNode.html#a630d6793e4444e4996dfa80f1fce18c8" title="getDebugLoc - Return the source location info.">getDebugLoc</a>(),
+<a name="l01676"></a>01676 VTs, &Ops[0], Ops.size());
+<a name="l01677"></a>01677 New->setNodeId(-1);
+<a name="l01678"></a>01678 <span class="keywordflow">return</span> New.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>();
+<a name="l01679"></a>01679 }
+<a name="l01680"></a>01680
+<a name="l01681"></a>01681 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *SelectionDAGISel::Select_UNDEF(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l01682"></a>01682 <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a59d2ddbf50166263a9a5bdbad559fad5">SelectNodeTo</a>(N, <a class="code" href="namespacellvm_1_1TargetOpcode.html#aa2b3629c9319f86eee5a2c0e8c75ebfaa5a91c23866687baf221ce86ff6fde01f" title="IMPLICIT_DEF - This is the MachineInstr-level equivalent of undef.">TargetOpcode::IMPLICIT_DEF</a>,N-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(0));
+<a name="l01683"></a>01683 }
+<a name="l01684"></a>01684 <span class="comment"></span>
+<a name="l01685"></a>01685 <span class="comment">/// GetVBR - decode a vbr encoding whose top bit is set.</span>
+<a name="l01686"></a>01686 <span class="comment"></span><a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> uint64_t
+<a name="l01687"></a><a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406">01687</a> <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(uint64_t Val, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &Idx) {
+<a name="l01688"></a>01688 assert(Val >= 128 && <span class="stringliteral">"Not a VBR"</span>);
+<a name="l01689"></a>01689 Val &= 127; <span class="comment">// Remove first vbr bit.</span>
+<a name="l01690"></a>01690
+<a name="l01691"></a>01691 <span class="keywordtype">unsigned</span> Shift = 7;
+<a name="l01692"></a>01692 uint64_t NextBits;
+<a name="l01693"></a>01693 <span class="keywordflow">do</span> {
+<a name="l01694"></a>01694 NextBits = MatcherTable[Idx++];
+<a name="l01695"></a>01695 Val |= (NextBits&127) << Shift;
+<a name="l01696"></a>01696 Shift += 7;
+<a name="l01697"></a>01697 } <span class="keywordflow">while</span> (NextBits & 128);
+<a name="l01698"></a>01698
+<a name="l01699"></a>01699 <span class="keywordflow">return</span> Val;
+<a name="l01700"></a>01700 }
+<a name="l01701"></a>01701
+<a name="l01702"></a>01702 <span class="comment"></span>
+<a name="l01703"></a>01703 <span class="comment">/// UpdateChainsAndGlue - When a match is complete, this method updates uses of</span>
+<a name="l01704"></a>01704 <span class="comment">/// interior glue and chain results to use the new glue and chain results.</span>
+<a name="l01705"></a>01705 <span class="comment"></span><span class="keywordtype">void</span> SelectionDAGISel::
+<a name="l01706"></a>01706 UpdateChainsAndGlue(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *NodeToMatch, <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> InputChain,
+<a name="l01707"></a>01707 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SDNode*></a> &ChainNodesMatched,
+<a name="l01708"></a>01708 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> InputGlue,
+<a name="l01709"></a>01709 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SDNode*></a> &GlueResultNodesMatched,
+<a name="l01710"></a>01710 <span class="keywordtype">bool</span> isMorphNodeTo) {
+<a name="l01711"></a>01711 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDNode*, 4></a> NowDeadNodes;
+<a name="l01712"></a>01712
+<a name="l01713"></a>01713 <span class="comment">// Now that all the normal results are replaced, we replace the chain and</span>
+<a name="l01714"></a>01714 <span class="comment">// glue results if present.</span>
+<a name="l01715"></a>01715 <span class="keywordflow">if</span> (!ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>()) {
+<a name="l01716"></a>01716 assert(InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() != 0 &&
+<a name="l01717"></a>01717 <span class="stringliteral">"Matched input chains but didn't produce a chain"</span>);
+<a name="l01718"></a>01718 <span class="comment">// Loop over all of the nodes we matched that produced a chain result.</span>
+<a name="l01719"></a>01719 <span class="comment">// Replace all the chain results with the final chain we ended up with.</span>
+<a name="l01720"></a>01720 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l01721"></a>01721 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *ChainNode = ChainNodesMatched[i];
+<a name="l01722"></a>01722
+<a name="l01723"></a>01723 <span class="comment">// If this node was already deleted, don't look at it.</span>
+<a name="l01724"></a>01724 <span class="keywordflow">if</span> (ChainNode-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a062083eb3ff8c441c73d3bf42ca09bba">ISD::DELETED_NODE</a>)
+<a name="l01725"></a>01725 <span class="keywordflow">continue</span>;
+<a name="l01726"></a>01726
+<a name="l01727"></a>01727 <span class="comment">// Don't replace the results of the root node if we're doing a</span>
+<a name="l01728"></a>01728 <span class="comment">// MorphNodeTo.</span>
+<a name="l01729"></a>01729 <span class="keywordflow">if</span> (ChainNode == NodeToMatch && isMorphNodeTo)
+<a name="l01730"></a>01730 <span class="keywordflow">continue</span>;
+<a name="l01731"></a>01731
+<a name="l01732"></a>01732 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> ChainVal = <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(ChainNode, ChainNode-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1);
+<a name="l01733"></a>01733 <span class="keywordflow">if</span> (ChainVal.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>)
+<a name="l01734"></a>01734 ChainVal = ChainVal.<a class="code" href="classllvm_1_1SDValue.html#a040481b9bda32faa6b1435532405d88f">getValue</a>(ChainVal->getNumValues()-2);
+<a name="l01735"></a>01735 assert(ChainVal.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a> && <span class="stringliteral">"Not a chain?"</span>);
+<a name="l01736"></a>01736 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(ChainVal, InputChain);
+<a name="l01737"></a>01737
+<a name="l01738"></a>01738 <span class="comment">// If the node became dead and we haven't already seen it, delete it.</span>
+<a name="l01739"></a>01739 <span class="keywordflow">if</span> (ChainNode-><a class="code" href="classllvm_1_1SDNode.html#afc071edeb7e2007d000374eba843f76a">use_empty</a>() &&
+<a name="l01740"></a>01740 !std::count(NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), ChainNode))
+<a name="l01741"></a>01741 NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(ChainNode);
+<a name="l01742"></a>01742 }
+<a name="l01743"></a>01743 }
+<a name="l01744"></a>01744
+<a name="l01745"></a>01745 <span class="comment">// If the result produces glue, update any glue results in the matched</span>
+<a name="l01746"></a>01746 <span class="comment">// pattern with the glue result.</span>
+<a name="l01747"></a>01747 <span class="keywordflow">if</span> (InputGlue.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() != 0) {
+<a name="l01748"></a>01748 <span class="comment">// Handle any interior nodes explicitly marked.</span>
+<a name="l01749"></a>01749 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = GlueResultNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l01750"></a>01750 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *FRN = GlueResultNodesMatched[i];
+<a name="l01751"></a>01751
+<a name="l01752"></a>01752 <span class="comment">// If this node was already deleted, don't look at it.</span>
+<a name="l01753"></a>01753 <span class="keywordflow">if</span> (FRN-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a062083eb3ff8c441c73d3bf42ca09bba">ISD::DELETED_NODE</a>)
+<a name="l01754"></a>01754 <span class="keywordflow">continue</span>;
+<a name="l01755"></a>01755
+<a name="l01756"></a>01756 assert(FRN-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(FRN-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a> &&
+<a name="l01757"></a>01757 <span class="stringliteral">"Doesn't have a glue result"</span>);
+<a name="l01758"></a>01758 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(FRN, FRN-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1),
+<a name="l01759"></a>01759 InputGlue);
+<a name="l01760"></a>01760
+<a name="l01761"></a>01761 <span class="comment">// If the node became dead and we haven't already seen it, delete it.</span>
+<a name="l01762"></a>01762 <span class="keywordflow">if</span> (FRN-><a class="code" href="classllvm_1_1SDNode.html#afc071edeb7e2007d000374eba843f76a">use_empty</a>() &&
+<a name="l01763"></a>01763 !std::count(NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), FRN))
+<a name="l01764"></a>01764 NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(FRN);
+<a name="l01765"></a>01765 }
+<a name="l01766"></a>01766 }
+<a name="l01767"></a>01767
+<a name="l01768"></a>01768 <span class="keywordflow">if</span> (!NowDeadNodes.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>())
+<a name="l01769"></a>01769 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a92c8c043c2a2d8db5b6cf9767394b747">RemoveDeadNodes</a>(NowDeadNodes);
+<a name="l01770"></a>01770
+<a name="l01771"></a>01771 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"ISEL: Match complete!\n"</span>);
+<a name="l01772"></a>01772 }
+<a name="l01773"></a>01773
+<a name="l01774"></a><a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455ee">01774</a> <span class="keyword">enum</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455ee">ChainResult</a> {
+<a name="l01775"></a><a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea0a6c2ab7f55c86f88acc60dcc525ce1a">01775</a> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea0a6c2ab7f55c86f88acc60dcc525ce1a">CR_Simple</a>,
+<a name="l01776"></a><a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">01776</a> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">CR_InducesCycle</a>,
+<a name="l01777"></a><a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea9bd57bfa2b960ba18a1e68e1b8af21ab">01777</a> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea9bd57bfa2b960ba18a1e68e1b8af21ab">CR_LeadsToInteriorNode</a>
+<a name="l01778"></a>01778 };
+<a name="l01779"></a>01779 <span class="comment"></span>
+<a name="l01780"></a>01780 <span class="comment">/// WalkChainUsers - Walk down the users of the specified chained node that is</span>
+<a name="l01781"></a>01781 <span class="comment">/// part of the pattern we're matching, looking at all of the users we find.</span>
+<a name="l01782"></a>01782 <span class="comment">/// This determines whether something is an interior node, whether we have a</span>
+<a name="l01783"></a>01783 <span class="comment">/// non-pattern node in between two pattern nodes (which prevent folding because</span>
+<a name="l01784"></a>01784 <span class="comment">/// it would induce a cycle) and whether we have a TokenFactor node sandwiched</span>
+<a name="l01785"></a>01785 <span class="comment">/// between pattern nodes (in which case the TF becomes part of the pattern).</span>
+<a name="l01786"></a>01786 <span class="comment">///</span>
+<a name="l01787"></a>01787 <span class="comment">/// The walk we do here is guaranteed to be small because we quickly get down to</span>
+<a name="l01788"></a>01788 <span class="comment">/// already selected nodes "below" us.</span>
+<a name="l01789"></a>01789 <span class="comment"></span><span class="keyword">static</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455ee">ChainResult</a>
+<a name="l01790"></a><a class="code" href="SelectionDAGISel_8cpp.html#af3cb0eaaeb4f774d7dcb68f956ec78ee">01790</a> <a class="code" href="SelectionDAGISel_8cpp.html#af3cb0eaaeb4f774d7dcb68f956ec78ee">WalkChainUsers</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *ChainedNode,
+<a name="l01791"></a>01791 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SDNode*></a> &ChainedNodesInPattern,
+<a name="l01792"></a>01792 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SDNode*></a> &InteriorChainedNodes) {
+<a name="l01793"></a>01793 <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455ee">ChainResult</a> Result = <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea0a6c2ab7f55c86f88acc60dcc525ce1a">CR_Simple</a>;
+<a name="l01794"></a>01794
+<a name="l01795"></a>01795 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SDNode_1_1use__iterator.html">SDNode::use_iterator</a> UI = ChainedNode-><a class="code" href="classllvm_1_1SDNode.html#a8810bf428dcf84d48f39c8f5ba9a8c94">use_begin</a>(),
+<a name="l01796"></a>01796 E = ChainedNode-><a class="code" href="classllvm_1_1SDNode.html#aef02f2c1bd12936a80611b134b24a47d">use_end</a>(); UI != E; ++UI) {
+<a name="l01797"></a>01797 <span class="comment">// Make sure the use is of the chain, not some other value we produce.</span>
+<a name="l01798"></a>01798 <span class="keywordflow">if</span> (UI.getUse().getValueType() != <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>) <span class="keywordflow">continue</span>;
+<a name="l01799"></a>01799
+<a name="l01800"></a>01800 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *User = *UI;
+<a name="l01801"></a>01801
+<a name="l01802"></a>01802 <span class="comment">// If we see an already-selected machine node, then we've gone beyond the</span>
+<a name="l01803"></a>01803 <span class="comment">// pattern that we're selecting down into the already selected chunk of the</span>
+<a name="l01804"></a>01804 <span class="comment">// DAG.</span>
+<a name="l01805"></a>01805 <span class="keywordflow">if</span> (User-><a class="code" href="classllvm_1_1SDNode.html#a7ef138746b04be6d07091b9ba49d74da">isMachineOpcode</a>() ||
+<a name="l01806"></a>01806 User-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ab508f11d38b4596451c6333f7510daa3" title="HANDLENODE node - Used as a handle for various purposes.">ISD::HANDLENODE</a>) <span class="comment">// Root of the graph.</span>
+<a name="l01807"></a>01807 <span class="keywordflow">continue</span>;
+<a name="l01808"></a>01808
+<a name="l01809"></a>01809 <span class="keywordtype">unsigned</span> UserOpcode = User-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>();
+<a name="l01810"></a>01810 <span class="keywordflow">if</span> (UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a93bc27ca4d9e211c54b0d9efb660f080">ISD::CopyToReg</a> ||
+<a name="l01811"></a>01811 UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a84c47705bcf7271413738ae8bf3871e6">ISD::CopyFromReg</a> ||
+<a name="l01812"></a>01812 UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ae35d57f3c020672748fcc95607348986">ISD::INLINEASM</a> ||
+<a name="l01813"></a>01813 UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a4c1f7e0dc3af92b9cfd0d5d11231ddc1">ISD::EH_LABEL</a> ||
+<a name="l01814"></a>01814 UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aada0b926e7ebc2bc55d158d4c37bdcca">ISD::LIFETIME_START</a> ||
+<a name="l01815"></a>01815 UserOpcode == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ab49301b20458a7f312a0919e3c8abdb2">ISD::LIFETIME_END</a>) {
+<a name="l01816"></a>01816 <span class="comment">// If their node ID got reset to -1 then they've already been selected.</span>
+<a name="l01817"></a>01817 <span class="comment">// Treat them like a MachineOpcode.</span>
+<a name="l01818"></a>01818 <span class="keywordflow">if</span> (User-><a class="code" href="classllvm_1_1SDNode.html#a7869db2aca4044d21da972bed855b0d0">getNodeId</a>() == -1)
+<a name="l01819"></a>01819 <span class="keywordflow">continue</span>;
+<a name="l01820"></a>01820 }
+<a name="l01821"></a>01821
+<a name="l01822"></a>01822 <span class="comment">// If we have a TokenFactor, we handle it specially.</span>
+<a name="l01823"></a>01823 <span class="keywordflow">if</span> (User-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ad469508535ce2082a1ab1f0e429187b8">ISD::TokenFactor</a>) {
+<a name="l01824"></a>01824 <span class="comment">// If the node isn't a token factor and isn't part of our pattern, then it</span>
+<a name="l01825"></a>01825 <span class="comment">// must be a random chained node in between two nodes we're selecting.</span>
+<a name="l01826"></a>01826 <span class="comment">// This happens when we have something like:</span>
+<a name="l01827"></a>01827 <span class="comment">// x = load ptr</span>
+<a name="l01828"></a>01828 <span class="comment">// call</span>
+<a name="l01829"></a>01829 <span class="comment">// y = x+4</span>
+<a name="l01830"></a>01830 <span class="comment">// store y -> ptr</span>
+<a name="l01831"></a>01831 <span class="comment">// Because we structurally match the load/store as a read/modify/write,</span>
+<a name="l01832"></a>01832 <span class="comment">// but the call is chained between them. We cannot fold in this case</span>
+<a name="l01833"></a>01833 <span class="comment">// because it would induce a cycle in the graph.</span>
+<a name="l01834"></a>01834 <span class="keywordflow">if</span> (!std::count(ChainedNodesInPattern.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(),
+<a name="l01835"></a>01835 ChainedNodesInPattern.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(), User))
+<a name="l01836"></a>01836 <span class="keywordflow">return</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">CR_InducesCycle</a>;
+<a name="l01837"></a>01837
+<a name="l01838"></a>01838 <span class="comment">// Otherwise we found a node that is part of our pattern. For example in:</span>
+<a name="l01839"></a>01839 <span class="comment">// x = load ptr</span>
+<a name="l01840"></a>01840 <span class="comment">// y = x+4</span>
+<a name="l01841"></a>01841 <span class="comment">// store y -> ptr</span>
+<a name="l01842"></a>01842 <span class="comment">// This would happen when we're scanning down from the load and see the</span>
+<a name="l01843"></a>01843 <span class="comment">// store as a user. Record that there is a use of ChainedNode that is</span>
+<a name="l01844"></a>01844 <span class="comment">// part of the pattern and keep scanning uses.</span>
+<a name="l01845"></a>01845 Result = <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea9bd57bfa2b960ba18a1e68e1b8af21ab">CR_LeadsToInteriorNode</a>;
+<a name="l01846"></a>01846 InteriorChainedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(User);
+<a name="l01847"></a>01847 <span class="keywordflow">continue</span>;
+<a name="l01848"></a>01848 }
+<a name="l01849"></a>01849
+<a name="l01850"></a>01850 <span class="comment">// If we found a TokenFactor, there are two cases to consider: first if the</span>
+<a name="l01851"></a>01851 <span class="comment">// TokenFactor is just hanging "below" the pattern we're matching (i.e. no</span>
+<a name="l01852"></a>01852 <span class="comment">// uses of the TF are in our pattern) we just want to ignore it. Second,</span>
+<a name="l01853"></a>01853 <span class="comment">// the TokenFactor can be sandwiched in between two chained nodes, like so:</span>
+<a name="l01854"></a>01854 <span class="comment">// [Load chain]</span>
+<a name="l01855"></a>01855 <span class="comment">// ^</span>
+<a name="l01856"></a>01856 <span class="comment">// |</span>
+<a name="l01857"></a>01857 <span class="comment">// [Load]</span>
+<a name="l01858"></a>01858 <span class="comment">// ^ ^</span>
+<a name="l01859"></a>01859 <span class="comment">// | \ DAG's like cheese</span>
+<a name="l01860"></a>01860 <span class="comment">// / \ do you?</span>
+<a name="l01861"></a>01861 <span class="comment">// / |</span>
+<a name="l01862"></a>01862 <span class="comment">// [TokenFactor] [Op]</span>
+<a name="l01863"></a>01863 <span class="comment">// ^ ^</span>
+<a name="l01864"></a>01864 <span class="comment">// | |</span>
+<a name="l01865"></a>01865 <span class="comment">// \ /</span>
+<a name="l01866"></a>01866 <span class="comment">// \ /</span>
+<a name="l01867"></a>01867 <span class="comment">// [Store]</span>
+<a name="l01868"></a>01868 <span class="comment">//</span>
+<a name="l01869"></a>01869 <span class="comment">// In this case, the TokenFactor becomes part of our match and we rewrite it</span>
+<a name="l01870"></a>01870 <span class="comment">// as a new TokenFactor.</span>
+<a name="l01871"></a>01871 <span class="comment">//</span>
+<a name="l01872"></a>01872 <span class="comment">// To distinguish these two cases, do a recursive walk down the uses.</span>
+<a name="l01873"></a>01873 <span class="keywordflow">switch</span> (<a class="code" href="SelectionDAGISel_8cpp.html#af3cb0eaaeb4f774d7dcb68f956ec78ee">WalkChainUsers</a>(User, ChainedNodesInPattern, InteriorChainedNodes)) {
+<a name="l01874"></a>01874 <span class="keywordflow">case</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea0a6c2ab7f55c86f88acc60dcc525ce1a">CR_Simple</a>:
+<a name="l01875"></a>01875 <span class="comment">// If the uses of the TokenFactor are just already-selected nodes, ignore</span>
+<a name="l01876"></a>01876 <span class="comment">// it, it is "below" our pattern.</span>
+<a name="l01877"></a>01877 <span class="keywordflow">continue</span>;
+<a name="l01878"></a>01878 <span class="keywordflow">case</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">CR_InducesCycle</a>:
+<a name="l01879"></a>01879 <span class="comment">// If the uses of the TokenFactor lead to nodes that are not part of our</span>
+<a name="l01880"></a>01880 <span class="comment">// pattern that are not selected, folding would turn this into a cycle,</span>
+<a name="l01881"></a>01881 <span class="comment">// bail out now.</span>
+<a name="l01882"></a>01882 <span class="keywordflow">return</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">CR_InducesCycle</a>;
+<a name="l01883"></a>01883 <span class="keywordflow">case</span> <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea9bd57bfa2b960ba18a1e68e1b8af21ab">CR_LeadsToInteriorNode</a>:
+<a name="l01884"></a>01884 <span class="keywordflow">break</span>; <span class="comment">// Otherwise, keep processing.</span>
+<a name="l01885"></a>01885 }
+<a name="l01886"></a>01886
+<a name="l01887"></a>01887 <span class="comment">// Okay, we know we're in the interesting interior case. The TokenFactor</span>
+<a name="l01888"></a>01888 <span class="comment">// is now going to be considered part of the pattern so that we rewrite its</span>
+<a name="l01889"></a>01889 <span class="comment">// uses (it may have uses that are not part of the pattern) with the</span>
+<a name="l01890"></a>01890 <span class="comment">// ultimate chain result of the generated code. We will also add its chain</span>
+<a name="l01891"></a>01891 <span class="comment">// inputs as inputs to the ultimate TokenFactor we create.</span>
+<a name="l01892"></a>01892 Result = <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eea9bd57bfa2b960ba18a1e68e1b8af21ab">CR_LeadsToInteriorNode</a>;
+<a name="l01893"></a>01893 ChainedNodesInPattern.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(User);
+<a name="l01894"></a>01894 InteriorChainedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(User);
+<a name="l01895"></a>01895 <span class="keywordflow">continue</span>;
+<a name="l01896"></a>01896 }
+<a name="l01897"></a>01897
+<a name="l01898"></a>01898 <span class="keywordflow">return</span> Result;
+<a name="l01899"></a>01899 }
+<a name="l01900"></a>01900 <span class="comment"></span>
+<a name="l01901"></a>01901 <span class="comment">/// HandleMergeInputChains - This implements the OPC_EmitMergeInputChains</span>
+<a name="l01902"></a>01902 <span class="comment">/// operation for when the pattern matched at least one node with a chains. The</span>
+<a name="l01903"></a>01903 <span class="comment">/// input vector contains a list of all of the chained nodes that we match. We</span>
+<a name="l01904"></a>01904 <span class="comment">/// must determine if this is a valid thing to cover (i.e. matching it won't</span>
+<a name="l01905"></a>01905 <span class="comment">/// induce cycles in the DAG) and if so, creating a TokenFactor node. that will</span>
+<a name="l01906"></a>01906 <span class="comment">/// be used as the input node chain for the generated nodes.</span>
+<a name="l01907"></a>01907 <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>
+<a name="l01908"></a><a class="code" href="SelectionDAGISel_8cpp.html#aeb0bc3fb3008d1f61c5a1adb0b901c82">01908</a> <a class="code" href="SelectionDAGISel_8cpp.html#aeb0bc3fb3008d1f61c5a1adb0b901c82">HandleMergeInputChains</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SDNode*></a> &ChainNodesMatched,
+<a name="l01909"></a>01909 <a class="code" href="classllvm_1_1SelectionDAG.html">SelectionDAG</a> *CurDAG) {
+<a name="l01910"></a>01910 <span class="comment">// Walk all of the chained nodes we've matched, recursively scanning down the</span>
+<a name="l01911"></a>01911 <span class="comment">// users of the chain result. This adds any TokenFactor nodes that are caught</span>
+<a name="l01912"></a>01912 <span class="comment">// in between chained nodes to the chained and interior nodes list.</span>
+<a name="l01913"></a>01913 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDNode*, 3></a> InteriorChainedNodes;
+<a name="l01914"></a>01914 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l01915"></a>01915 <span class="keywordflow">if</span> (<a class="code" href="SelectionDAGISel_8cpp.html#af3cb0eaaeb4f774d7dcb68f956ec78ee">WalkChainUsers</a>(ChainNodesMatched[i], ChainNodesMatched,
+<a name="l01916"></a>01916 InteriorChainedNodes) == <a class="code" href="SelectionDAGISel_8cpp.html#ac6cd0b51896db5749a4e980d3ff455eeaa1b1f84cfc5d9f183da5247e66b0dbf7">CR_InducesCycle</a>)
+<a name="l01917"></a>01917 <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(); <span class="comment">// Would induce a cycle.</span>
+<a name="l01918"></a>01918 }
+<a name="l01919"></a>01919
+<a name="l01920"></a>01920 <span class="comment">// Okay, we have walked all the matched nodes and collected TokenFactor nodes</span>
+<a name="l01921"></a>01921 <span class="comment">// that we are interested in. Form our input TokenFactor node.</span>
+<a name="l01922"></a>01922 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDValue, 3></a> InputChains;
+<a name="l01923"></a>01923 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l01924"></a>01924 <span class="comment">// Add the input chain of this node to the InputChains list (which will be</span>
+<a name="l01925"></a>01925 <span class="comment">// the operands of the generated TokenFactor) if it's not an interior node.</span>
+<a name="l01926"></a>01926 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N = ChainNodesMatched[i];
+<a name="l01927"></a>01927 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ad469508535ce2082a1ab1f0e429187b8">ISD::TokenFactor</a>) {
+<a name="l01928"></a>01928 <span class="keywordflow">if</span> (std::count(InteriorChainedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(),InteriorChainedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(),N))
+<a name="l01929"></a>01929 <span class="keywordflow">continue</span>;
+<a name="l01930"></a>01930
+<a name="l01931"></a>01931 <span class="comment">// Otherwise, add the input chain.</span>
+<a name="l01932"></a>01932 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> InChain = ChainNodesMatched[i]->getOperand(0);
+<a name="l01933"></a>01933 assert(InChain.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a> && <span class="stringliteral">"Not a chain"</span>);
+<a name="l01934"></a>01934 InputChains.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(InChain);
+<a name="l01935"></a>01935 <span class="keywordflow">continue</span>;
+<a name="l01936"></a>01936 }
+<a name="l01937"></a>01937
+<a name="l01938"></a>01938 <span class="comment">// If we have a token factor, we want to add all inputs of the token factor</span>
+<a name="l01939"></a>01939 <span class="comment">// that are not part of the pattern we're matching.</span>
+<a name="l01940"></a>01940 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> op = 0, e = N-><a class="code" href="classllvm_1_1SDNode.html#abc5c2f1d47a517373030133c6a102106">getNumOperands</a>(); op != e; ++op) {
+<a name="l01941"></a>01941 <span class="keywordflow">if</span> (!std::count(ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>(),
+<a name="l01942"></a>01942 N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(op).<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>()))
+<a name="l01943"></a>01943 InputChains.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(op));
+<a name="l01944"></a>01944 }
+<a name="l01945"></a>01945 }
+<a name="l01946"></a>01946
+<a name="l01947"></a>01947 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> Res;
+<a name="l01948"></a>01948 <span class="keywordflow">if</span> (InputChains.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() == 1)
+<a name="l01949"></a>01949 <span class="keywordflow">return</span> InputChains[0];
+<a name="l01950"></a>01950 <span class="keywordflow">return</span> CurDAG-><a class="code" href="classllvm_1_1SelectionDAG.html#ac65c8a6cfb8608d6722c6df997870780">getNode</a>(<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ad469508535ce2082a1ab1f0e429187b8">ISD::TokenFactor</a>, ChainNodesMatched[0]->getDebugLoc(),
+<a name="l01951"></a>01951 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>, &InputChains[0], InputChains.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>());
+<a name="l01952"></a>01952 }
+<a name="l01953"></a>01953 <span class="comment"></span>
+<a name="l01954"></a>01954 <span class="comment">/// MorphNode - Handle morphing a node in place for the selector.</span>
+<a name="l01955"></a>01955 <span class="comment"></span><a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *SelectionDAGISel::
+<a name="l01956"></a>01956 MorphNode(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Node, <span class="keywordtype">unsigned</span> TargetOpc, <a class="code" href="structllvm_1_1SDVTList.html">SDVTList</a> VTList,
+<a name="l01957"></a>01957 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> *Ops, <span class="keywordtype">unsigned</span> NumOps, <span class="keywordtype">unsigned</span> EmitNodeInfo) {
+<a name="l01958"></a>01958 <span class="comment">// It is possible we're using MorphNodeTo to replace a node with no</span>
+<a name="l01959"></a>01959 <span class="comment">// normal results with one that has a normal result (or we could be</span>
+<a name="l01960"></a>01960 <span class="comment">// adding a chain) and the input could have glue and chains as well.</span>
+<a name="l01961"></a>01961 <span class="comment">// In this case we need to shift the operands down.</span>
+<a name="l01962"></a>01962 <span class="comment">// FIXME: This is a horrible hack and broken in obscure cases, no worse</span>
+<a name="l01963"></a>01963 <span class="comment">// than the old isel though.</span>
+<a name="l01964"></a>01964 <span class="keywordtype">int</span> OldGlueResultNo = -1, OldChainResultNo = -1;
+<a name="l01965"></a>01965
+<a name="l01966"></a>01966 <span class="keywordtype">unsigned</span> NTMNumResults = Node-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>();
+<a name="l01967"></a>01967 <span class="keywordflow">if</span> (Node-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(NTMNumResults-1) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>) {
+<a name="l01968"></a>01968 OldGlueResultNo = NTMNumResults-1;
+<a name="l01969"></a>01969 <span class="keywordflow">if</span> (NTMNumResults != 1 &&
+<a name="l01970"></a>01970 Node-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(NTMNumResults-2) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>)
+<a name="l01971"></a>01971 OldChainResultNo = NTMNumResults-2;
+<a name="l01972"></a>01972 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Node-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(NTMNumResults-1) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>)
+<a name="l01973"></a>01973 OldChainResultNo = NTMNumResults-1;
+<a name="l01974"></a>01974
+<a name="l01975"></a>01975 <span class="comment">// Call the underlying SelectionDAG routine to do the transmogrification. Note</span>
+<a name="l01976"></a>01976 <span class="comment">// that this deletes operands of the old node that become dead.</span>
+<a name="l01977"></a>01977 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Res = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a5dc22ea5c0d52d0e506d1c30c4ca9ca5">MorphNodeTo</a>(Node, ~TargetOpc, VTList, Ops, NumOps);
+<a name="l01978"></a>01978
+<a name="l01979"></a>01979 <span class="comment">// MorphNodeTo can operate in two ways: if an existing node with the</span>
+<a name="l01980"></a>01980 <span class="comment">// specified operands exists, it can just return it. Otherwise, it</span>
+<a name="l01981"></a>01981 <span class="comment">// updates the node in place to have the requested operands.</span>
+<a name="l01982"></a>01982 <span class="keywordflow">if</span> (Res == Node) {
+<a name="l01983"></a>01983 <span class="comment">// If we updated the node in place, reset the node ID. To the isel,</span>
+<a name="l01984"></a>01984 <span class="comment">// this should be just like a newly allocated machine node.</span>
+<a name="l01985"></a>01985 Res-><a class="code" href="classllvm_1_1SDNode.html#a5689e9ae35c6ceb3b9377299c98e0e97" title="setNodeId - Set unique node id.">setNodeId</a>(-1);
+<a name="l01986"></a>01986 }
+<a name="l01987"></a>01987
+<a name="l01988"></a>01988 <span class="keywordtype">unsigned</span> ResNumResults = Res-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>();
+<a name="l01989"></a>01989 <span class="comment">// Move the glue if needed.</span>
+<a name="l01990"></a>01990 <span class="keywordflow">if</span> ((EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5ad6ee2ea31428750f42b7db36bf86737e">OPFL_GlueOutput</a>) && OldGlueResultNo != -1 &&
+<a name="l01991"></a>01991 (<span class="keywordtype">unsigned</span>)OldGlueResultNo != ResNumResults-1)
+<a name="l01992"></a>01992 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Node, OldGlueResultNo),
+<a name="l01993"></a>01993 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, ResNumResults-1));
+<a name="l01994"></a>01994
+<a name="l01995"></a>01995 <span class="keywordflow">if</span> ((EmitNodeInfo & OPFL_GlueOutput) != 0)
+<a name="l01996"></a>01996 --ResNumResults;
+<a name="l01997"></a>01997
+<a name="l01998"></a>01998 <span class="comment">// Move the chain reference if needed.</span>
+<a name="l01999"></a>01999 <span class="keywordflow">if</span> ((EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5a7638541ce06fd89565a0ba8c84161b9c">OPFL_Chain</a>) && OldChainResultNo != -1 &&
+<a name="l02000"></a>02000 (<span class="keywordtype">unsigned</span>)OldChainResultNo != ResNumResults-1)
+<a name="l02001"></a>02001 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Node, OldChainResultNo),
+<a name="l02002"></a>02002 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, ResNumResults-1));
+<a name="l02003"></a>02003
+<a name="l02004"></a>02004 <span class="comment">// Otherwise, no replacement happened because the node already exists. Replace</span>
+<a name="l02005"></a>02005 <span class="comment">// Uses of the old node with the new one.</span>
+<a name="l02006"></a>02006 <span class="keywordflow">if</span> (Res != Node)
+<a name="l02007"></a>02007 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a307e5150c6c85f43348d2b09a69d7591">ReplaceAllUsesWith</a>(Node, Res);
+<a name="l02008"></a>02008
+<a name="l02009"></a>02009 <span class="keywordflow">return</span> Res;
+<a name="l02010"></a>02010 }
+<a name="l02011"></a>02011 <span class="comment"></span>
+<a name="l02012"></a>02012 <span class="comment">/// CheckSame - Implements OP_CheckSame.</span>
+<a name="l02013"></a>02013 <span class="comment"></span><a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02014"></a><a class="code" href="SelectionDAGISel_8cpp.html#a79923c0bb7ad7ead32b876800220d6b3">02014</a> <a class="code" href="SelectionDAGISel_8cpp.html#a79923c0bb7ad7ead32b876800220d6b3" title="CheckSame - Implements OP_CheckSame.">CheckSame</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02015"></a>02015 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N,
+<a name="l02016"></a>02016 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a><std::pair<SDValue, SDNode*> > &RecordedNodes) {
+<a name="l02017"></a>02017 <span class="comment">// Accept if it is exactly the same as a previously recorded node.</span>
+<a name="l02018"></a>02018 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02019"></a>02019 assert(RecNo < RecordedNodes.size() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02020"></a>02020 <span class="keywordflow">return</span> N == RecordedNodes[RecNo].first;
+<a name="l02021"></a>02021 }
+<a name="l02022"></a>02022 <span class="comment"></span>
+<a name="l02023"></a>02023 <span class="comment">/// CheckPatternPredicate - Implements OP_CheckPatternPredicate.</span>
+<a name="l02024"></a>02024 <span class="comment"></span><a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02025"></a><a class="code" href="SelectionDAGISel_8cpp.html#abb3b2c1fa23bf08df12215f52696c0f1">02025</a> <a class="code" href="SelectionDAGISel_8cpp.html#abb3b2c1fa23bf08df12215f52696c0f1" title="CheckPatternPredicate - Implements OP_CheckPatternPredicate.">CheckPatternPredicate</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02026"></a>02026 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> &SDISel) {
+<a name="l02027"></a>02027 <span class="keywordflow">return</span> SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#a34b4d24412618dbb8dd73e03fcc389aa">CheckPatternPredicate</a>(MatcherTable[MatcherIndex++]);
+<a name="l02028"></a>02028 }
+<a name="l02029"></a>02029 <span class="comment"></span>
+<a name="l02030"></a>02030 <span class="comment">/// CheckNodePredicate - Implements OP_CheckNodePredicate.</span>
+<a name="l02031"></a>02031 <span class="comment"></span><a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02032"></a><a class="code" href="SelectionDAGISel_8cpp.html#a4c75c8c52c2be067a8825ce146452bc2">02032</a> <a class="code" href="SelectionDAGISel_8cpp.html#a4c75c8c52c2be067a8825ce146452bc2" title="CheckNodePredicate - Implements OP_CheckNodePredicate.">CheckNodePredicate</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02033"></a>02033 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> &SDISel, <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l02034"></a>02034 <span class="keywordflow">return</span> SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#a63d859c0c780cc6883e8e7e18c48fbf9">CheckNodePredicate</a>(N, MatcherTable[MatcherIndex++]);
+<a name="l02035"></a>02035 }
+<a name="l02036"></a>02036
+<a name="l02037"></a>02037 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02038"></a><a class="code" href="SelectionDAGISel_8cpp.html#ae27ccd25e008885da31b6af396bbb0cf">02038</a> <a class="code" href="SelectionDAGISel_8cpp.html#ae27ccd25e008885da31b6af396bbb0cf">CheckOpcode</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02039"></a>02039 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l02040"></a>02040 uint16_t Opc = MatcherTable[MatcherIndex++];
+<a name="l02041"></a>02041 Opc |= (<span class="keywordtype">unsigned</span> short)MatcherTable[MatcherIndex++] << 8;
+<a name="l02042"></a>02042 <span class="keywordflow">return</span> N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() == Opc;
+<a name="l02043"></a>02043 }
+<a name="l02044"></a>02044
+<a name="l02045"></a>02045 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02046"></a><a class="code" href="SelectionDAGISel_8cpp.html#a59c52febe3a70cc54a8af6d4c67fdee9">02046</a> <a class="code" href="SelectionDAGISel_8cpp.html#a59c52febe3a70cc54a8af6d4c67fdee9">CheckType</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02047"></a>02047 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI) {
+<a name="l02048"></a>02048 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT = (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02049"></a>02049 <span class="keywordflow">if</span> (N.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == VT) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02050"></a>02050
+<a name="l02051"></a>02051 <span class="comment">// Handle the case when VT is iPTR.</span>
+<a name="l02052"></a>02052 <span class="keywordflow">return</span> VT == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a> && N.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == TLI.<a class="code" href="classllvm_1_1TargetLowering.html#a725d20a2d00a8b54cc01e6f02cb31522">getPointerTy</a>();
+<a name="l02053"></a>02053 }
+<a name="l02054"></a>02054
+<a name="l02055"></a>02055 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02056"></a><a class="code" href="SelectionDAGISel_8cpp.html#acae3c0616dac16e457abe75892673ad4">02056</a> <a class="code" href="SelectionDAGISel_8cpp.html#acae3c0616dac16e457abe75892673ad4">CheckChildType</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02057"></a>02057 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI,
+<a name="l02058"></a>02058 <span class="keywordtype">unsigned</span> ChildNo) {
+<a name="l02059"></a>02059 <span class="keywordflow">if</span> (ChildNo >= N.<a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>())
+<a name="l02060"></a>02060 <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Match fails if out of range child #.</span>
+<a name="l02061"></a>02061 <a class="code" href="SelectionDAGISel_8cpp.html#a59c52febe3a70cc54a8af6d4c67fdee9">return ::CheckType</a>(MatcherTable, MatcherIndex, N.<a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(ChildNo), TLI);
+<a name="l02062"></a>02062 }
+<a name="l02063"></a>02063
+<a name="l02064"></a>02064
+<a name="l02065"></a>02065 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02066"></a><a class="code" href="SelectionDAGISel_8cpp.html#aaab015bad5b65423fd9921361c3c4e57">02066</a> <a class="code" href="SelectionDAGISel_8cpp.html#aaab015bad5b65423fd9921361c3c4e57">CheckCondCode</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02067"></a>02067 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N) {
+<a name="l02068"></a>02068 <span class="keywordflow">return</span> cast<CondCodeSDNode>(N)-><span class="keyword">get</span>() ==
+<a name="l02069"></a>02069 (<a class="code" href="namespacellvm_1_1ISD.html#ac3c3cf58d6d631af6a172457304d3d07">ISD::CondCode</a>)MatcherTable[MatcherIndex++];
+<a name="l02070"></a>02070 }
+<a name="l02071"></a>02071
+<a name="l02072"></a>02072 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02073"></a><a class="code" href="SelectionDAGISel_8cpp.html#ad989c21528eda8f431248737176cc3c4">02073</a> <a class="code" href="SelectionDAGISel_8cpp.html#ad989c21528eda8f431248737176cc3c4">CheckValueType</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02074"></a>02074 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetLowering.html">TargetLowering</a> &TLI) {
+<a name="l02075"></a>02075 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT = (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02076"></a>02076 <span class="keywordflow">if</span> (cast<VTSDNode>(N)->getVT() == VT)
+<a name="l02077"></a>02077 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02078"></a>02078
+<a name="l02079"></a>02079 <span class="comment">// Handle the case when VT is iPTR.</span>
+<a name="l02080"></a>02080 <span class="keywordflow">return</span> VT == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a> && cast<VTSDNode>(N)->getVT() == TLI.<a class="code" href="classllvm_1_1TargetLowering.html#a725d20a2d00a8b54cc01e6f02cb31522">getPointerTy</a>();
+<a name="l02081"></a>02081 }
+<a name="l02082"></a>02082
+<a name="l02083"></a>02083 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02084"></a><a class="code" href="SelectionDAGISel_8cpp.html#a55ddd986b32899ac868a18ee9d1182a1">02084</a> <a class="code" href="SelectionDAGISel_8cpp.html#a55ddd986b32899ac868a18ee9d1182a1">CheckInteger</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02085"></a>02085 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N) {
+<a name="l02086"></a>02086 <a class="code" href="classint64__t.html">int64_t</a> Val = MatcherTable[MatcherIndex++];
+<a name="l02087"></a>02087 <span class="keywordflow">if</span> (Val & 128)
+<a name="l02088"></a>02088 Val = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(Val, MatcherTable, MatcherIndex);
+<a name="l02089"></a>02089
+<a name="l02090"></a>02090 <a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a>>(N);
+<a name="l02091"></a>02091 <span class="keywordflow">return</span> C != 0 && C-><a class="code" href="classllvm_1_1ConstantSDNode.html#ae52ea754f0f064b6440e99103abea366">getSExtValue</a>() == Val;
+<a name="l02092"></a>02092 }
+<a name="l02093"></a>02093
+<a name="l02094"></a>02094 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02095"></a><a class="code" href="SelectionDAGISel_8cpp.html#a617864a293ee07b291bef2224ea10567">02095</a> <a class="code" href="SelectionDAGISel_8cpp.html#a617864a293ee07b291bef2224ea10567">CheckAndImm</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02096"></a>02096 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <span class="keyword">const</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> &SDISel) {
+<a name="l02097"></a>02097 <a class="code" href="classint64__t.html">int64_t</a> Val = MatcherTable[MatcherIndex++];
+<a name="l02098"></a>02098 <span class="keywordflow">if</span> (Val & 128)
+<a name="l02099"></a>02099 Val = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(Val, MatcherTable, MatcherIndex);
+<a name="l02100"></a>02100
+<a name="l02101"></a>02101 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ac513a7da1bf74fb3e3c594da8534f2d2" title="Bitwise operators - logical and, logical or, logical xor.">ISD::AND</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02102"></a>02102
+<a name="l02103"></a>02103 <a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a>>(N-><a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(1));
+<a name="l02104"></a>02104 <span class="keywordflow">return</span> C != 0 && SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#ad51b12121dcca6c724763203d1132498">CheckAndMask</a>(N.<a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(0), <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, Val);
+<a name="l02105"></a>02105 }
+<a name="l02106"></a>02106
+<a name="l02107"></a>02107 <a class="code" href="Compiler_8h.html#a338bdf98e9e600f582b7bef274bc9388">LLVM_ATTRIBUTE_ALWAYS_INLINE</a> <span class="keyword">static</span> <span class="keywordtype">bool</span>
+<a name="l02108"></a><a class="code" href="SelectionDAGISel_8cpp.html#a6699dbb00a8f802ae5f1db4599f93121">02108</a> <a class="code" href="SelectionDAGISel_8cpp.html#a6699dbb00a8f802ae5f1db4599f93121">CheckOrImm</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable, <span class="keywordtype">unsigned</span> &MatcherIndex,
+<a name="l02109"></a>02109 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N, <span class="keyword">const</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> &SDISel) {
+<a name="l02110"></a>02110 <a class="code" href="classint64__t.html">int64_t</a> Val = MatcherTable[MatcherIndex++];
+<a name="l02111"></a>02111 <span class="keywordflow">if</span> (Val & 128)
+<a name="l02112"></a>02112 Val = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(Val, MatcherTable, MatcherIndex);
+<a name="l02113"></a>02113
+<a name="l02114"></a>02114 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a7415ab9f2172c59a2ee7c7a02afa56a4">ISD::OR</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02115"></a>02115
+<a name="l02116"></a>02116 <a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantSDNode.html">ConstantSDNode</a>>(N-><a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(1));
+<a name="l02117"></a>02117 <span class="keywordflow">return</span> C != 0 && SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#a34ef61e9e1f8ff4fa700ad52648e19cf">CheckOrMask</a>(N.<a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(0), <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, Val);
+<a name="l02118"></a>02118 }
+<a name="l02119"></a>02119 <span class="comment"></span>
+<a name="l02120"></a>02120 <span class="comment">/// IsPredicateKnownToFail - If we know how and can do so without pushing a</span>
+<a name="l02121"></a>02121 <span class="comment">/// scope, evaluate the current node. If the current predicate is known to</span>
+<a name="l02122"></a>02122 <span class="comment">/// fail, set Result=true and return anything. If the current predicate is</span>
+<a name="l02123"></a>02123 <span class="comment">/// known to pass, set Result=false and return the MatcherIndex to continue</span>
+<a name="l02124"></a>02124 <span class="comment">/// with. If the current predicate is unknown, set Result=false and return the</span>
+<a name="l02125"></a>02125 <span class="comment">/// MatcherIndex to continue with.</span>
+<a name="l02126"></a><a class="code" href="SelectionDAGISel_8cpp.html#a41976e1f6ca65fb7830e1f348d751000">02126</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="SelectionDAGISel_8cpp.html#a41976e1f6ca65fb7830e1f348d751000">IsPredicateKnownToFail</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *Table,
+<a name="l02127"></a>02127 <span class="keywordtype">unsigned</span> Index, <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N,
+<a name="l02128"></a>02128 <span class="keywordtype">bool</span> &Result,
+<a name="l02129"></a>02129 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html">SelectionDAGISel</a> &SDISel,
+<a name="l02130"></a>02130 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a><std::pair<SDValue, SDNode*> > &RecordedNodes) {
+<a name="l02131"></a>02131 <span class="keywordflow">switch</span> (Table[Index++]) {
+<a name="l02132"></a>02132 <span class="keywordflow">default</span>:
+<a name="l02133"></a>02133 Result = <span class="keyword">false</span>;
+<a name="l02134"></a>02134 <span class="keywordflow">return</span> Index-1; <span class="comment">// Could not evaluate this predicate.</span>
+<a name="l02135"></a>02135 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ac17440039d284c65ee3b7d5f9989f50c">SelectionDAGISel::OPC_CheckSame</a>:
+<a name="l02136"></a>02136 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a79923c0bb7ad7ead32b876800220d6b3" title="CheckSame - Implements OP_CheckSame.">::CheckSame</a>(Table, Index, N, RecordedNodes);
+<a name="l02137"></a>02137 <span class="keywordflow">return</span> Index;
+<a name="l02138"></a>02138 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a46a1f303e35f6feb3dabf3e588ef109b">SelectionDAGISel::OPC_CheckPatternPredicate</a>:
+<a name="l02139"></a>02139 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#abb3b2c1fa23bf08df12215f52696c0f1" title="CheckPatternPredicate - Implements OP_CheckPatternPredicate.">::CheckPatternPredicate</a>(Table, Index, SDISel);
+<a name="l02140"></a>02140 <span class="keywordflow">return</span> Index;
+<a name="l02141"></a>02141 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a9bcd7019459f96271977dc7b7a0e42c7">SelectionDAGISel::OPC_CheckPredicate</a>:
+<a name="l02142"></a>02142 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a4c75c8c52c2be067a8825ce146452bc2" title="CheckNodePredicate - Implements OP_CheckNodePredicate.">::CheckNodePredicate</a>(Table, Index, SDISel, N.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>());
+<a name="l02143"></a>02143 <span class="keywordflow">return</span> Index;
+<a name="l02144"></a>02144 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ae10cd161a6495fede5121b564d10ce2a">SelectionDAGISel::OPC_CheckOpcode</a>:
+<a name="l02145"></a>02145 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#ae27ccd25e008885da31b6af396bbb0cf">::CheckOpcode</a>(Table, Index, N.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>());
+<a name="l02146"></a>02146 <span class="keywordflow">return</span> Index;
+<a name="l02147"></a>02147 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ae3fd6bdaf8484f407123c016fac17bbb">SelectionDAGISel::OPC_CheckType</a>:
+<a name="l02148"></a>02148 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a59c52febe3a70cc54a8af6d4c67fdee9">::CheckType</a>(Table, Index, N, SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>);
+<a name="l02149"></a>02149 <span class="keywordflow">return</span> Index;
+<a name="l02150"></a>02150 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8c35dbaea22168300c0417f650be72a5">SelectionDAGISel::OPC_CheckChild0Type</a>:
+<a name="l02151"></a>02151 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a5bd4c5f999490a0b61230d3ed58122b7">SelectionDAGISel::OPC_CheckChild1Type</a>:
+<a name="l02152"></a>02152 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a7e7290f899b310f10094103102451001">SelectionDAGISel::OPC_CheckChild2Type</a>:
+<a name="l02153"></a>02153 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a04f261bfda135591bf8341f6a20a665e">SelectionDAGISel::OPC_CheckChild3Type</a>:
+<a name="l02154"></a>02154 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8f58a385e467906cfa60bb96ec84508f">SelectionDAGISel::OPC_CheckChild4Type</a>:
+<a name="l02155"></a>02155 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a378a8e72b2fc7c4a0cf9ac5ae724a0ea">SelectionDAGISel::OPC_CheckChild5Type</a>:
+<a name="l02156"></a>02156 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a136ee3a03a1bab562927a4e0ac11fbbc">SelectionDAGISel::OPC_CheckChild6Type</a>:
+<a name="l02157"></a>02157 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a1fd783d02f34d56b77c1907ed6e71966">SelectionDAGISel::OPC_CheckChild7Type</a>:
+<a name="l02158"></a>02158 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#acae3c0616dac16e457abe75892673ad4">::CheckChildType</a>(Table, Index, N, SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>,
+<a name="l02159"></a>02159 Table[Index-1] - <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8c35dbaea22168300c0417f650be72a5">SelectionDAGISel::OPC_CheckChild0Type</a>);
+<a name="l02160"></a>02160 <span class="keywordflow">return</span> Index;
+<a name="l02161"></a>02161 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8f80287bd79b4dda1de0fb810dbb0ecd">SelectionDAGISel::OPC_CheckCondCode</a>:
+<a name="l02162"></a>02162 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#aaab015bad5b65423fd9921361c3c4e57">::CheckCondCode</a>(Table, Index, N);
+<a name="l02163"></a>02163 <span class="keywordflow">return</span> Index;
+<a name="l02164"></a>02164 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a25c8c32aaa6b79885859cebc7ff11ae6">SelectionDAGISel::OPC_CheckValueType</a>:
+<a name="l02165"></a>02165 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#ad989c21528eda8f431248737176cc3c4">::CheckValueType</a>(Table, Index, N, SDISel.<a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>);
+<a name="l02166"></a>02166 <span class="keywordflow">return</span> Index;
+<a name="l02167"></a>02167 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a797344a4f66b9d2c2c4487a3bcffa98f">SelectionDAGISel::OPC_CheckInteger</a>:
+<a name="l02168"></a>02168 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a55ddd986b32899ac868a18ee9d1182a1">::CheckInteger</a>(Table, Index, N);
+<a name="l02169"></a>02169 <span class="keywordflow">return</span> Index;
+<a name="l02170"></a>02170 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a762f7415efdb5556233c801b1ec86509">SelectionDAGISel::OPC_CheckAndImm</a>:
+<a name="l02171"></a>02171 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a617864a293ee07b291bef2224ea10567">::CheckAndImm</a>(Table, Index, N, SDISel);
+<a name="l02172"></a>02172 <span class="keywordflow">return</span> Index;
+<a name="l02173"></a>02173 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a07f7c58b8c512a9e943c07c7210b6f72">SelectionDAGISel::OPC_CheckOrImm</a>:
+<a name="l02174"></a>02174 Result = !<a class="code" href="SelectionDAGISel_8cpp.html#a6699dbb00a8f802ae5f1db4599f93121">::CheckOrImm</a>(Table, Index, N, SDISel);
+<a name="l02175"></a>02175 <span class="keywordflow">return</span> Index;
+<a name="l02176"></a>02176 }
+<a name="l02177"></a>02177 }
+<a name="l02178"></a>02178
+<a name="l02179"></a>02179 <span class="keyword">namespace </span>{
+<a name="l02180"></a>02180
+<a name="l02181"></a>02181 <span class="keyword">struct </span>MatchScope {<span class="comment"></span>
+<a name="l02182"></a>02182 <span class="comment"> /// FailIndex - If this match fails, this is the index to continue with.</span>
+<a name="l02183"></a>02183 <span class="comment"></span> <span class="keywordtype">unsigned</span> FailIndex;
+<a name="l02184"></a>02184 <span class="comment"></span>
+<a name="l02185"></a>02185 <span class="comment"> /// NodeStack - The node stack when the scope was formed.</span>
+<a name="l02186"></a>02186 <span class="comment"></span> <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDValue, 4></a> NodeStack;
+<a name="l02187"></a>02187 <span class="comment"></span>
+<a name="l02188"></a>02188 <span class="comment"> /// NumRecordedNodes - The number of recorded nodes when the scope was formed.</span>
+<a name="l02189"></a>02189 <span class="comment"></span> <span class="keywordtype">unsigned</span> NumRecordedNodes;
+<a name="l02190"></a>02190 <span class="comment"></span>
+<a name="l02191"></a>02191 <span class="comment"> /// NumMatchedMemRefs - The number of matched memref entries.</span>
+<a name="l02192"></a>02192 <span class="comment"></span> <span class="keywordtype">unsigned</span> NumMatchedMemRefs;
+<a name="l02193"></a>02193 <span class="comment"></span>
+<a name="l02194"></a>02194 <span class="comment"> /// InputChain/InputGlue - The current chain/glue</span>
+<a name="l02195"></a>02195 <span class="comment"></span> <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> InputChain, InputGlue;
+<a name="l02196"></a>02196 <span class="comment"></span>
+<a name="l02197"></a>02197 <span class="comment"> /// HasChainNodesMatched - True if the ChainNodesMatched list is non-empty.</span>
+<a name="l02198"></a>02198 <span class="comment"></span> <span class="keywordtype">bool</span> HasChainNodesMatched, HasGlueResultNodesMatched;
+<a name="l02199"></a>02199 };
+<a name="l02200"></a>02200
+<a name="l02201"></a>02201 }
+<a name="l02202"></a>02202
+<a name="l02203"></a>02203 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *<a class="code" href="classllvm_1_1SelectionDAGISel.html#a301512eb377440a6ab0ab574ca7b82e2">SelectionDAGISel::</a>
+<a name="l02204"></a><a class="code" href="classllvm_1_1SelectionDAGISel.html#a301512eb377440a6ab0ab574ca7b82e2">02204</a> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a301512eb377440a6ab0ab574ca7b82e2">SelectCodeCommon</a>(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *NodeToMatch, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *MatcherTable,
+<a name="l02205"></a>02205 <span class="keywordtype">unsigned</span> TableSize) {
+<a name="l02206"></a>02206 <span class="comment">// FIXME: Should these even be selected? Handle these cases in the caller?</span>
+<a name="l02207"></a>02207 <span class="keywordflow">switch</span> (NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>()) {
+<a name="l02208"></a>02208 <span class="keywordflow">default</span>:
+<a name="l02209"></a>02209 <span class="keywordflow">break</span>;
+<a name="l02210"></a>02210 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a926013f6dca240eca95aca66c8d3e74b" title="EntryToken - This is the marker used to indicate the start of a region.">ISD::EntryToken</a>: <span class="comment">// These nodes remain the same.</span>
+<a name="l02211"></a>02211 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">ISD::BasicBlock</a>:
+<a name="l02212"></a>02212 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a419e8283a58d2b1b86591fa7f18ccfd9">ISD::Register</a>:
+<a name="l02213"></a>02213 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a7e54881d7b0838c37485e4c79d215d07">ISD::RegisterMask</a>:
+<a name="l02214"></a>02214 <span class="comment">//case ISD::VALUETYPE:</span>
+<a name="l02215"></a>02215 <span class="comment">//case ISD::CONDCODE:</span>
+<a name="l02216"></a>02216 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ab508f11d38b4596451c6333f7510daa3" title="HANDLENODE node - Used as a handle for various purposes.">ISD::HANDLENODE</a>:
+<a name="l02217"></a>02217 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a0420c9663564b439d19509ff77eb6845">ISD::MDNODE_SDNODE</a>:
+<a name="l02218"></a>02218 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ac479e53ca98903b1028ec80e12fb0af8">ISD::TargetConstant</a>:
+<a name="l02219"></a>02219 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a95cd714ab601765342e2ec9f6ba2cb34">ISD::TargetConstantFP</a>:
+<a name="l02220"></a>02220 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a038a7f124b4118456a27a739c03650bf">ISD::TargetConstantPool</a>:
+<a name="l02221"></a>02221 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aa84894f4966964ef9fc79f9515a6c875">ISD::TargetFrameIndex</a>:
+<a name="l02222"></a>02222 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a59b314018a929255951f01f8daaae72f">ISD::TargetExternalSymbol</a>:
+<a name="l02223"></a>02223 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a1b7eba375863a0e80549eb1a782c5683">ISD::TargetBlockAddress</a>:
+<a name="l02224"></a>02224 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a603c0651ff8c3a929c5e1d8b9a8f14cb">ISD::TargetJumpTable</a>:
+<a name="l02225"></a>02225 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110afc9ad7857b7faf49dcde3dcf434e22a6">ISD::TargetGlobalTLSAddress</a>:
+<a name="l02226"></a>02226 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a87b8176af163ee944af127081d24f4a2">ISD::TargetGlobalAddress</a>:
+<a name="l02227"></a>02227 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ad469508535ce2082a1ab1f0e429187b8">ISD::TokenFactor</a>:
+<a name="l02228"></a>02228 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a84c47705bcf7271413738ae8bf3871e6">ISD::CopyFromReg</a>:
+<a name="l02229"></a>02229 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a93bc27ca4d9e211c54b0d9efb660f080">ISD::CopyToReg</a>:
+<a name="l02230"></a>02230 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a4c1f7e0dc3af92b9cfd0d5d11231ddc1">ISD::EH_LABEL</a>:
+<a name="l02231"></a>02231 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aada0b926e7ebc2bc55d158d4c37bdcca">ISD::LIFETIME_START</a>:
+<a name="l02232"></a>02232 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ab49301b20458a7f312a0919e3c8abdb2">ISD::LIFETIME_END</a>:
+<a name="l02233"></a>02233 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a5689e9ae35c6ceb3b9377299c98e0e97" title="setNodeId - Set unique node id.">setNodeId</a>(-1); <span class="comment">// Mark selected.</span>
+<a name="l02234"></a>02234 <span class="keywordflow">return</span> 0;
+<a name="l02235"></a>02235 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aee4f13218bdbb5c5697f7e786618ecb2">ISD::AssertSext</a>:
+<a name="l02236"></a>02236 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110af23301e60475124fd80a2cb51f6ba863">ISD::AssertZext</a>:
+<a name="l02237"></a>02237 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(NodeToMatch, 0),
+<a name="l02238"></a>02238 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(0));
+<a name="l02239"></a>02239 <span class="keywordflow">return</span> 0;
+<a name="l02240"></a>02240 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ae35d57f3c020672748fcc95607348986">ISD::INLINEASM</a>: <span class="keywordflow">return</span> Select_INLINEASM(NodeToMatch);
+<a name="l02241"></a>02241 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a7c6d8f265e9e16e5debdb9a536b55d3d" title="UNDEF - An undefined node.">ISD::UNDEF</a>: <span class="keywordflow">return</span> Select_UNDEF(NodeToMatch);
+<a name="l02242"></a>02242 }
+<a name="l02243"></a>02243
+<a name="l02244"></a>02244 assert(!NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a7ef138746b04be6d07091b9ba49d74da">isMachineOpcode</a>() && <span class="stringliteral">"Node already selected!"</span>);
+<a name="l02245"></a>02245
+<a name="l02246"></a>02246 <span class="comment">// Set up the node stack with NodeToMatch as the only node on the stack.</span>
+<a name="l02247"></a>02247 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDValue, 8></a> NodeStack;
+<a name="l02248"></a>02248 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> N = <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(NodeToMatch, 0);
+<a name="l02249"></a>02249 NodeStack.push_back(N);
+<a name="l02250"></a>02250
+<a name="l02251"></a>02251 <span class="comment">// MatchScopes - Scopes used when matching, if a match failure happens, this</span>
+<a name="l02252"></a>02252 <span class="comment">// indicates where to continue checking.</span>
+<a name="l02253"></a>02253 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<MatchScope, 8></a> MatchScopes;
+<a name="l02254"></a>02254
+<a name="l02255"></a>02255 <span class="comment">// RecordedNodes - This is the set of nodes that have been recorded by the</span>
+<a name="l02256"></a>02256 <span class="comment">// state machine. The second value is the parent of the node, or null if the</span>
+<a name="l02257"></a>02257 <span class="comment">// root is recorded.</span>
+<a name="l02258"></a>02258 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<SDValue, SDNode*></a>, 8> RecordedNodes;
+<a name="l02259"></a>02259
+<a name="l02260"></a>02260 <span class="comment">// MatchedMemRefs - This is the set of MemRef's we've seen in the input</span>
+<a name="l02261"></a>02261 <span class="comment">// pattern.</span>
+<a name="l02262"></a>02262 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<MachineMemOperand*, 2></a> MatchedMemRefs;
+<a name="l02263"></a>02263
+<a name="l02264"></a>02264 <span class="comment">// These are the current input chain and glue for use when generating nodes.</span>
+<a name="l02265"></a>02265 <span class="comment">// Various Emit operations change these. For example, emitting a copytoreg</span>
+<a name="l02266"></a>02266 <span class="comment">// uses and updates these.</span>
+<a name="l02267"></a>02267 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> InputChain, InputGlue;
+<a name="l02268"></a>02268
+<a name="l02269"></a>02269 <span class="comment">// ChainNodesMatched - If a pattern matches nodes that have input/output</span>
+<a name="l02270"></a>02270 <span class="comment">// chains, the OPC_EmitMergeInputChains operation is emitted which indicates</span>
+<a name="l02271"></a>02271 <span class="comment">// which ones they are. The result is captured into this list so that we can</span>
+<a name="l02272"></a>02272 <span class="comment">// update the chain results when the pattern is complete.</span>
+<a name="l02273"></a>02273 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDNode*, 3></a> ChainNodesMatched;
+<a name="l02274"></a>02274 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDNode*, 3></a> GlueResultNodesMatched;
+<a name="l02275"></a>02275
+<a name="l02276"></a>02276 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"ISEL: Starting pattern match on root node: "</span>;
+<a name="l02277"></a>02277 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a535ca517df1b4ae62e75475141e65787" title="dump - Dump this node, for debugging.">dump</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>);
+<a name="l02278"></a>02278 <a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="charliteral">'\n'</span>);
+<a name="l02279"></a>02279
+<a name="l02280"></a>02280 <span class="comment">// Determine where to start the interpreter. Normally we start at opcode #0,</span>
+<a name="l02281"></a>02281 <span class="comment">// but if the state machine starts with an OPC_SwitchOpcode, then we</span>
+<a name="l02282"></a>02282 <span class="comment">// accelerate the first lookup (which is guaranteed to be hot) with the</span>
+<a name="l02283"></a>02283 <span class="comment">// OpcodeOffset table.</span>
+<a name="l02284"></a>02284 <span class="keywordtype">unsigned</span> MatcherIndex = 0;
+<a name="l02285"></a>02285
+<a name="l02286"></a>02286 <span class="keywordflow">if</span> (!OpcodeOffset.empty()) {
+<a name="l02287"></a>02287 <span class="comment">// Already computed the OpcodeOffset table, just index into it.</span>
+<a name="l02288"></a>02288 <span class="keywordflow">if</span> (N.<a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>() < OpcodeOffset.size())
+<a name="l02289"></a>02289 MatcherIndex = OpcodeOffset[N.<a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>()];
+<a name="l02290"></a>02290 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" Initial Opcode index to "</span> << MatcherIndex << <span class="stringliteral">"\n"</span>);
+<a name="l02291"></a>02291
+<a name="l02292"></a>02292 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (MatcherTable[0] == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a2827e53ef7420b3a5ad346366fa927b5">OPC_SwitchOpcode</a>) {
+<a name="l02293"></a>02293 <span class="comment">// Otherwise, the table isn't computed, but the state machine does start</span>
+<a name="l02294"></a>02294 <span class="comment">// with an OPC_SwitchOpcode instruction. Populate the table now, since this</span>
+<a name="l02295"></a>02295 <span class="comment">// is the first time we're selecting an instruction.</span>
+<a name="l02296"></a>02296 <span class="keywordtype">unsigned</span> Idx = 1;
+<a name="l02297"></a>02297 <span class="keywordflow">while</span> (1) {
+<a name="l02298"></a>02298 <span class="comment">// Get the size of this case.</span>
+<a name="l02299"></a>02299 <span class="keywordtype">unsigned</span> CaseSize = MatcherTable[Idx++];
+<a name="l02300"></a>02300 <span class="keywordflow">if</span> (CaseSize & 128)
+<a name="l02301"></a>02301 CaseSize = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(CaseSize, MatcherTable, Idx);
+<a name="l02302"></a>02302 <span class="keywordflow">if</span> (CaseSize == 0) <span class="keywordflow">break</span>;
+<a name="l02303"></a>02303
+<a name="l02304"></a>02304 <span class="comment">// Get the opcode, add the index to the table.</span>
+<a name="l02305"></a>02305 uint16_t Opc = MatcherTable[Idx++];
+<a name="l02306"></a>02306 Opc |= (<span class="keywordtype">unsigned</span> short)MatcherTable[Idx++] << 8;
+<a name="l02307"></a>02307 <span class="keywordflow">if</span> (Opc >= OpcodeOffset.size())
+<a name="l02308"></a>02308 OpcodeOffset.resize((Opc+1)*2);
+<a name="l02309"></a>02309 OpcodeOffset[Opc] = Idx;
+<a name="l02310"></a>02310 Idx += CaseSize;
+<a name="l02311"></a>02311 }
+<a name="l02312"></a>02312
+<a name="l02313"></a>02313 <span class="comment">// Okay, do the lookup for the first opcode.</span>
+<a name="l02314"></a>02314 <span class="keywordflow">if</span> (N.<a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>() < OpcodeOffset.size())
+<a name="l02315"></a>02315 MatcherIndex = OpcodeOffset[N.<a class="code" href="classllvm_1_1SDValue.html#a0caf6a31d8034336a9ba7791a5f583f1">getOpcode</a>()];
+<a name="l02316"></a>02316 }
+<a name="l02317"></a>02317
+<a name="l02318"></a>02318 <span class="keywordflow">while</span> (1) {
+<a name="l02319"></a>02319 assert(MatcherIndex < TableSize && <span class="stringliteral">"Invalid index"</span>);
+<a name="l02320"></a>02320 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l02321"></a>02321 <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> CurrentOpcodeIndex = MatcherIndex;
+<a name="l02322"></a>02322 <span class="preprocessor">#endif</span>
+<a name="l02323"></a>02323 <span class="preprocessor"></span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2">BuiltinOpcodes</a> Opcode = (<a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2">BuiltinOpcodes</a>)MatcherTable[MatcherIndex++];
+<a name="l02324"></a>02324 <span class="keywordflow">switch</span> (Opcode) {
+<a name="l02325"></a>02325 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a00188f1375143944dbffe1beb1eb3297">OPC_Scope</a>: {
+<a name="l02326"></a>02326 <span class="comment">// Okay, the semantics of this operation are that we should push a scope</span>
+<a name="l02327"></a>02327 <span class="comment">// then evaluate the first child. However, pushing a scope only to have</span>
+<a name="l02328"></a>02328 <span class="comment">// the first check fail (which then pops it) is inefficient. If we can</span>
+<a name="l02329"></a>02329 <span class="comment">// determine immediately that the first check (or first several) will</span>
+<a name="l02330"></a>02330 <span class="comment">// immediately fail, don't even bother pushing a scope for them.</span>
+<a name="l02331"></a>02331 <span class="keywordtype">unsigned</span> FailIndex;
+<a name="l02332"></a>02332
+<a name="l02333"></a>02333 <span class="keywordflow">while</span> (1) {
+<a name="l02334"></a>02334 <span class="keywordtype">unsigned</span> NumToSkip = MatcherTable[MatcherIndex++];
+<a name="l02335"></a>02335 <span class="keywordflow">if</span> (NumToSkip & 128)
+<a name="l02336"></a>02336 NumToSkip = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(NumToSkip, MatcherTable, MatcherIndex);
+<a name="l02337"></a>02337 <span class="comment">// Found the end of the scope with no match.</span>
+<a name="l02338"></a>02338 <span class="keywordflow">if</span> (NumToSkip == 0) {
+<a name="l02339"></a>02339 FailIndex = 0;
+<a name="l02340"></a>02340 <span class="keywordflow">break</span>;
+<a name="l02341"></a>02341 }
+<a name="l02342"></a>02342
+<a name="l02343"></a>02343 FailIndex = MatcherIndex+NumToSkip;
+<a name="l02344"></a>02344
+<a name="l02345"></a>02345 <span class="keywordtype">unsigned</span> MatcherIndexOfPredicate = MatcherIndex;
+<a name="l02346"></a>02346 (void)MatcherIndexOfPredicate; <span class="comment">// silence warning.</span>
+<a name="l02347"></a>02347
+<a name="l02348"></a>02348 <span class="comment">// If we can't evaluate this predicate without pushing a scope (e.g. if</span>
+<a name="l02349"></a>02349 <span class="comment">// it is a 'MoveParent') or if the predicate succeeds on this node, we</span>
+<a name="l02350"></a>02350 <span class="comment">// push the scope and evaluate the full predicate chain.</span>
+<a name="l02351"></a>02351 <span class="keywordtype">bool</span> Result;
+<a name="l02352"></a>02352 MatcherIndex = <a class="code" href="SelectionDAGISel_8cpp.html#a41976e1f6ca65fb7830e1f348d751000">IsPredicateKnownToFail</a>(MatcherTable, MatcherIndex, N,
+<a name="l02353"></a>02353 Result, *<span class="keyword">this</span>, RecordedNodes);
+<a name="l02354"></a>02354 <span class="keywordflow">if</span> (!Result)
+<a name="l02355"></a>02355 <span class="keywordflow">break</span>;
+<a name="l02356"></a>02356
+<a name="l02357"></a>02357 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" Skipped scope entry (due to false predicate) at "</span>
+<a name="l02358"></a>02358 << <span class="stringliteral">"index "</span> << MatcherIndexOfPredicate
+<a name="l02359"></a>02359 << <span class="stringliteral">", continuing at "</span> << FailIndex << <span class="stringliteral">"\n"</span>);
+<a name="l02360"></a>02360 ++NumDAGIselRetries;
+<a name="l02361"></a>02361
+<a name="l02362"></a>02362 <span class="comment">// Otherwise, we know that this case of the Scope is guaranteed to fail,</span>
+<a name="l02363"></a>02363 <span class="comment">// move to the next case.</span>
+<a name="l02364"></a>02364 MatcherIndex = FailIndex;
+<a name="l02365"></a>02365 }
+<a name="l02366"></a>02366
+<a name="l02367"></a>02367 <span class="comment">// If the whole scope failed to match, bail.</span>
+<a name="l02368"></a>02368 <span class="keywordflow">if</span> (FailIndex == 0) <span class="keywordflow">break</span>;
+<a name="l02369"></a>02369
+<a name="l02370"></a>02370 <span class="comment">// Push a MatchScope which indicates where to go if the first child fails</span>
+<a name="l02371"></a>02371 <span class="comment">// to match.</span>
+<a name="l02372"></a>02372 MatchScope NewEntry;
+<a name="l02373"></a>02373 NewEntry.FailIndex = FailIndex;
+<a name="l02374"></a>02374 NewEntry.NodeStack.append(NodeStack.begin(), NodeStack.end());
+<a name="l02375"></a>02375 NewEntry.NumRecordedNodes = RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>();
+<a name="l02376"></a>02376 NewEntry.NumMatchedMemRefs = MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>();
+<a name="l02377"></a>02377 NewEntry.InputChain = InputChain;
+<a name="l02378"></a>02378 NewEntry.InputGlue = InputGlue;
+<a name="l02379"></a>02379 NewEntry.HasChainNodesMatched = !ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>();
+<a name="l02380"></a>02380 NewEntry.HasGlueResultNodesMatched = !GlueResultNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>();
+<a name="l02381"></a>02381 MatchScopes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(NewEntry);
+<a name="l02382"></a>02382 <span class="keywordflow">continue</span>;
+<a name="l02383"></a>02383 }
+<a name="l02384"></a>02384 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ab10ccf4011b7d68e3fff1cbb338a57d3">OPC_RecordNode</a>: {
+<a name="l02385"></a>02385 <span class="comment">// Remember this node, it may end up being an operand in the pattern.</span>
+<a name="l02386"></a>02386 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Parent = 0;
+<a name="l02387"></a>02387 <span class="keywordflow">if</span> (NodeStack.size() > 1)
+<a name="l02388"></a>02388 Parent = NodeStack[NodeStack.size()-2].getNode();
+<a name="l02389"></a>02389 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::make_pair(N, Parent));
+<a name="l02390"></a>02390 <span class="keywordflow">continue</span>;
+<a name="l02391"></a>02391 }
+<a name="l02392"></a>02392
+<a name="l02393"></a>02393 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ac2d86704b188ca386078d06e8ccd69b7">OPC_RecordChild0</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a045a4df90d2c6e9d694d6acf5523f70d">OPC_RecordChild1</a>:
+<a name="l02394"></a>02394 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2af7f508ff13976380cf892b2ee6aaf626">OPC_RecordChild2</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a2a5b1298d30ff2f9124cf1619b4736a3">OPC_RecordChild3</a>:
+<a name="l02395"></a>02395 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a89d569a5498ad39550c58760f7b78b15">OPC_RecordChild4</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a75516657cf8e999f42f4465e9f3d36af">OPC_RecordChild5</a>:
+<a name="l02396"></a>02396 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a6f70cafa3e6d4d88796ccb1d42c771f4">OPC_RecordChild6</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a116d7d851a1d3a533aaa1debd4a3ce61">OPC_RecordChild7</a>: {
+<a name="l02397"></a>02397 <span class="keywordtype">unsigned</span> ChildNo = Opcode-<a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ac2d86704b188ca386078d06e8ccd69b7">OPC_RecordChild0</a>;
+<a name="l02398"></a>02398 <span class="keywordflow">if</span> (ChildNo >= N.<a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>())
+<a name="l02399"></a>02399 <span class="keywordflow">break</span>; <span class="comment">// Match fails if out of range child #.</span>
+<a name="l02400"></a>02400
+<a name="l02401"></a>02401 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::make_pair(N-><a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(ChildNo),
+<a name="l02402"></a>02402 N.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>()));
+<a name="l02403"></a>02403 <span class="keywordflow">continue</span>;
+<a name="l02404"></a>02404 }
+<a name="l02405"></a>02405 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a6815b3a19b46de45ad1d6ca08dc18f10">OPC_RecordMemRef</a>:
+<a name="l02406"></a>02406 MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(cast<MemSDNode>(N)->getMemOperand());
+<a name="l02407"></a>02407 <span class="keywordflow">continue</span>;
+<a name="l02408"></a>02408
+<a name="l02409"></a>02409 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a23a17ff570de8decffae4f71a8093c9f">OPC_CaptureGlueInput</a>:
+<a name="l02410"></a>02410 <span class="comment">// If the current node has an input glue, capture it in InputGlue.</span>
+<a name="l02411"></a>02411 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>() != 0 &&
+<a name="l02412"></a>02412 N-><a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(N-><a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>()-1).getValueType() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>)
+<a name="l02413"></a>02413 InputGlue = N-><a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(N-><a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>()-1);
+<a name="l02414"></a>02414 <span class="keywordflow">continue</span>;
+<a name="l02415"></a>02415
+<a name="l02416"></a>02416 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a0fc7a263e2171d96d675072e92e18769">OPC_MoveChild</a>: {
+<a name="l02417"></a>02417 <span class="keywordtype">unsigned</span> ChildNo = MatcherTable[MatcherIndex++];
+<a name="l02418"></a>02418 <span class="keywordflow">if</span> (ChildNo >= N.<a class="code" href="classllvm_1_1SDValue.html#a5f0447ef8ec128563ad131b76e5062bd">getNumOperands</a>())
+<a name="l02419"></a>02419 <span class="keywordflow">break</span>; <span class="comment">// Match fails if out of range child #.</span>
+<a name="l02420"></a>02420 N = N.<a class="code" href="classllvm_1_1SDValue.html#a5891be2cd50b5b7f01eb7c1cb0e7a682">getOperand</a>(ChildNo);
+<a name="l02421"></a>02421 NodeStack.push_back(N);
+<a name="l02422"></a>02422 <span class="keywordflow">continue</span>;
+<a name="l02423"></a>02423 }
+<a name="l02424"></a>02424
+<a name="l02425"></a>02425 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a198333ee8be077e6255b7efbbb2f8b98">OPC_MoveParent</a>:
+<a name="l02426"></a>02426 <span class="comment">// Pop the current node off the NodeStack.</span>
+<a name="l02427"></a>02427 NodeStack.pop_back();
+<a name="l02428"></a>02428 assert(!NodeStack.empty() && <span class="stringliteral">"Node stack imbalance!"</span>);
+<a name="l02429"></a>02429 N = NodeStack.back();
+<a name="l02430"></a>02430 <span class="keywordflow">continue</span>;
+<a name="l02431"></a>02431
+<a name="l02432"></a>02432 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ac17440039d284c65ee3b7d5f9989f50c">OPC_CheckSame</a>:
+<a name="l02433"></a>02433 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#a79923c0bb7ad7ead32b876800220d6b3" title="CheckSame - Implements OP_CheckSame.">CheckSame</a>(MatcherTable, MatcherIndex, N, RecordedNodes)) <span class="keywordflow">break</span>;
+<a name="l02434"></a>02434 <span class="keywordflow">continue</span>;
+<a name="l02435"></a>02435 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a46a1f303e35f6feb3dabf3e588ef109b">OPC_CheckPatternPredicate</a>:
+<a name="l02436"></a>02436 <span class="keywordflow">if</span> (!::<a class="code" href="classllvm_1_1SelectionDAGISel.html#a34b4d24412618dbb8dd73e03fcc389aa">CheckPatternPredicate</a>(MatcherTable, MatcherIndex, *<span class="keyword">this</span>)) <span class="keywordflow">break</span>;
+<a name="l02437"></a>02437 <span class="keywordflow">continue</span>;
+<a name="l02438"></a>02438 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a9bcd7019459f96271977dc7b7a0e42c7">OPC_CheckPredicate</a>:
+<a name="l02439"></a>02439 <span class="keywordflow">if</span> (!::<a class="code" href="classllvm_1_1SelectionDAGISel.html#a63d859c0c780cc6883e8e7e18c48fbf9">CheckNodePredicate</a>(MatcherTable, MatcherIndex, *<span class="keyword">this</span>,
+<a name="l02440"></a>02440 N.getNode()))
+<a name="l02441"></a>02441 <span class="keywordflow">break</span>;
+<a name="l02442"></a>02442 <span class="keywordflow">continue</span>;
+<a name="l02443"></a>02443 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2af337a75552fc71e0a3fe416c42029934">OPC_CheckComplexPat</a>: {
+<a name="l02444"></a>02444 <span class="keywordtype">unsigned</span> CPNum = MatcherTable[MatcherIndex++];
+<a name="l02445"></a>02445 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02446"></a>02446 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckComplexPat"</span>);
+<a name="l02447"></a>02447 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a3b843300218cb16620b8958ac4883fc1">CheckComplexPattern</a>(NodeToMatch, RecordedNodes[RecNo].second,
+<a name="l02448"></a>02448 RecordedNodes[RecNo].first, CPNum,
+<a name="l02449"></a>02449 RecordedNodes))
+<a name="l02450"></a>02450 <span class="keywordflow">break</span>;
+<a name="l02451"></a>02451 <span class="keywordflow">continue</span>;
+<a name="l02452"></a>02452 }
+<a name="l02453"></a>02453 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ae10cd161a6495fede5121b564d10ce2a">OPC_CheckOpcode</a>:
+<a name="l02454"></a>02454 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#ae27ccd25e008885da31b6af396bbb0cf">CheckOpcode</a>(MatcherTable, MatcherIndex, N.getNode())) <span class="keywordflow">break</span>;
+<a name="l02455"></a>02455 <span class="keywordflow">continue</span>;
+<a name="l02456"></a>02456
+<a name="l02457"></a>02457 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ae3fd6bdaf8484f407123c016fac17bbb">OPC_CheckType</a>:
+<a name="l02458"></a>02458 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#a59c52febe3a70cc54a8af6d4c67fdee9">CheckType</a>(MatcherTable, MatcherIndex, N, <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>)) <span class="keywordflow">break</span>;
+<a name="l02459"></a>02459 <span class="keywordflow">continue</span>;
+<a name="l02460"></a>02460
+<a name="l02461"></a>02461 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a2827e53ef7420b3a5ad346366fa927b5">OPC_SwitchOpcode</a>: {
+<a name="l02462"></a>02462 <span class="keywordtype">unsigned</span> CurNodeOpcode = N.getOpcode();
+<a name="l02463"></a>02463 <span class="keywordtype">unsigned</span> SwitchStart = MatcherIndex-1; (void)SwitchStart;
+<a name="l02464"></a>02464 <span class="keywordtype">unsigned</span> CaseSize;
+<a name="l02465"></a>02465 <span class="keywordflow">while</span> (1) {
+<a name="l02466"></a>02466 <span class="comment">// Get the size of this case.</span>
+<a name="l02467"></a>02467 CaseSize = MatcherTable[MatcherIndex++];
+<a name="l02468"></a>02468 <span class="keywordflow">if</span> (CaseSize & 128)
+<a name="l02469"></a>02469 CaseSize = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(CaseSize, MatcherTable, MatcherIndex);
+<a name="l02470"></a>02470 <span class="keywordflow">if</span> (CaseSize == 0) <span class="keywordflow">break</span>;
+<a name="l02471"></a>02471
+<a name="l02472"></a>02472 uint16_t Opc = MatcherTable[MatcherIndex++];
+<a name="l02473"></a>02473 Opc |= (<span class="keywordtype">unsigned</span> short)MatcherTable[MatcherIndex++] << 8;
+<a name="l02474"></a>02474
+<a name="l02475"></a>02475 <span class="comment">// If the opcode matches, then we will execute this case.</span>
+<a name="l02476"></a>02476 <span class="keywordflow">if</span> (CurNodeOpcode == Opc)
+<a name="l02477"></a>02477 <span class="keywordflow">break</span>;
+<a name="l02478"></a>02478
+<a name="l02479"></a>02479 <span class="comment">// Otherwise, skip over this case.</span>
+<a name="l02480"></a>02480 MatcherIndex += CaseSize;
+<a name="l02481"></a>02481 }
+<a name="l02482"></a>02482
+<a name="l02483"></a>02483 <span class="comment">// If no cases matched, bail out.</span>
+<a name="l02484"></a>02484 <span class="keywordflow">if</span> (CaseSize == 0) <span class="keywordflow">break</span>;
+<a name="l02485"></a>02485
+<a name="l02486"></a>02486 <span class="comment">// Otherwise, execute the case we found.</span>
+<a name="l02487"></a>02487 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" OpcodeSwitch from "</span> << SwitchStart
+<a name="l02488"></a>02488 << <span class="stringliteral">" to "</span> << MatcherIndex << <span class="stringliteral">"\n"</span>);
+<a name="l02489"></a>02489 <span class="keywordflow">continue</span>;
+<a name="l02490"></a>02490 }
+<a name="l02491"></a>02491
+<a name="l02492"></a>02492 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a0fdec182c9ee56480009743734d0e9f8">OPC_SwitchType</a>: {
+<a name="l02493"></a>02493 <a class="code" href="classllvm_1_1MVT.html">MVT</a> CurNodeVT = N.getValueType().getSimpleVT();
+<a name="l02494"></a>02494 <span class="keywordtype">unsigned</span> SwitchStart = MatcherIndex-1; (void)SwitchStart;
+<a name="l02495"></a>02495 <span class="keywordtype">unsigned</span> CaseSize;
+<a name="l02496"></a>02496 <span class="keywordflow">while</span> (1) {
+<a name="l02497"></a>02497 <span class="comment">// Get the size of this case.</span>
+<a name="l02498"></a>02498 CaseSize = MatcherTable[MatcherIndex++];
+<a name="l02499"></a>02499 <span class="keywordflow">if</span> (CaseSize & 128)
+<a name="l02500"></a>02500 CaseSize = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(CaseSize, MatcherTable, MatcherIndex);
+<a name="l02501"></a>02501 <span class="keywordflow">if</span> (CaseSize == 0) <span class="keywordflow">break</span>;
+<a name="l02502"></a>02502
+<a name="l02503"></a>02503 <a class="code" href="classllvm_1_1MVT.html">MVT</a> CaseVT = (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02504"></a>02504 <span class="keywordflow">if</span> (CaseVT == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a>)
+<a name="l02505"></a>02505 CaseVT = <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>.<a class="code" href="classllvm_1_1TargetLowering.html#a725d20a2d00a8b54cc01e6f02cb31522">getPointerTy</a>();
+<a name="l02506"></a>02506
+<a name="l02507"></a>02507 <span class="comment">// If the VT matches, then we will execute this case.</span>
+<a name="l02508"></a>02508 <span class="keywordflow">if</span> (CurNodeVT == CaseVT)
+<a name="l02509"></a>02509 <span class="keywordflow">break</span>;
+<a name="l02510"></a>02510
+<a name="l02511"></a>02511 <span class="comment">// Otherwise, skip over this case.</span>
+<a name="l02512"></a>02512 MatcherIndex += CaseSize;
+<a name="l02513"></a>02513 }
+<a name="l02514"></a>02514
+<a name="l02515"></a>02515 <span class="comment">// If no cases matched, bail out.</span>
+<a name="l02516"></a>02516 <span class="keywordflow">if</span> (CaseSize == 0) <span class="keywordflow">break</span>;
+<a name="l02517"></a>02517
+<a name="l02518"></a>02518 <span class="comment">// Otherwise, execute the case we found.</span>
+<a name="l02519"></a>02519 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" TypeSwitch["</span> << <a class="code" href="structllvm_1_1EVT.html">EVT</a>(CurNodeVT).getEVTString()
+<a name="l02520"></a>02520 << <span class="stringliteral">"] from "</span> << SwitchStart << <span class="stringliteral">" to "</span> << MatcherIndex<<<span class="charliteral">'\n'</span>);
+<a name="l02521"></a>02521 <span class="keywordflow">continue</span>;
+<a name="l02522"></a>02522 }
+<a name="l02523"></a>02523 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8c35dbaea22168300c0417f650be72a5">OPC_CheckChild0Type</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a5bd4c5f999490a0b61230d3ed58122b7">OPC_CheckChild1Type</a>:
+<a name="l02524"></a>02524 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a7e7290f899b310f10094103102451001">OPC_CheckChild2Type</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a04f261bfda135591bf8341f6a20a665e">OPC_CheckChild3Type</a>:
+<a name="l02525"></a>02525 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8f58a385e467906cfa60bb96ec84508f">OPC_CheckChild4Type</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a378a8e72b2fc7c4a0cf9ac5ae724a0ea">OPC_CheckChild5Type</a>:
+<a name="l02526"></a>02526 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a136ee3a03a1bab562927a4e0ac11fbbc">OPC_CheckChild6Type</a>: <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a1fd783d02f34d56b77c1907ed6e71966">OPC_CheckChild7Type</a>:
+<a name="l02527"></a>02527 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#acae3c0616dac16e457abe75892673ad4">CheckChildType</a>(MatcherTable, MatcherIndex, N, <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>,
+<a name="l02528"></a>02528 Opcode-<a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8c35dbaea22168300c0417f650be72a5">OPC_CheckChild0Type</a>))
+<a name="l02529"></a>02529 <span class="keywordflow">break</span>;
+<a name="l02530"></a>02530 <span class="keywordflow">continue</span>;
+<a name="l02531"></a>02531 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a8f80287bd79b4dda1de0fb810dbb0ecd">OPC_CheckCondCode</a>:
+<a name="l02532"></a>02532 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#aaab015bad5b65423fd9921361c3c4e57">CheckCondCode</a>(MatcherTable, MatcherIndex, N)) <span class="keywordflow">break</span>;
+<a name="l02533"></a>02533 <span class="keywordflow">continue</span>;
+<a name="l02534"></a>02534 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a25c8c32aaa6b79885859cebc7ff11ae6">OPC_CheckValueType</a>:
+<a name="l02535"></a>02535 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#ad989c21528eda8f431248737176cc3c4">CheckValueType</a>(MatcherTable, MatcherIndex, N, <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>)) <span class="keywordflow">break</span>;
+<a name="l02536"></a>02536 <span class="keywordflow">continue</span>;
+<a name="l02537"></a>02537 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a797344a4f66b9d2c2c4487a3bcffa98f">OPC_CheckInteger</a>:
+<a name="l02538"></a>02538 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#a55ddd986b32899ac868a18ee9d1182a1">CheckInteger</a>(MatcherTable, MatcherIndex, N)) <span class="keywordflow">break</span>;
+<a name="l02539"></a>02539 <span class="keywordflow">continue</span>;
+<a name="l02540"></a>02540 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a762f7415efdb5556233c801b1ec86509">OPC_CheckAndImm</a>:
+<a name="l02541"></a>02541 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#a617864a293ee07b291bef2224ea10567">CheckAndImm</a>(MatcherTable, MatcherIndex, N, *<span class="keyword">this</span>)) <span class="keywordflow">break</span>;
+<a name="l02542"></a>02542 <span class="keywordflow">continue</span>;
+<a name="l02543"></a>02543 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a07f7c58b8c512a9e943c07c7210b6f72">OPC_CheckOrImm</a>:
+<a name="l02544"></a>02544 <span class="keywordflow">if</span> (!::<a class="code" href="SelectionDAGISel_8cpp.html#a6699dbb00a8f802ae5f1db4599f93121">CheckOrImm</a>(MatcherTable, MatcherIndex, N, *<span class="keyword">this</span>)) <span class="keywordflow">break</span>;
+<a name="l02545"></a>02545 <span class="keywordflow">continue</span>;
+<a name="l02546"></a>02546
+<a name="l02547"></a>02547 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a6dd26f64fb30f256036e93271c1560fd">OPC_CheckFoldableChainNode</a>: {
+<a name="l02548"></a>02548 assert(NodeStack.size() != 1 && <span class="stringliteral">"No parent node"</span>);
+<a name="l02549"></a>02549 <span class="comment">// Verify that all intermediate nodes between the root and this one have</span>
+<a name="l02550"></a>02550 <span class="comment">// a single use.</span>
+<a name="l02551"></a>02551 <span class="keywordtype">bool</span> HasMultipleUses = <span class="keyword">false</span>;
+<a name="l02552"></a>02552 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = NodeStack.size()-1; i != e; ++i)
+<a name="l02553"></a>02553 <span class="keywordflow">if</span> (!NodeStack[i].hasOneUse()) {
+<a name="l02554"></a>02554 HasMultipleUses = <span class="keyword">true</span>;
+<a name="l02555"></a>02555 <span class="keywordflow">break</span>;
+<a name="l02556"></a>02556 }
+<a name="l02557"></a>02557 <span class="keywordflow">if</span> (HasMultipleUses) <span class="keywordflow">break</span>;
+<a name="l02558"></a>02558
+<a name="l02559"></a>02559 <span class="comment">// Check to see that the target thinks this is profitable to fold and that</span>
+<a name="l02560"></a>02560 <span class="comment">// we can fold it without inducing cycles in the graph.</span>
+<a name="l02561"></a>02561 <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1SelectionDAGISel.html#a7c45584212fcb230d5bcee0754b3ce64">IsProfitableToFold</a>(N, NodeStack[NodeStack.size()-2].getNode(),
+<a name="l02562"></a>02562 NodeToMatch) ||
+<a name="l02563"></a>02563 !<a class="code" href="classllvm_1_1SelectionDAGISel.html#afde899bbadc9622ad6108694d44d7f36">IsLegalToFold</a>(N, NodeStack[NodeStack.size()-2].getNode(),
+<a name="l02564"></a>02564 NodeToMatch, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1a7c2a3380a9f770ba082a070c592df6">OptLevel</a>,
+<a name="l02565"></a>02565 <span class="keyword">true</span><span class="comment">/*We validate our own chains*/</span>))
+<a name="l02566"></a>02566 <span class="keywordflow">break</span>;
+<a name="l02567"></a>02567
+<a name="l02568"></a>02568 <span class="keywordflow">continue</span>;
+<a name="l02569"></a>02569 }
+<a name="l02570"></a>02570 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a4d26ece079833899ec7dfc775b6e2628">OPC_EmitInteger</a>: {
+<a name="l02571"></a>02571 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT =
+<a name="l02572"></a>02572 (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02573"></a>02573 <a class="code" href="classint64__t.html">int64_t</a> Val = MatcherTable[MatcherIndex++];
+<a name="l02574"></a>02574 <span class="keywordflow">if</span> (Val & 128)
+<a name="l02575"></a>02575 Val = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(Val, MatcherTable, MatcherIndex);
+<a name="l02576"></a>02576 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::pair<SDValue, SDNode*>(
+<a name="l02577"></a>02577 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ace5bddfde14abf966790e8438e88d6d2">getTargetConstant</a>(Val, VT), (<a class="code" href="classllvm_1_1SDNode.html">SDNode</a>*)0));
+<a name="l02578"></a>02578 <span class="keywordflow">continue</span>;
+<a name="l02579"></a>02579 }
+<a name="l02580"></a>02580 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a61b4fade49d0ca64657a3030f46495d2">OPC_EmitRegister</a>: {
+<a name="l02581"></a>02581 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT =
+<a name="l02582"></a>02582 (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02583"></a>02583 <span class="keywordtype">unsigned</span> RegNo = MatcherTable[MatcherIndex++];
+<a name="l02584"></a>02584 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::pair<SDValue, SDNode*>(
+<a name="l02585"></a>02585 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a9268086dd9d1ba4e60cfe872dde5c173">getRegister</a>(RegNo, VT), (<a class="code" href="classllvm_1_1SDNode.html">SDNode</a>*)0));
+<a name="l02586"></a>02586 <span class="keywordflow">continue</span>;
+<a name="l02587"></a>02587 }
+<a name="l02588"></a>02588 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2abd736102925abf791e7f9df182241783">OPC_EmitRegister2</a>: {
+<a name="l02589"></a>02589 <span class="comment">// For targets w/ more than 256 register names, the register enum</span>
+<a name="l02590"></a>02590 <span class="comment">// values are stored in two bytes in the matcher table (just like</span>
+<a name="l02591"></a>02591 <span class="comment">// opcodes).</span>
+<a name="l02592"></a>02592 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT =
+<a name="l02593"></a>02593 (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02594"></a>02594 <span class="keywordtype">unsigned</span> RegNo = MatcherTable[MatcherIndex++];
+<a name="l02595"></a>02595 RegNo |= MatcherTable[MatcherIndex++] << 8;
+<a name="l02596"></a>02596 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::pair<SDValue, SDNode*>(
+<a name="l02597"></a>02597 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a9268086dd9d1ba4e60cfe872dde5c173">getRegister</a>(RegNo, VT), (<a class="code" href="classllvm_1_1SDNode.html">SDNode</a>*)0));
+<a name="l02598"></a>02598 <span class="keywordflow">continue</span>;
+<a name="l02599"></a>02599 }
+<a name="l02600"></a>02600
+<a name="l02601"></a>02601 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2af63f0634fcc36241cccfe4a2e57266f2">OPC_EmitConvertToTarget</a>: {
+<a name="l02602"></a>02602 <span class="comment">// Convert from IMM/FPIMM to target version.</span>
+<a name="l02603"></a>02603 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02604"></a>02604 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02605"></a>02605 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> Imm = RecordedNodes[RecNo].first;
+<a name="l02606"></a>02606
+<a name="l02607"></a>02607 <span class="keywordflow">if</span> (Imm->getOpcode() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aac2f0a84dd2aa5ee4c3f1385e9565f5e">ISD::Constant</a>) {
+<a name="l02608"></a>02608 <a class="code" href="classint64__t.html">int64_t</a> Val = cast<ConstantSDNode>(Imm)->getZExtValue();
+<a name="l02609"></a>02609 Imm = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ace5bddfde14abf966790e8438e88d6d2">getTargetConstant</a>(Val, Imm.getValueType());
+<a name="l02610"></a>02610 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Imm->getOpcode() == <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a1be4c8da7c68a4c683de1a98b5cc5b9d">ISD::ConstantFP</a>) {
+<a name="l02611"></a>02611 <span class="keyword">const</span> <a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *Val=cast<ConstantFPSDNode>(Imm)->getConstantFPValue();
+<a name="l02612"></a>02612 Imm = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ab274af8be412770a946fd8074ebef215">getTargetConstantFP</a>(*Val, Imm.getValueType());
+<a name="l02613"></a>02613 }
+<a name="l02614"></a>02614
+<a name="l02615"></a>02615 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::make_pair(Imm, RecordedNodes[RecNo].second));
+<a name="l02616"></a>02616 <span class="keywordflow">continue</span>;
+<a name="l02617"></a>02617 }
+<a name="l02618"></a>02618
+<a name="l02619"></a>02619 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a678201f50ea2342113a11caedb83b8d4">OPC_EmitMergeInputChains1_0</a>: <span class="comment">// OPC_EmitMergeInputChains, 1, 0</span>
+<a name="l02620"></a>02620 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a326d1d32d94b2090179b5ea52d76f359">OPC_EmitMergeInputChains1_1</a>: { <span class="comment">// OPC_EmitMergeInputChains, 1, 1</span>
+<a name="l02621"></a>02621 <span class="comment">// These are space-optimized forms of OPC_EmitMergeInputChains.</span>
+<a name="l02622"></a>02622 assert(InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() == 0 &&
+<a name="l02623"></a>02623 <span class="stringliteral">"EmitMergeInputChains should be the first chain producing node"</span>);
+<a name="l02624"></a>02624 assert(ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>() &&
+<a name="l02625"></a>02625 <span class="stringliteral">"Should only have one EmitMergeInputChains per match"</span>);
+<a name="l02626"></a>02626
+<a name="l02627"></a>02627 <span class="comment">// Read all of the chained nodes.</span>
+<a name="l02628"></a>02628 <span class="keywordtype">unsigned</span> RecNo = Opcode == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a326d1d32d94b2090179b5ea52d76f359">OPC_EmitMergeInputChains1_1</a>;
+<a name="l02629"></a>02629 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02630"></a>02630 ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(RecordedNodes[RecNo].first.getNode());
+<a name="l02631"></a>02631
+<a name="l02632"></a>02632 <span class="comment">// FIXME: What if other value results of the node have uses not matched</span>
+<a name="l02633"></a>02633 <span class="comment">// by this pattern?</span>
+<a name="l02634"></a>02634 <span class="keywordflow">if</span> (ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>() != NodeToMatch &&
+<a name="l02635"></a>02635 !RecordedNodes[RecNo].first.hasOneUse()) {
+<a name="l02636"></a>02636 ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l02637"></a>02637 <span class="keywordflow">break</span>;
+<a name="l02638"></a>02638 }
+<a name="l02639"></a>02639
+<a name="l02640"></a>02640 <span class="comment">// Merge the input chains if they are not intra-pattern references.</span>
+<a name="l02641"></a>02641 InputChain = <a class="code" href="SelectionDAGISel_8cpp.html#aeb0bc3fb3008d1f61c5a1adb0b901c82">HandleMergeInputChains</a>(ChainNodesMatched, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>);
+<a name="l02642"></a>02642
+<a name="l02643"></a>02643 <span class="keywordflow">if</span> (InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() == 0)
+<a name="l02644"></a>02644 <span class="keywordflow">break</span>; <span class="comment">// Failed to merge.</span>
+<a name="l02645"></a>02645 <span class="keywordflow">continue</span>;
+<a name="l02646"></a>02646 }
+<a name="l02647"></a>02647
+<a name="l02648"></a>02648 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a5a9ff4093959a69b182c880dadf52829">OPC_EmitMergeInputChains</a>: {
+<a name="l02649"></a>02649 assert(InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() == 0 &&
+<a name="l02650"></a>02650 <span class="stringliteral">"EmitMergeInputChains should be the first chain producing node"</span>);
+<a name="l02651"></a>02651 <span class="comment">// This node gets a list of nodes we matched in the input that have</span>
+<a name="l02652"></a>02652 <span class="comment">// chains. We want to token factor all of the input chains to these nodes</span>
+<a name="l02653"></a>02653 <span class="comment">// together. However, if any of the input chains is actually one of the</span>
+<a name="l02654"></a>02654 <span class="comment">// nodes matched in this pattern, then we have an intra-match reference.</span>
+<a name="l02655"></a>02655 <span class="comment">// Ignore these because the newly token factored chain should not refer to</span>
+<a name="l02656"></a>02656 <span class="comment">// the old nodes.</span>
+<a name="l02657"></a>02657 <span class="keywordtype">unsigned</span> NumChains = MatcherTable[MatcherIndex++];
+<a name="l02658"></a>02658 assert(NumChains != 0 && <span class="stringliteral">"Can't TF zero chains"</span>);
+<a name="l02659"></a>02659
+<a name="l02660"></a>02660 assert(ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>() &&
+<a name="l02661"></a>02661 <span class="stringliteral">"Should only have one EmitMergeInputChains per match"</span>);
+<a name="l02662"></a>02662
+<a name="l02663"></a>02663 <span class="comment">// Read all of the chained nodes.</span>
+<a name="l02664"></a>02664 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumChains; ++i) {
+<a name="l02665"></a>02665 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02666"></a>02666 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02667"></a>02667 ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(RecordedNodes[RecNo].first.getNode());
+<a name="l02668"></a>02668
+<a name="l02669"></a>02669 <span class="comment">// FIXME: What if other value results of the node have uses not matched</span>
+<a name="l02670"></a>02670 <span class="comment">// by this pattern?</span>
+<a name="l02671"></a>02671 <span class="keywordflow">if</span> (ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>() != NodeToMatch &&
+<a name="l02672"></a>02672 !RecordedNodes[RecNo].first.hasOneUse()) {
+<a name="l02673"></a>02673 ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l02674"></a>02674 <span class="keywordflow">break</span>;
+<a name="l02675"></a>02675 }
+<a name="l02676"></a>02676 }
+<a name="l02677"></a>02677
+<a name="l02678"></a>02678 <span class="comment">// If the inner loop broke out, the match fails.</span>
+<a name="l02679"></a>02679 <span class="keywordflow">if</span> (ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>())
+<a name="l02680"></a>02680 <span class="keywordflow">break</span>;
+<a name="l02681"></a>02681
+<a name="l02682"></a>02682 <span class="comment">// Merge the input chains if they are not intra-pattern references.</span>
+<a name="l02683"></a>02683 InputChain = <a class="code" href="SelectionDAGISel_8cpp.html#aeb0bc3fb3008d1f61c5a1adb0b901c82">HandleMergeInputChains</a>(ChainNodesMatched, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>);
+<a name="l02684"></a>02684
+<a name="l02685"></a>02685 <span class="keywordflow">if</span> (InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() == 0)
+<a name="l02686"></a>02686 <span class="keywordflow">break</span>; <span class="comment">// Failed to merge.</span>
+<a name="l02687"></a>02687
+<a name="l02688"></a>02688 <span class="keywordflow">continue</span>;
+<a name="l02689"></a>02689 }
+<a name="l02690"></a>02690
+<a name="l02691"></a>02691 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a34176e51f3d862614aedb0c80d053daf">OPC_EmitCopyToReg</a>: {
+<a name="l02692"></a>02692 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02693"></a>02693 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02694"></a>02694 <span class="keywordtype">unsigned</span> DestPhysReg = MatcherTable[MatcherIndex++];
+<a name="l02695"></a>02695
+<a name="l02696"></a>02696 <span class="keywordflow">if</span> (InputChain.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() == 0)
+<a name="l02697"></a>02697 InputChain = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ad755b1a25cf0c4507d5f615f64471ae9">getEntryNode</a>();
+<a name="l02698"></a>02698
+<a name="l02699"></a>02699 InputChain = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a64720b4e2b3deb1f80177f31d1843691">getCopyToReg</a>(InputChain, NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a630d6793e4444e4996dfa80f1fce18c8" title="getDebugLoc - Return the source location info.">getDebugLoc</a>(),
+<a name="l02700"></a>02700 DestPhysReg, RecordedNodes[RecNo].first,
+<a name="l02701"></a>02701 InputGlue);
+<a name="l02702"></a>02702
+<a name="l02703"></a>02703 InputGlue = InputChain.<a class="code" href="classllvm_1_1SDValue.html#a040481b9bda32faa6b1435532405d88f">getValue</a>(1);
+<a name="l02704"></a>02704 <span class="keywordflow">continue</span>;
+<a name="l02705"></a>02705 }
+<a name="l02706"></a>02706
+<a name="l02707"></a>02707 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2ad838222111c653f48a357804d174b813">OPC_EmitNodeXForm</a>: {
+<a name="l02708"></a>02708 <span class="keywordtype">unsigned</span> XFormNo = MatcherTable[MatcherIndex++];
+<a name="l02709"></a>02709 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02710"></a>02710 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02711"></a>02711 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> Res = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a888ef6531e4abe62f1c03acd578461fd">RunSDNodeXForm</a>(RecordedNodes[RecNo].first, XFormNo);
+<a name="l02712"></a>02712 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::pair<SDValue,SDNode*>(Res, (<a class="code" href="classllvm_1_1SDNode.html">SDNode</a>*) 0));
+<a name="l02713"></a>02713 <span class="keywordflow">continue</span>;
+<a name="l02714"></a>02714 }
+<a name="l02715"></a>02715
+<a name="l02716"></a>02716 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a18ced310ef5a5b64fd138b7fddafb7b5">OPC_EmitNode</a>:
+<a name="l02717"></a>02717 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a835330e877233ea5d7faee0e80f16c43">OPC_MorphNodeTo</a>: {
+<a name="l02718"></a>02718 uint16_t TargetOpc = MatcherTable[MatcherIndex++];
+<a name="l02719"></a>02719 TargetOpc |= (<span class="keywordtype">unsigned</span> short)MatcherTable[MatcherIndex++] << 8;
+<a name="l02720"></a>02720 <span class="keywordtype">unsigned</span> EmitNodeInfo = MatcherTable[MatcherIndex++];
+<a name="l02721"></a>02721 <span class="comment">// Get the result VT list.</span>
+<a name="l02722"></a>02722 <span class="keywordtype">unsigned</span> NumVTs = MatcherTable[MatcherIndex++];
+<a name="l02723"></a>02723 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<EVT, 4></a> VTs;
+<a name="l02724"></a>02724 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumVTs; ++i) {
+<a name="l02725"></a>02725 <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a> VT =
+<a name="l02726"></a>02726 (<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50c">MVT::SimpleValueType</a>)MatcherTable[MatcherIndex++];
+<a name="l02727"></a>02727 <span class="keywordflow">if</span> (VT == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a>) VT = <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad114b2de47d6b8da17f3f60359e4d8e7">TLI</a>.<a class="code" href="classllvm_1_1TargetLowering.html#a725d20a2d00a8b54cc01e6f02cb31522">getPointerTy</a>().<a class="code" href="classllvm_1_1MVT.html#a27bda7d8e8e4f0337650a892f3c9b46a">SimpleTy</a>;
+<a name="l02728"></a>02728 VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(VT);
+<a name="l02729"></a>02729 }
+<a name="l02730"></a>02730
+<a name="l02731"></a>02731 <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_Chain)
+<a name="l02732"></a>02732 VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>);
+<a name="l02733"></a>02733 <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_GlueOutput)
+<a name="l02734"></a>02734 VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>);
+<a name="l02735"></a>02735
+<a name="l02736"></a>02736 <span class="comment">// This is hot code, so optimize the two most common cases of 1 and 2</span>
+<a name="l02737"></a>02737 <span class="comment">// results.</span>
+<a name="l02738"></a>02738 <a class="code" href="structllvm_1_1SDVTList.html">SDVTList</a> VTList;
+<a name="l02739"></a>02739 <span class="keywordflow">if</span> (VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() == 1)
+<a name="l02740"></a>02740 VTList = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a196c23d6cb4d768d037970f1f35bbf66">getVTList</a>(VTs[0]);
+<a name="l02741"></a>02741 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() == 2)
+<a name="l02742"></a>02742 VTList = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a196c23d6cb4d768d037970f1f35bbf66">getVTList</a>(VTs[0], VTs[1]);
+<a name="l02743"></a>02743 <span class="keywordflow">else</span>
+<a name="l02744"></a>02744 VTList = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#a196c23d6cb4d768d037970f1f35bbf66">getVTList</a>(VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a7b68be12c974b6b70bc86062f221a344" title="data - Return a pointer to the vector's buffer, even if empty().">data</a>(), VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>());
+<a name="l02745"></a>02745
+<a name="l02746"></a>02746 <span class="comment">// Get the operand list.</span>
+<a name="l02747"></a>02747 <span class="keywordtype">unsigned</span> NumOps = MatcherTable[MatcherIndex++];
+<a name="l02748"></a>02748 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SDValue, 8></a> Ops;
+<a name="l02749"></a>02749 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumOps; ++i) {
+<a name="l02750"></a>02750 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02751"></a>02751 <span class="keywordflow">if</span> (RecNo & 128)
+<a name="l02752"></a>02752 RecNo = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(RecNo, MatcherTable, MatcherIndex);
+<a name="l02753"></a>02753
+<a name="l02754"></a>02754 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid EmitNode"</span>);
+<a name="l02755"></a>02755 Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(RecordedNodes[RecNo].first);
+<a name="l02756"></a>02756 }
+<a name="l02757"></a>02757
+<a name="l02758"></a>02758 <span class="comment">// If there are variadic operands to add, handle them now.</span>
+<a name="l02759"></a>02759 <span class="keywordflow">if</span> (EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5a595afa3f4e6a97e0ae7c70ae9ff0963f">OPFL_VariadicInfo</a>) {
+<a name="l02760"></a>02760 <span class="comment">// Determine the start index to copy from.</span>
+<a name="l02761"></a>02761 <span class="keywordtype">unsigned</span> FirstOpToCopy = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a44db62a12476aec69cc958a5502f94df">getNumFixedFromVariadicInfo</a>(EmitNodeInfo);
+<a name="l02762"></a>02762 FirstOpToCopy += (EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5a7638541ce06fd89565a0ba8c84161b9c">OPFL_Chain</a>) ? 1 : 0;
+<a name="l02763"></a>02763 assert(NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#abc5c2f1d47a517373030133c6a102106">getNumOperands</a>() >= FirstOpToCopy &&
+<a name="l02764"></a>02764 <span class="stringliteral">"Invalid variadic node"</span>);
+<a name="l02765"></a>02765 <span class="comment">// Copy all of the variadic operands, not including a potential glue</span>
+<a name="l02766"></a>02766 <span class="comment">// input.</span>
+<a name="l02767"></a>02767 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = FirstOpToCopy, e = NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#abc5c2f1d47a517373030133c6a102106">getNumOperands</a>();
+<a name="l02768"></a>02768 i != e; ++i) {
+<a name="l02769"></a>02769 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> V = NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(i);
+<a name="l02770"></a>02770 <span class="keywordflow">if</span> (V.<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>) <span class="keywordflow">break</span>;
+<a name="l02771"></a>02771 Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(V);
+<a name="l02772"></a>02772 }
+<a name="l02773"></a>02773 }
+<a name="l02774"></a>02774
+<a name="l02775"></a>02775 <span class="comment">// If this has chain/glue inputs, add them.</span>
+<a name="l02776"></a>02776 <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_Chain)
+<a name="l02777"></a>02777 Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(InputChain);
+<a name="l02778"></a>02778 <span class="keywordflow">if</span> ((EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5a1cb68e136df2791b9b9442d53c373ccf">OPFL_GlueInput</a>) && InputGlue.<a class="code" href="classllvm_1_1SDValue.html#a3fad042e27ba626acf5366c845b352d3" title="get the SDNode which holds the desired result">getNode</a>() != 0)
+<a name="l02779"></a>02779 Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(InputGlue);
+<a name="l02780"></a>02780
+<a name="l02781"></a>02781 <span class="comment">// Create the node.</span>
+<a name="l02782"></a>02782 <a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *Res = 0;
+<a name="l02783"></a>02783 <span class="keywordflow">if</span> (Opcode != <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a835330e877233ea5d7faee0e80f16c43">OPC_MorphNodeTo</a>) {
+<a name="l02784"></a>02784 <span class="comment">// If this is a normal EmitNode command, just create the new node and</span>
+<a name="l02785"></a>02785 <span class="comment">// add the results to the RecordedNodes list.</span>
+<a name="l02786"></a>02786 Res = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ad70be180b80a5767ac863b95b932dd31">getMachineNode</a>(TargetOpc, NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#a630d6793e4444e4996dfa80f1fce18c8" title="getDebugLoc - Return the source location info.">getDebugLoc</a>(),
+<a name="l02787"></a>02787 VTList, Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a7b68be12c974b6b70bc86062f221a344" title="data - Return a pointer to the vector's buffer, even if empty().">data</a>(), Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>());
+<a name="l02788"></a>02788
+<a name="l02789"></a>02789 <span class="comment">// Add all the non-glue/non-chain results to the RecordedNodes list.</span>
+<a name="l02790"></a>02790 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i) {
+<a name="l02791"></a>02791 <span class="keywordflow">if</span> (VTs[i] == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a> || VTs[i] == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>) <span class="keywordflow">break</span>;
+<a name="l02792"></a>02792 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(std::pair<SDValue,SDNode*>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, i),
+<a name="l02793"></a>02793 (<a class="code" href="classllvm_1_1SDNode.html">SDNode</a>*) 0));
+<a name="l02794"></a>02794 }
+<a name="l02795"></a>02795
+<a name="l02796"></a>02796 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a062083eb3ff8c441c73d3bf42ca09bba">ISD::DELETED_NODE</a>) {
+<a name="l02797"></a>02797 Res = MorphNode(NodeToMatch, TargetOpc, VTList, Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a7b68be12c974b6b70bc86062f221a344" title="data - Return a pointer to the vector's buffer, even if empty().">data</a>(), Ops.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(),
+<a name="l02798"></a>02798 EmitNodeInfo);
+<a name="l02799"></a>02799 } <span class="keywordflow">else</span> {
+<a name="l02800"></a>02800 <span class="comment">// NodeToMatch was eliminated by CSE when the target changed the DAG.</span>
+<a name="l02801"></a>02801 <span class="comment">// We will visit the equivalent node later.</span>
+<a name="l02802"></a>02802 <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">"Node was eliminated by CSE\n"</span>);
+<a name="l02803"></a>02803 <span class="keywordflow">return</span> 0;
+<a name="l02804"></a>02804 }
+<a name="l02805"></a>02805
+<a name="l02806"></a>02806 <span class="comment">// If the node had chain/glue results, update our notion of the current</span>
+<a name="l02807"></a>02807 <span class="comment">// chain and glue.</span>
+<a name="l02808"></a>02808 <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_GlueOutput) {
+<a name="l02809"></a>02809 InputGlue = <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>()-1);
+<a name="l02810"></a>02810 <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_Chain)
+<a name="l02811"></a>02811 InputChain = <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>()-2);
+<a name="l02812"></a>02812 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (EmitNodeInfo & OPFL_Chain)
+<a name="l02813"></a>02813 InputChain = <a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(Res, VTs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>()-1);
+<a name="l02814"></a>02814
+<a name="l02815"></a>02815 <span class="comment">// If the OPFL_MemRefs glue is set on this node, slap all of the</span>
+<a name="l02816"></a>02816 <span class="comment">// accumulated memrefs onto it.</span>
+<a name="l02817"></a>02817 <span class="comment">//</span>
+<a name="l02818"></a>02818 <span class="comment">// FIXME: This is vastly incorrect for patterns with multiple outputs</span>
+<a name="l02819"></a>02819 <span class="comment">// instructions that access memory and for ComplexPatterns that match</span>
+<a name="l02820"></a>02820 <span class="comment">// loads.</span>
+<a name="l02821"></a>02821 <span class="keywordflow">if</span> (EmitNodeInfo & <a class="code" href="classllvm_1_1SelectionDAGISel.html#ad7a717074584371d05b88acf2955b3c5aa0548d260560d7be090cd8b265efa290">OPFL_MemRefs</a>) {
+<a name="l02822"></a>02822 <span class="comment">// Only attach load or store memory operands if the generated</span>
+<a name="l02823"></a>02823 <span class="comment">// instruction may load or store.</span>
+<a name="l02824"></a>02824 <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &MCID = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#ac13d0f6f2c915757013b101ef6e8afbc">getInstrInfo</a>()-><a class="code" href="classllvm_1_1MCInstrInfo.html#ab16f5a81fccfe4b7f645ba5a74ffad02">get</a>(TargetOpc);
+<a name="l02825"></a>02825 <span class="keywordtype">bool</span> mayLoad = MCID.<a class="code" href="classllvm_1_1MCInstrDesc.html#ad526db981cdc3361585a92b6bba42137">mayLoad</a>();
+<a name="l02826"></a>02826 <span class="keywordtype">bool</span> mayStore = MCID.<a class="code" href="classllvm_1_1MCInstrDesc.html#a7146d8440bad26a32a80ae4362298783">mayStore</a>();
+<a name="l02827"></a>02827
+<a name="l02828"></a>02828 <span class="keywordtype">unsigned</span> NumMemRefs = 0;
+<a name="l02829"></a>02829 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a0a0e9357078c10fad480c4be2e944666">SmallVector<MachineMemOperand*, 2>::const_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> =
+<a name="l02830"></a>02830 MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), E = MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">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="l02831"></a>02831 <span class="keywordflow">if</span> ((*I)->isLoad()) {
+<a name="l02832"></a>02832 <span class="keywordflow">if</span> (mayLoad)
+<a name="l02833"></a>02833 ++NumMemRefs;
+<a name="l02834"></a>02834 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((*I)->isStore()) {
+<a name="l02835"></a>02835 <span class="keywordflow">if</span> (mayStore)
+<a name="l02836"></a>02836 ++NumMemRefs;
+<a name="l02837"></a>02837 } <span class="keywordflow">else</span> {
+<a name="l02838"></a>02838 ++NumMemRefs;
+<a name="l02839"></a>02839 }
+<a name="l02840"></a>02840 }
+<a name="l02841"></a>02841
+<a name="l02842"></a>02842 <a class="code" href="classllvm_1_1MachineMemOperand.html">MachineSDNode::mmo_iterator</a> MemRefs =
+<a name="l02843"></a>02843 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#a49220493987f2152de1c37f2d6ba9c44">allocateMemRefsArray</a>(NumMemRefs);
+<a name="l02844"></a>02844
+<a name="l02845"></a>02845 <a class="code" href="classllvm_1_1MachineMemOperand.html">MachineSDNode::mmo_iterator</a> MemRefsPos = MemRefs;
+<a name="l02846"></a>02846 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a0a0e9357078c10fad480c4be2e944666">SmallVector<MachineMemOperand*, 2>::const_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> =
+<a name="l02847"></a>02847 MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), E = MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">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="l02848"></a>02848 <span class="keywordflow">if</span> ((*I)->isLoad()) {
+<a name="l02849"></a>02849 <span class="keywordflow">if</span> (mayLoad)
+<a name="l02850"></a>02850 *MemRefsPos++ = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l02851"></a>02851 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((*I)->isStore()) {
+<a name="l02852"></a>02852 <span class="keywordflow">if</span> (mayStore)
+<a name="l02853"></a>02853 *MemRefsPos++ = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l02854"></a>02854 } <span class="keywordflow">else</span> {
+<a name="l02855"></a>02855 *MemRefsPos++ = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l02856"></a>02856 }
+<a name="l02857"></a>02857 }
+<a name="l02858"></a>02858
+<a name="l02859"></a>02859 cast<MachineSDNode>(Res)
+<a name="l02860"></a>02860 ->setMemRefs(MemRefs, MemRefs + NumMemRefs);
+<a name="l02861"></a>02861 }
+<a name="l02862"></a>02862
+<a name="l02863"></a>02863 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" "</span>
+<a name="l02864"></a>02864 << (Opcode == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a835330e877233ea5d7faee0e80f16c43">OPC_MorphNodeTo</a> ? <span class="stringliteral">"Morphed"</span> : <span class="stringliteral">"Created"</span>)
+<a name="l02865"></a>02865 << <span class="stringliteral">" node: "</span>; Res-><a class="code" href="classllvm_1_1SDNode.html#a535ca517df1b4ae62e75475141e65787" title="dump - Dump this node, for debugging.">dump</a>(<a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>); <a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"\n"</span>);
+<a name="l02866"></a>02866
+<a name="l02867"></a>02867 <span class="comment">// If this was a MorphNodeTo then we're completely done!</span>
+<a name="l02868"></a>02868 <span class="keywordflow">if</span> (Opcode == <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a835330e877233ea5d7faee0e80f16c43">OPC_MorphNodeTo</a>) {
+<a name="l02869"></a>02869 <span class="comment">// Update chain and glue uses.</span>
+<a name="l02870"></a>02870 UpdateChainsAndGlue(NodeToMatch, InputChain, ChainNodesMatched,
+<a name="l02871"></a>02871 InputGlue, GlueResultNodesMatched, <span class="keyword">true</span>);
+<a name="l02872"></a>02872 <span class="keywordflow">return</span> Res;
+<a name="l02873"></a>02873 }
+<a name="l02874"></a>02874
+<a name="l02875"></a>02875 <span class="keywordflow">continue</span>;
+<a name="l02876"></a>02876 }
+<a name="l02877"></a>02877
+<a name="l02878"></a>02878 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a85094fdbb1ef3122346d18512b2344ec">OPC_MarkGlueResults</a>: {
+<a name="l02879"></a>02879 <span class="keywordtype">unsigned</span> NumNodes = MatcherTable[MatcherIndex++];
+<a name="l02880"></a>02880
+<a name="l02881"></a>02881 <span class="comment">// Read and remember all the glue-result nodes.</span>
+<a name="l02882"></a>02882 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumNodes; ++i) {
+<a name="l02883"></a>02883 <span class="keywordtype">unsigned</span> RecNo = MatcherTable[MatcherIndex++];
+<a name="l02884"></a>02884 <span class="keywordflow">if</span> (RecNo & 128)
+<a name="l02885"></a>02885 RecNo = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(RecNo, MatcherTable, MatcherIndex);
+<a name="l02886"></a>02886
+<a name="l02887"></a>02887 assert(RecNo < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02888"></a>02888 GlueResultNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(RecordedNodes[RecNo].first.getNode());
+<a name="l02889"></a>02889 }
+<a name="l02890"></a>02890 <span class="keywordflow">continue</span>;
+<a name="l02891"></a>02891 }
+<a name="l02892"></a>02892
+<a name="l02893"></a>02893 <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a32bc192d568793fb156fd6d6b75cb3c2a38a7e398a5168f046f5f475419fd12fd">OPC_CompleteMatch</a>: {
+<a name="l02894"></a>02894 <span class="comment">// The match has been completed, and any new nodes (if any) have been</span>
+<a name="l02895"></a>02895 <span class="comment">// created. Patch up references to the matched dag to use the newly</span>
+<a name="l02896"></a>02896 <span class="comment">// created nodes.</span>
+<a name="l02897"></a>02897 <span class="keywordtype">unsigned</span> NumResults = MatcherTable[MatcherIndex++];
+<a name="l02898"></a>02898
+<a name="l02899"></a>02899 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumResults; ++i) {
+<a name="l02900"></a>02900 <span class="keywordtype">unsigned</span> ResSlot = MatcherTable[MatcherIndex++];
+<a name="l02901"></a>02901 <span class="keywordflow">if</span> (ResSlot & 128)
+<a name="l02902"></a>02902 ResSlot = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(ResSlot, MatcherTable, MatcherIndex);
+<a name="l02903"></a>02903
+<a name="l02904"></a>02904 assert(ResSlot < RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() && <span class="stringliteral">"Invalid CheckSame"</span>);
+<a name="l02905"></a>02905 <a class="code" href="classllvm_1_1SDValue.html">SDValue</a> Res = RecordedNodes[ResSlot].first;
+<a name="l02906"></a>02906
+<a name="l02907"></a>02907 assert(i < NodeToMatch->getNumValues() &&
+<a name="l02908"></a>02908 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(i) != <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a> &&
+<a name="l02909"></a>02909 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(i) != <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a> &&
+<a name="l02910"></a>02910 <span class="stringliteral">"Invalid number of results to complete!"</span>);
+<a name="l02911"></a>02911 assert((NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(i) == Res.getValueType() ||
+<a name="l02912"></a>02912 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(i) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a> ||
+<a name="l02913"></a>02913 Res.getValueType() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca081c1b396411c5dbcf5c0d9491f4f6ec">MVT::iPTR</a> ||
+<a name="l02914"></a>02914 NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(i).<a class="code" href="structllvm_1_1EVT.html#a8cca25ddb3be86ad23567dc8d36dacd3" title="getSizeInBits - Return the size of the specified value type in bits.">getSizeInBits</a>() ==
+<a name="l02915"></a>02915 Res.getValueType().getSizeInBits()) &&
+<a name="l02916"></a>02916 <span class="stringliteral">"invalid replacement"</span>);
+<a name="l02917"></a>02917 <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>-><a class="code" href="classllvm_1_1SelectionDAG.html#ac630ccda26fea2f45afa3fb89bc1a8f4">ReplaceAllUsesOfValueWith</a>(<a class="code" href="classllvm_1_1SDValue.html">SDValue</a>(NodeToMatch, i), Res);
+<a name="l02918"></a>02918 }
+<a name="l02919"></a>02919
+<a name="l02920"></a>02920 <span class="comment">// If the root node defines glue, add it to the glue nodes to update list.</span>
+<a name="l02921"></a>02921 <span class="keywordflow">if</span> (NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#aed0958deb6d25f9fdccd7518e26b50f8">getValueType</a>(NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#ab319fc51db27ec95fd50a910c7ccec94">getNumValues</a>()-1) == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca59a1908cf136662bcfdc11ed49515ca9">MVT::Glue</a>)
+<a name="l02922"></a>02922 GlueResultNodesMatched.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(NodeToMatch);
+<a name="l02923"></a>02923
+<a name="l02924"></a>02924 <span class="comment">// Update chain and glue uses.</span>
+<a name="l02925"></a>02925 UpdateChainsAndGlue(NodeToMatch, InputChain, ChainNodesMatched,
+<a name="l02926"></a>02926 InputGlue, GlueResultNodesMatched, <span class="keyword">false</span>);
+<a name="l02927"></a>02927
+<a name="l02928"></a>02928 assert(NodeToMatch-><a class="code" href="classllvm_1_1SDNode.html#afc071edeb7e2007d000374eba843f76a">use_empty</a>() &&
+<a name="l02929"></a>02929 <span class="stringliteral">"Didn't replace all uses of the node?"</span>);
+<a name="l02930"></a>02930
+<a name="l02931"></a>02931 <span class="comment">// FIXME: We just return here, which interacts correctly with SelectRoot</span>
+<a name="l02932"></a>02932 <span class="comment">// above. We should fix this to not return an SDNode* anymore.</span>
+<a name="l02933"></a>02933 <span class="keywordflow">return</span> 0;
+<a name="l02934"></a>02934 }
+<a name="l02935"></a>02935 }
+<a name="l02936"></a>02936
+<a name="l02937"></a>02937 <span class="comment">// If the code reached this point, then the match failed. See if there is</span>
+<a name="l02938"></a>02938 <span class="comment">// another child to try in the current 'Scope', otherwise pop it until we</span>
+<a name="l02939"></a>02939 <span class="comment">// find a case to check.</span>
+<a name="l02940"></a>02940 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" Match failed at index "</span> << CurrentOpcodeIndex << <span class="stringliteral">"\n"</span>);
+<a name="l02941"></a>02941 ++NumDAGIselRetries;
+<a name="l02942"></a>02942 <span class="keywordflow">while</span> (1) {
+<a name="l02943"></a>02943 <span class="keywordflow">if</span> (MatchScopes.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>()) {
+<a name="l02944"></a>02944 CannotYetSelect(NodeToMatch);
+<a name="l02945"></a>02945 <span class="keywordflow">return</span> 0;
+<a name="l02946"></a>02946 }
+<a name="l02947"></a>02947
+<a name="l02948"></a>02948 <span class="comment">// Restore the interpreter state back to the point where the scope was</span>
+<a name="l02949"></a>02949 <span class="comment">// formed.</span>
+<a name="l02950"></a>02950 MatchScope &LastScope = MatchScopes.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#acd9e771a3296c6b24146955754620557">back</a>();
+<a name="l02951"></a>02951 RecordedNodes.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a102d0ad36060677286c3aefb812e5512">resize</a>(LastScope.NumRecordedNodes);
+<a name="l02952"></a>02952 NodeStack.clear();
+<a name="l02953"></a>02953 NodeStack.append(LastScope.NodeStack.begin(), LastScope.NodeStack.end());
+<a name="l02954"></a>02954 N = NodeStack.back();
+<a name="l02955"></a>02955
+<a name="l02956"></a>02956 <span class="keywordflow">if</span> (LastScope.NumMatchedMemRefs != MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>())
+<a name="l02957"></a>02957 MatchedMemRefs.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a102d0ad36060677286c3aefb812e5512">resize</a>(LastScope.NumMatchedMemRefs);
+<a name="l02958"></a>02958 MatcherIndex = LastScope.FailIndex;
+<a name="l02959"></a>02959
+<a name="l02960"></a>02960 <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">" Continuing at "</span> << MatcherIndex << <span class="stringliteral">"\n"</span>);
+<a name="l02961"></a>02961
+<a name="l02962"></a>02962 InputChain = LastScope.InputChain;
+<a name="l02963"></a>02963 InputGlue = LastScope.InputGlue;
+<a name="l02964"></a>02964 <span class="keywordflow">if</span> (!LastScope.HasChainNodesMatched)
+<a name="l02965"></a>02965 ChainNodesMatched.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l02966"></a>02966 <span class="keywordflow">if</span> (!LastScope.HasGlueResultNodesMatched)
+<a name="l02967"></a>02967 GlueResultNodesMatched.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l02968"></a>02968
+<a name="l02969"></a>02969 <span class="comment">// Check to see what the offset is at the new MatcherIndex. If it is zero</span>
+<a name="l02970"></a>02970 <span class="comment">// we have reached the end of this scope, otherwise we have another child</span>
+<a name="l02971"></a>02971 <span class="comment">// in the current scope to try.</span>
+<a name="l02972"></a>02972 <span class="keywordtype">unsigned</span> NumToSkip = MatcherTable[MatcherIndex++];
+<a name="l02973"></a>02973 <span class="keywordflow">if</span> (NumToSkip & 128)
+<a name="l02974"></a>02974 NumToSkip = <a class="code" href="SelectionDAGISel_8cpp.html#a27774280441b6460e4183ab3054ea406" title="GetVBR - decode a vbr encoding whose top bit is set.">GetVBR</a>(NumToSkip, MatcherTable, MatcherIndex);
+<a name="l02975"></a>02975
+<a name="l02976"></a>02976 <span class="comment">// If we have another child in this scope to match, update FailIndex and</span>
+<a name="l02977"></a>02977 <span class="comment">// try it.</span>
+<a name="l02978"></a>02978 <span class="keywordflow">if</span> (NumToSkip != 0) {
+<a name="l02979"></a>02979 LastScope.FailIndex = MatcherIndex+NumToSkip;
+<a name="l02980"></a>02980 <span class="keywordflow">break</span>;
+<a name="l02981"></a>02981 }
+<a name="l02982"></a>02982
+<a name="l02983"></a>02983 <span class="comment">// End of this scope, pop it and try the next child in the containing</span>
+<a name="l02984"></a>02984 <span class="comment">// scope.</span>
+<a name="l02985"></a>02985 MatchScopes.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#a1f2303df9bbee2233c11d61c2f6f7930">pop_back</a>();
+<a name="l02986"></a>02986 }
+<a name="l02987"></a>02987 }
+<a name="l02988"></a>02988 }
+<a name="l02989"></a>02989
+<a name="l02990"></a>02990
+<a name="l02991"></a>02991
+<a name="l02992"></a>02992 <span class="keywordtype">void</span> SelectionDAGISel::CannotYetSelect(<a class="code" href="classllvm_1_1SDNode.html">SDNode</a> *N) {
+<a name="l02993"></a>02993 std::string msg;
+<a name="l02994"></a>02994 <a class="code" href="classllvm_1_1raw__string__ostream.html">raw_string_ostream</a> Msg(msg);
+<a name="l02995"></a>02995 Msg << <span class="stringliteral">"Cannot select: "</span>;
+<a name="l02996"></a>02996
+<a name="l02997"></a>02997 <span class="keywordflow">if</span> (N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110afc09e0bddd693dcf9923e4df42473bd9">ISD::INTRINSIC_W_CHAIN</a> &&
+<a name="l02998"></a>02998 N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110ac771b9cda3b889242d457cc4d9b2159c">ISD::INTRINSIC_WO_CHAIN</a> &&
+<a name="l02999"></a>02999 N-><a class="code" href="classllvm_1_1SDNode.html#af0d328f3f61168f4ea7d6e4044af4f97">getOpcode</a>() != <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a2df96794a99f5d3b4415c4a84e616140">ISD::INTRINSIC_VOID</a>) {
+<a name="l03000"></a>03000 N-><a class="code" href="classllvm_1_1SDNode.html#a3bdf9b552877594b06bbfbb8303285c7">printrFull</a>(Msg, <a class="code" href="classllvm_1_1SelectionDAGISel.html#a2b37615f95f3e2fdd5564188c0965132">CurDAG</a>);
+<a name="l03001"></a>03001 Msg << <span class="stringliteral">"\nIn function: "</span> << <a class="code" href="classllvm_1_1SelectionDAGISel.html#a23107e32342f5488a5edfa71aff54700">MF</a>-><a class="code" href="classllvm_1_1MachineFunction.html#ae215c5c2aecd18c4e68a94187d9cdbf1">getName</a>();
+<a name="l03002"></a>03002 } <span class="keywordflow">else</span> {
+<a name="l03003"></a>03003 <span class="keywordtype">bool</span> HasInputChain = N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(0).<a class="code" href="classllvm_1_1SDValue.html#a7d2ad4aa4277eb4e1138ff9791c8fbb7">getValueType</a>() == <a class="code" href="classllvm_1_1MVT.html#afd69b4f2dff97a2d7c0192cc769ef50ca62a222acce6360abd2726719fabc2797">MVT::Other</a>;
+<a name="l03004"></a>03004 <span class="keywordtype">unsigned</span> iid =
+<a name="l03005"></a>03005 cast<ConstantSDNode>(N-><a class="code" href="classllvm_1_1SDNode.html#a836c27481205f56e708fe0c15538d5ff">getOperand</a>(HasInputChain))->getZExtValue();
+<a name="l03006"></a>03006 <span class="keywordflow">if</span> (iid < Intrinsic::num_intrinsics)
+<a name="l03007"></a>03007 Msg << <span class="stringliteral">"intrinsic %"</span> << <a class="code" href="namespacellvm_1_1Intrinsic.html#a2950ceaccea680f8278bfcb7517cc9ce">Intrinsic::getName</a>((<a class="code" href="namespacellvm_1_1Intrinsic.html#a73349916f7e54a6b988a3646c7a02e90">Intrinsic::ID</a>)iid);
+<a name="l03008"></a>03008 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetIntrinsicInfo.html">TargetIntrinsicInfo</a> *TII = <a class="code" href="classllvm_1_1SelectionDAGISel.html#a306086e3142a8dd0bdf6698bde8672e1">TM</a>.<a class="code" href="classllvm_1_1TargetMachine.html#a66733f5687c5c458d3c281d64167597e">getIntrinsicInfo</a>())
+<a name="l03009"></a>03009 Msg << <span class="stringliteral">"target intrinsic %"</span> << TII->getName(iid);
+<a name="l03010"></a>03010 <span class="keywordflow">else</span>
+<a name="l03011"></a>03011 Msg << <span class="stringliteral">"unknown intrinsic #"</span> << iid;
+<a name="l03012"></a>03012 }
+<a name="l03013"></a>03013 <a class="code" href="namespacellvm.html#af9521f126aaffcc4bbe06c554b8b4bc1">report_fatal_error</a>(Msg.str());
+<a name="l03014"></a>03014 }
+<a name="l03015"></a>03015
+<a name="l03016"></a>03016 <span class="keywordtype">char</span> <a class="code" href="classllvm_1_1SelectionDAGISel.html#a1f3ebb920b40c460c3b278c169cc67e3">SelectionDAGISel::ID</a> = 0;
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:46 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/SelectionDAGISel_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,62 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SelectionDAGISel.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="ResourcePriorityQueue.h",height=0.2,width=0.4,color="black",URL="$ResourcePriorityQueue_8h.html"];
+ Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="ResourcePriorityQueue.cpp",height=0.2,width=0.4,color="black",URL="$ResourcePriorityQueue_8cpp.html"];
+ Node2 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="ScheduleDAGVLIW.cpp",height=0.2,width=0.4,color="black",URL="$ScheduleDAGVLIW_8cpp.html"];
+ Node2 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="HexagonMachineScheduler.h",height=0.2,width=0.4,color="black",URL="$HexagonMachineScheduler_8h.html"];
+ Node5 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="HexagonMachineScheduler.cpp",height=0.2,width=0.4,color="black",URL="$HexagonMachineScheduler_8cpp.html"];
+ Node5 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="HexagonTargetMachine.cpp",height=0.2,width=0.4,color="black",URL="$HexagonTargetMachine_8cpp.html"];
+ Node1 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="ScheduleDAGFast.cpp",height=0.2,width=0.4,color="black",URL="$ScheduleDAGFast_8cpp.html"];
+ Node1 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="ScheduleDAGRRList.cpp",height=0.2,width=0.4,color="black",URL="$ScheduleDAGRRList_8cpp.html"];
+ Node1 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="SelectionDAGBuilder.cpp",height=0.2,width=0.4,color="black",URL="$SelectionDAGBuilder_8cpp.html"];
+ Node1 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="SelectionDAGISel.cpp",height=0.2,width=0.4,color="black",URL="$SelectionDAGISel_8cpp.html"];
+ Node1 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="ARMISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$ARMISelDAGToDAG_8cpp.html"];
+ Node1 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="SPUISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$SPUISelDAGToDAG_8cpp.html"];
+ Node1 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="HexagonISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$HexagonISelDAGToDAG_8cpp.html"];
+ Node1 -> Node15 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="HexagonISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$HexagonISelLowering_8cpp.html"];
+ Node1 -> Node16 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="MBlazeISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$MBlazeISelDAGToDAG_8cpp.html"];
+ Node1 -> Node17 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="MBlazeISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$MBlazeISelLowering_8cpp.html"];
+ Node1 -> Node18 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="MipsISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$MipsISelDAGToDAG_8cpp.html"];
+ Node1 -> Node19 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="MipsISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$MipsISelLowering_8cpp.html"];
+ Node1 -> Node20 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 [label="MSP430ISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$MSP430ISelDAGToDAG_8cpp.html"];
+ Node1 -> Node21 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 [label="MSP430ISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$MSP430ISelLowering_8cpp.html"];
+ Node1 -> Node22 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node22 [label="NVPTXISelDAGToDAG.h",height=0.2,width=0.4,color="black",URL="$NVPTXISelDAGToDAG_8h.html"];
+ Node22 -> Node23 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node23 [label="NVPTXISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$NVPTXISelDAGToDAG_8cpp.html"];
+ Node1 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 [label="PPCISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$PPCISelDAGToDAG_8cpp.html"];
+ Node1 -> Node25 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 [label="SparcISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$SparcISelDAGToDAG_8cpp.html"];
+ Node1 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 [label="X86ISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$X86ISelDAGToDAG_8cpp.html"];
+ Node1 -> Node27 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node27 [label="XCoreISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$XCoreISelDAGToDAG_8cpp.html"];
+ Node1 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 [label="XCoreISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$XCoreISelLowering_8cpp.html"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGISel_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,170 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SelectionDAGISel.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/BasicBlock.h",height=0.2,width=0.4,color="black",URL="$BasicBlock_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="llvm/Instruction.h",height=0.2,width=0.4,color="black",URL="$Instruction_8h.html"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="llvm/User.h",height=0.2,width=0.4,color="red",URL="$User_8h.html"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+ Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+ Node5 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+ Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+ Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="cassert",height=0.2,width=0.4,color="grey75"];
+ Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="cstring",height=0.2,width=0.4,color="grey75"];
+ Node7 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="string",height=0.2,width=0.4,color="grey75"];
+ Node5 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="llvm/ADT/ilist_node.h",height=0.2,width=0.4,color="black",URL="$ilist__node_8h.html"];
+ Node3 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="llvm/Support/DebugLoc.h",height=0.2,width=0.4,color="black",URL="$DebugLoc_8h.html"];
+ Node3 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="llvm/Instruction.def",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="llvm/SymbolTableListTraits.h",height=0.2,width=0.4,color="black",URL="$SymbolTableListTraits_8h.html"];
+ Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="llvm/ADT/ilist.h",height=0.2,width=0.4,color="black",URL="$ilist_8h.html"];
+ Node16 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+ Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="iterator",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="black",URL="$Twine_8h.html"];
+ Node19 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+ Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 [label="math.h",height=0.2,width=0.4,color="grey75"];
+ Node20 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node22 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node20 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node23 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+ Node20 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+ Node19 -> Node5 [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"];
+ Node2 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+ Node25 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="black",URL="$PassSupport_8h.html"];
+ Node26 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node27 [label="llvm/PassRegistry.h",height=0.2,width=0.4,color="black",URL="$PassRegistry_8h.html"];
+ Node27 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 [label="llvm/InitializePasses.h",height=0.2,width=0.4,color="black",URL="$InitializePasses_8h.html"];
+ Node26 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node29 [label="llvm/Support/Atomic.h",height=0.2,width=0.4,color="black",URL="$Atomic_8h.html"];
+ Node29 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node30 [label="llvm/Support/Valgrind.h",height=0.2,width=0.4,color="red",URL="$Valgrind_8h.html"];
+ Node30 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node31 [label="vector",height=0.2,width=0.4,color="grey75"];
+ Node25 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="black",URL="$PassAnalysisSupport_8h.html"];
+ Node32 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+ Node33 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 [label="llvm/CodeGen/SelectionDAG.h",height=0.2,width=0.4,color="black",URL="$SelectionDAG_8h.html"];
+ Node34 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node35 [label="llvm/ADT/DenseSet.h",height=0.2,width=0.4,color="black",URL="$DenseSet_8h.html"];
+ Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+ Node36 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node37 [label="llvm/ADT/StringMap.h",height=0.2,width=0.4,color="black",URL="$StringMap_8h.html"];
+ Node37 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node38 [label="llvm/Support/Allocator.h",height=0.2,width=0.4,color="red",URL="$Allocator_8h.html"];
+ Node38 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node38 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node38 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node38 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node37 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 [label="llvm/CodeGen/SelectionDAGNodes.h",height=0.2,width=0.4,color="red",URL="$SelectionDAGNodes_8h.html"];
+ Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node40 [label="llvm/Constants.h",height=0.2,width=0.4,color="red",URL="$Constants_8h.html"];
+ Node39 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node41 [label="llvm/Instructions.h",height=0.2,width=0.4,color="red",URL="$Instructions_8h.html"];
+ Node41 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node41 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node41 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node42 [label="llvm/ADT/FoldingSet.h",height=0.2,width=0.4,color="black",URL="$FoldingSet_8h.html"];
+ Node42 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node42 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node42 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> 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"];
+ Node39 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 [label="llvm/ADT/SmallPtrSet.h",height=0.2,width=0.4,color="red",URL="$SmallPtrSet_8h.html"];
+ Node44 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node44 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node45 [label="llvm/ADT/STLExtras.h",height=0.2,width=0.4,color="red",URL="$STLExtras_8h.html"];
+ Node45 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node45 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node46 [label="llvm/CodeGen/ISDOpcodes.h",height=0.2,width=0.4,color="black",URL="$ISDOpcodes_8h.html"];
+ Node39 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node47 [label="llvm/Support/RecyclingAllocator.h",height=0.2,width=0.4,color="red",URL="$RecyclingAllocator_8h.html"];
+ Node34 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node48 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="red",URL="$Target_2TargetMachine_8h.html"];
+ Node48 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node48 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node48 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node48 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node49 [label="map",height=0.2,width=0.4,color="grey75"];
+ Node34 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node50 [label="llvm/CodeGen/MachineFunctionPass.h",height=0.2,width=0.4,color="black",URL="$MachineFunctionPass_8h.html"];
+ Node50 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGNodes_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGNodes_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGNodes_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SelectionDAGNodes_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+9d181a048c602477a6da4e3dde4a73e8
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SelectionDAG_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SelectionDAG_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SelectionDAG_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SelectionDAG_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+3f55ab5887e03c5c0bb0f42013de4f7f
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,15 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SetOperations.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="PostDominators.cpp",height=0.2,width=0.4,color="black",URL="$PostDominators_8cpp.html"];
+ Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="MachineVerifier.cpp",height=0.2,width=0.4,color="black",URL="$MachineVerifier_8cpp.html"];
+ Node1 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="LinkArchives.cpp",height=0.2,width=0.4,color="black",URL="$LinkArchives_8cpp.html"];
+ Node1 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="LoopSimplify.cpp",height=0.2,width=0.4,color="black",URL="$LoopSimplify_8cpp.html"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SetOperations_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,127 @@
+<!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: SetOperations.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_5760af5717174facf3d4fa63878994a9.html">ADT</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SetOperations.h</div> </div>
+</div>
+<div class="contents">
+<a href="SetOperations_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/ADT/SetOperations.h - Generic Set Operations -------*- 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 generic set operations that may be used on set's of</span>
+<a name="l00011"></a>00011 <span class="comment">// different types, and different element types.</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_SETOPERATIONS_H</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_ADT_SETOPERATIONS_H</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 <span class="comment"></span>
+<a name="l00020"></a>00020 <span class="comment">/// set_union(A, B) - Compute A := A u B, return whether A changed.</span>
+<a name="l00021"></a>00021 <span class="comment">///</span>
+<a name="l00022"></a>00022 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> S1Ty, <span class="keyword">class</span> S2Ty>
+<a name="l00023"></a><a class="code" href="namespacellvm.html#a8b4f88b1fadc8f51a643e5faaa13afa6">00023</a> <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#a8b4f88b1fadc8f51a643e5faaa13afa6">set_union</a>(S1Ty &S1, <span class="keyword">const</span> S2Ty &S2) {
+<a name="l00024"></a>00024 <span class="keywordtype">bool</span> Changed = <span class="keyword">false</span>;
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="keywordflow">for</span> (<span class="keyword">typename</span> S2Ty::const_iterator SI = S2.begin(), SE = S2.end();
+<a name="l00027"></a>00027 SI != SE; ++SI)
+<a name="l00028"></a>00028 <span class="keywordflow">if</span> (S1.insert(*SI).second)
+<a name="l00029"></a>00029 Changed = <span class="keyword">true</span>;
+<a name="l00030"></a>00030
+<a name="l00031"></a>00031 <span class="keywordflow">return</span> Changed;
+<a name="l00032"></a>00032 }
+<a name="l00033"></a>00033 <span class="comment"></span>
+<a name="l00034"></a>00034 <span class="comment">/// set_intersect(A, B) - Compute A := A ^ B</span>
+<a name="l00035"></a>00035 <span class="comment">/// Identical to set_intersection, except that it works on set<>'s and</span>
+<a name="l00036"></a>00036 <span class="comment">/// is nicer to use. Functionally, this iterates through S1, removing</span>
+<a name="l00037"></a>00037 <span class="comment">/// elements that are not contained in S2.</span>
+<a name="l00038"></a>00038 <span class="comment">///</span>
+<a name="l00039"></a>00039 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> S1Ty, <span class="keyword">class</span> S2Ty>
+<a name="l00040"></a><a class="code" href="namespacellvm.html#a2162d123f222998300d308bdefdb38b9">00040</a> <span class="keywordtype">void</span> <a class="code" href="namespacellvm.html#a2162d123f222998300d308bdefdb38b9">set_intersect</a>(S1Ty &S1, <span class="keyword">const</span> S2Ty &S2) {
+<a name="l00041"></a>00041 <span class="keywordflow">for</span> (<span class="keyword">typename</span> S1Ty::iterator <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = S1.begin(); <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != S1.end();) {
+<a name="l00042"></a>00042 <span class="keyword">const</span> <span class="keyword">typename</span> S1Ty::key_type &E = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00043"></a>00043 ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00044"></a>00044 <span class="keywordflow">if</span> (!S2.count(E)) S1.erase(E); <span class="comment">// Erase element if not in S2</span>
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046 }
+<a name="l00047"></a>00047 <span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">/// set_difference(A, B) - Return A - B</span>
+<a name="l00049"></a>00049 <span class="comment">///</span>
+<a name="l00050"></a>00050 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> S1Ty, <span class="keyword">class</span> S2Ty>
+<a name="l00051"></a><a class="code" href="namespacellvm.html#ab471ffb4e400f1f924442e9149ce1b87">00051</a> S1Ty <a class="code" href="namespacellvm.html#ab471ffb4e400f1f924442e9149ce1b87">set_difference</a>(<span class="keyword">const</span> S1Ty &S1, <span class="keyword">const</span> S2Ty &S2) {
+<a name="l00052"></a>00052 S1Ty Result;
+<a name="l00053"></a>00053 <span class="keywordflow">for</span> (<span class="keyword">typename</span> S1Ty::const_iterator SI = S1.begin(), SE = S1.end();
+<a name="l00054"></a>00054 SI != SE; ++SI)
+<a name="l00055"></a>00055 <span class="keywordflow">if</span> (!S2.count(*SI)) <span class="comment">// if the element is not in set2</span>
+<a name="l00056"></a>00056 Result.insert(*SI);
+<a name="l00057"></a>00057 <span class="keywordflow">return</span> Result;
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00060"></a>00060 <span class="comment">/// set_subtract(A, B) - Compute A := A - B</span>
+<a name="l00061"></a>00061 <span class="comment">///</span>
+<a name="l00062"></a>00062 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> S1Ty, <span class="keyword">class</span> S2Ty>
+<a name="l00063"></a><a class="code" href="namespacellvm.html#a3e1137200d6e86367be1d605fdc14e6c">00063</a> <span class="keywordtype">void</span> <a class="code" href="namespacellvm.html#a3e1137200d6e86367be1d605fdc14e6c">set_subtract</a>(S1Ty &S1, <span class="keyword">const</span> S2Ty &S2) {
+<a name="l00064"></a>00064 <span class="keywordflow">for</span> (<span class="keyword">typename</span> S2Ty::const_iterator SI = S2.begin(), SE = S2.end();
+<a name="l00065"></a>00065 SI != SE; ++SI)
+<a name="l00066"></a>00066 S1.erase(*SI);
+<a name="l00067"></a>00067 }
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 } <span class="comment">// End llvm namespace</span>
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:37:50 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/SetVector_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SetVector_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SetVector_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SetVector_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,84 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SetVector.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="FindUsedTypes.h",height=0.2,width=0.4,color="black",URL="$FindUsedTypes_8h.html"];
+ Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="LinkAllPasses.h",height=0.2,width=0.4,color="black",URL="$LinkAllPasses_8h.html"];
+ Node2 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="FindUsedTypes.cpp",height=0.2,width=0.4,color="black",URL="$FindUsedTypes_8cpp.html"];
+ Node1 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="CodeExtractor.h",height=0.2,width=0.4,color="black",URL="$CodeExtractor_8h.html"];
+ Node5 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="LoopExtractor.cpp",height=0.2,width=0.4,color="black",URL="$LoopExtractor_8cpp.html"];
+ Node5 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="PartialInlining.cpp",height=0.2,width=0.4,color="black",URL="$PartialInlining_8cpp.html"];
+ Node5 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="CodeExtractor.cpp",height=0.2,width=0.4,color="black",URL="$CodeExtractor_8cpp.html"];
+ Node1 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="AliasAnalysisEvaluator.cpp",height=0.2,width=0.4,color="black",URL="$AliasAnalysisEvaluator_8cpp.html"];
+ Node1 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="InlineCost.cpp",height=0.2,width=0.4,color="black",URL="$InlineCost_8cpp.html"];
+ Node1 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="InstructionSimplify.cpp",height=0.2,width=0.4,color="black",URL="$InstructionSimplify_8cpp.html"];
+ Node1 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="MemDepPrinter.cpp",height=0.2,width=0.4,color="black",URL="$MemDepPrinter_8cpp.html"];
+ Node1 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="DwarfDebug.h",height=0.2,width=0.4,color="black",URL="$DwarfDebug_8h.html"];
+ Node13 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="AsmPrinter.cpp",height=0.2,width=0.4,color="black",URL="$AsmPrinter_8cpp.html"];
+ Node13 -> Node15 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="DwarfAccelTable.cpp",height=0.2,width=0.4,color="black",URL="$DwarfAccelTable_8cpp.html"];
+ Node13 -> Node16 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="DwarfCompileUnit.cpp",height=0.2,width=0.4,color="black",URL="$DwarfCompileUnit_8cpp.html"];
+ Node13 -> Node17 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="DwarfDebug.cpp",height=0.2,width=0.4,color="black",URL="$DwarfDebug_8cpp.html"];
+ Node1 -> Node18 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="BranchFolding.cpp",height=0.2,width=0.4,color="black",URL="$BranchFolding_8cpp.html"];
+ Node1 -> Node19 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="EarlyIfConversion.cpp",height=0.2,width=0.4,color="black",URL="$EarlyIfConversion_8cpp.html"];
+ Node1 -> Node20 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 [label="LiveRangeEdit.cpp",height=0.2,width=0.4,color="black",URL="$LiveRangeEdit_8cpp.html"];
+ Node1 -> Node21 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 [label="MachineCopyPropagation.cpp",height=0.2,width=0.4,color="black",URL="$MachineCopyPropagation_8cpp.html"];
+ Node1 -> Node22 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node22 [label="ProcessImplicitDefs.cpp",height=0.2,width=0.4,color="black",URL="$ProcessImplicitDefs_8cpp.html"];
+ Node1 -> Node23 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node23 [label="LegalizeTypes.cpp",height=0.2,width=0.4,color="black",URL="$LegalizeTypes_8cpp.html"];
+ Node1 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 [label="SelectionDAG.cpp",height=0.2,width=0.4,color="black",URL="$SelectionDAG_8cpp.html"];
+ Node1 -> Node25 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 [label="SjLjEHPrepare.cpp",height=0.2,width=0.4,color="black",URL="$SjLjEHPrepare_8cpp.html"];
+ Node1 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 [label="StackColoring.cpp",height=0.2,width=0.4,color="black",URL="$StackColoring_8cpp.html"];
+ Node1 -> Node27 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node27 [label="TailDuplication.cpp",height=0.2,width=0.4,color="black",URL="$TailDuplication_8cpp.html"];
+ Node1 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 [label="LinkModules.cpp",height=0.2,width=0.4,color="black",URL="$LinkModules_8cpp.html"];
+ Node1 -> Node29 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node29 [label="ARMAsmPrinter.cpp",height=0.2,width=0.4,color="black",URL="$ARMAsmPrinter_8cpp.html"];
+ Node1 -> Node30 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node30 [label="ExtractGV.cpp",height=0.2,width=0.4,color="black",URL="$ExtractGV_8cpp.html"];
+ Node1 -> Node31 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node31 [label="FunctionAttrs.cpp",height=0.2,width=0.4,color="black",URL="$FunctionAttrs_8cpp.html"];
+ Node1 -> Node32 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 [label="DeadStoreElimination.cpp",height=0.2,width=0.4,color="black",URL="$DeadStoreElimination_8cpp.html"];
+ Node1 -> Node33 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 [label="LoopStrengthReduce.cpp",height=0.2,width=0.4,color="black",URL="$LoopStrengthReduce_8cpp.html"];
+ Node1 -> Node34 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 [label="Reassociate.cpp",height=0.2,width=0.4,color="black",URL="$Reassociate_8cpp.html"];
+ Node1 -> Node35 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node35 [label="ScalarReplAggregates.cpp",height=0.2,width=0.4,color="black",URL="$ScalarReplAggregates_8cpp.html"];
+ Node1 -> Node36 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node36 [label="SROA.cpp",height=0.2,width=0.4,color="black",URL="$SROA_8cpp.html"];
+ Node1 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node37 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node37 [label="LoopSimplify.cpp",height=0.2,width=0.4,color="black",URL="$LoopSimplify_8cpp.html"];
+ Node1 -> Node38 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node38 [label="SimplifyCFG.cpp",height=0.2,width=0.4,color="black",URL="$SimplifyCFG_8cpp.html"];
+ Node1 -> Node39 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node39 [label="Verifier.cpp",height=0.2,width=0.4,color="black",URL="$Verifier_8cpp.html"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/ShadowStackGC_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ShadowStackGC_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ShadowStackGC_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ShadowStackGC_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+1e463638373902137ce6193add824cd8
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/Signals_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Signals_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Signals_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Signals_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,92 @@
+<!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: Signals.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_b423301f639fc46b24b2c9f122fcaff7.html">Support</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Signals.h File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="Path_8h_source.html">llvm/Support/Path.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for Signals.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="Signals_8h__incl.png" border="0" usemap="#Signals_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="Signals_8h__dep__incl.png" border="0" usemap="#Signals_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="Signals_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 class="memItemLeft" align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html">llvm::sys</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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#ab0938d8ccb6550ddc3865f45b48acb6e">llvm::sys::RunInterruptHandlers</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#a1234ad09731de4f5ccb752e4b725b74f">llvm::sys::RemoveFileOnSignal</a> (const Path &Filename, std::string *ErrMsg=0)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove a file if a fatal signal occurs. <a href="#a1234ad09731de4f5ccb752e4b725b74f"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#a6fcceec42fab0f9a175d253d93e94a04">llvm::sys::DontRemoveFileOnSignal</a> (const Path &Filename)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#a1c53d06f194371ad604d99f5f416d0e7">llvm::sys::PrintStackTraceOnErrorSignal</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a stack trace if a fatal signal occurs. <a href="#a1c53d06f194371ad604d99f5f416d0e7"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#aa6f5fa67b69147b9ccba1a2fb6274f07">llvm::sys::AddSignalHandler</a> (void(*FnPtr)(void *), void *Cookie)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1sys.html#a03a7c4c80c31a619c5e452314166401a">llvm::sys::SetInterruptFunction</a> (void(*IF)())</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Register a function to be called when ctrl-c is pressed. <a href="#a03a7c4c80c31a619c5e452314166401a"></a><br/></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/SimplifyCFGPass_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,361 @@
+<!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: SimplifyCFGPass.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_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="summary">
+<a href="#define-members">Defines</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">SimplifyCFGPass.cpp File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="Transforms_2Scalar_8h_source.html">llvm/Transforms/Scalar.h</a>"</code><br/>
+<code>#include "<a class="el" href="Local_8h_source.html">llvm/Transforms/Utils/Local.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="Instructions_8h_source.html">llvm/Instructions.h</a>"</code><br/>
+<code>#include "<a class="el" href="IntrinsicInst_8h_source.html">llvm/IntrinsicInst.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="Attributes_8h_source.html">llvm/Attributes.h</a>"</code><br/>
+<code>#include "<a class="el" href="CFG_8h_source.html">llvm/Support/CFG.h</a>"</code><br/>
+<code>#include "<a class="el" href="Pass_8h_source.html">llvm/Pass.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="SmallVector_8h_source.html">llvm/ADT/SmallVector.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="Statistic_8h_source.html">llvm/ADT/Statistic.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetTransformInfo_8h_source.html">llvm/TargetTransformInfo.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SimplifyCFGPass.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SimplifyCFGPass_8cpp__incl.png" border="0" usemap="#SimplifyCFGPass_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SimplifyCFGPass_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="SimplifyCFGPass_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a> "simplifycfg"</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="SimplifyCFGPass_8cpp.html#a4b8fdf4ef317ca608404ea1520dd4018">STATISTIC</a> (NumSimpl,"Number of blocks simplified")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFGPass_8cpp.html#a680c83392d00c672992e7c39dddfcacc">INITIALIZE_PASS</a> (CFGSimplifyPass,"simplifycfg","Simplify the CFG", false, <a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a>) <a class="el" href="classllvm_1_1FunctionPass.html">FunctionPass</a> *llvm</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFGPass_8cpp.html#af1b9e1d3bfd0b9789e6fc6722a469cd0">changeToUnreachable</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> UseLLVMTrap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFGPass_8cpp.html#a9c38b28e2d47462e50d2b593152332bb">changeToCall</a> (<a class="el" href="classllvm_1_1InvokeInst.html">InvokeInst</a> *II)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">changeToCall - Convert the specified invoke into a normal call. <a href="#a9c38b28e2d47462e50d2b593152332bb"></a><br/></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="SimplifyCFGPass_8cpp.html#af2b1806cee1e1d34c8d40650041ce734">markAliveBlocks</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB, <a class="el" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet</a>< <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *, 128 > &Reachable)</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="SimplifyCFGPass_8cpp.html#aaffd3c5b7dfe91876a436dacde4ae252">removeUnreachableBlocksFromFn</a> (<a class="el" href="classllvm_1_1Function.html">Function</a> &F)</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="SimplifyCFGPass_8cpp.html#a5a7c5245d801c4bdbde970b12a5e1a7c">mergeEmptyReturnBlocks</a> (<a class="el" href="classllvm_1_1Function.html">Function</a> &F)</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="SimplifyCFGPass_8cpp.html#a3fbc087f56e99e4e67f0ce184a7efee7">iterativelySimplifyCFG</a> (<a class="el" href="classllvm_1_1Function.html">Function</a> &F, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, const <a class="el" href="classllvm_1_1TargetTransformInfo.html">TargetTransformInfo</a> *TTI)</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="SimplifyCFGPass.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG_TYPE "simplifycfg"</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00024">24</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9c38b28e2d47462e50d2b593152332bb"></a><!-- doxytag: member="SimplifyCFGPass.cpp::changeToCall" ref="a9c38b28e2d47462e50d2b593152332bb" args="(InvokeInst *II)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void changeToCall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1InvokeInst.html">InvokeInst</a> * </td>
+ <td class="paramname"><em>II</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>changeToCall - Convert the specified invoke into a normal call. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00092">92</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l01184">llvm::CallInst::Create()</a>, <a class="el" href="Instructions_8h_source.html#l02359">llvm::BranchInst::Create()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="Instructions_8h_source.html#l03006">llvm::InvokeInst::getAttributes()</a>, <a class="el" href="Instructions_8h_source.html#l03092">llvm::InvokeInst::getCalledValue()</a>, <a class="el" href="Instructions_8h_source.html#l02997">llvm::InvokeInst::getCallingConv()</a>, <a class="el" href="Instruction_8h_source.html#l00177">llvm::Instruction::getDebugLoc()</a>, <a class="el" href="Instructions_8h_source.html#l03101">llvm::InvokeInst::getNormalDest()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l03104">llvm::InvokeInst::getUnwindDest()</a>, <a class="el" href="User_8h_source.html#l
00116">llvm::User::op_begin()</a>, <a class="el" href="User_8h_source.html#l00118">llvm::User::op_end()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, and <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00109">markAliveBlocks()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af1b9e1d3bfd0b9789e6fc6722a469cd0"></a><!-- doxytag: member="SimplifyCFGPass.cpp::changeToUnreachable" ref="af1b9e1d3bfd0b9789e6fc6722a469cd0" args="(Instruction *I, bool UseLLVMTrap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void changeToUnreachable </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="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td>
+ <td class="paramname"><em>UseLLVMTrap</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>changeToUnreachable - Insert an unreachable instruction before the specified instruction, making it and the rest of the code in the block dead. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00065">65</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l01184">llvm::CallInst::Create()</a>, <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Constants_8cpp_source.html#l01278">llvm::UndefValue::get()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instruction_8h_source.html#l00177">llvm::Instruction::getDebugLoc()</a>, <a class="el" href="Function_8cpp_source.html#l00611">llvm::Intrinsic::getDeclaration()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00110">llvm::BasicBlock::getParent()</a>, <a class="el" href="GlobalValue_8h_source.html#l00286">llvm::GlobalValue::getParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el"
href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, <a class="el" href="Interval_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00109">markAliveBlocks()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a680c83392d00c672992e7c39dddfcacc"></a><!-- doxytag: member="SimplifyCFGPass.cpp::INITIALIZE_PASS" ref="a680c83392d00c672992e7c39dddfcacc" args="(CFGSimplifyPass,"simplifycfg","Simplify the CFG", false, false) FunctionPass *llvm" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">INITIALIZE_PASS </td>
+ <td>(</td>
+ <td class="paramtype">CFGSimplifyPass </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"simplifycfg" </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Simplify the CFG" </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="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00055">55</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3fbc087f56e99e4e67f0ce184a7efee7"></a><!-- doxytag: member="SimplifyCFGPass.cpp::iterativelySimplifyCFG" ref="a3fbc087f56e99e4e67f0ce184a7efee7" args="(Function &F, const DataLayout *TD, const TargetTransformInfo *TTI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> iterativelySimplifyCFG </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Function.html">Function</a> & </td>
+ <td class="paramname"><em>F</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_1TargetTransformInfo.html">TargetTransformInfo</a> * </td>
+ <td class="paramname"><em>TTI</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>iterativelySimplifyCFG - Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00297">297</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="Function_8h_source.html#l00350">llvm::Function::begin()</a>, <a class="el" href="Function_8h_source.html#l00352">llvm::Function::end()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l04001">llvm::SimplifyCFG()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af2b1806cee1e1d34c8d40650041ce734"></a><!-- doxytag: member="SimplifyCFGPass.cpp::markAliveBlocks" ref="af2b1806cee1e1d34c8d40650041ce734" args="(BasicBlock *BB, SmallPtrSet< BasicBlock *, 128 > &Reachable)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> markAliveBlocks </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet</a>< <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *, 128 > & </td>
+ <td class="paramname"><em>Reachable</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="SimplifyCFGPass_8cpp_source.html#l00109">109</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00092">changeToCall()</a>, <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00065">changeToUnreachable()</a>, <a class="el" href="Local_8cpp_source.html#l00056">llvm::ConstantFoldTerminator()</a>, <a class="el" href="Instructions_8h_source.html#l02359">llvm::BranchInst::Create()</a>, <a class="el" href="SmallVector_8h_source.html#l00055">llvm::SmallVectorBase::empty()</a>, <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00254">llvm::SmallPtrSet< PtrType, SmallSize >::insert()</a>, <a class="el" href="SmallVector_8h_source.html#l00424">llvm::S
mallVectorImpl< T >::pop_back_val()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back()</a>, <a class="el" href="Interval_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00187">removeUnreachableBlocksFromFn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5a7c5245d801c4bdbde970b12a5e1a7c"></a><!-- doxytag: member="SimplifyCFGPass.cpp::mergeEmptyReturnBlocks" ref="a5a7c5245d801c4bdbde970b12a5e1a7c" args="(Function &F)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> mergeEmptyReturnBlocks </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Function.html">Function</a> & </td>
+ <td class="paramname"><em>F</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>mergeEmptyReturnBlocks - If we have more than one empty (other than phi node) return blocks, merge them together to promote recursive block merging. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00221">221</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Function_8h_source.html#l00350">llvm::Function::begin()</a>, <a class="el" href="Instructions_8h_source.html#l01999">llvm::PHINode::Create()</a>, <a class="el" href="Instructions_8h_source.html#l02359">llvm::BranchInst::Create()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Function_8h_source.html#l00352">llvm::Function::end()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00100">llvm::BasicBlock::eraseFromParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00196">llvm::BasicBlock::front()</a>, <a class="el" href="User_8h_source.html#l00108">llvm::User::getNumOperands()</a>, <a class="el" href="User_8h_sou
rce.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Interval_8h_source.html#l00117">llvm::pred_begin()</a>, <a class="el" href="Interval_8h_source.html#l00120">llvm::pred_end()</a>, <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>, <a class="el" href="MBlazeISelLowering_8h_source.html#l00082">llvm::MBlazeISD::Ret</a>, and <a class="el" href="User_8h_source.html#l00092">llvm::User::setOperand()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaffd3c5b7dfe91876a436dacde4ae252"></a><!-- doxytag: member="SimplifyCFGPass.cpp::removeUnreachableBlocksFromFn" ref="aaffd3c5b7dfe91876a436dacde4ae252" args="(Function &F)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> removeUnreachableBlocksFromFn </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Function.html">Function</a> & </td>
+ <td class="paramname"><em>F</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>removeUnreachableBlocksFromFn - Remove blocks that are not reachable, even if they are in a dead cycle. Return true if a change was made, false otherwise. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00187">187</a> of file <a class="el" href="SimplifyCFGPass_8cpp_source.html">SimplifyCFGPass.cpp</a>.</p>
+
+<p>References <a class="el" href="Function_8h_source.html#l00350">llvm::Function::begin()</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00265">llvm::SmallPtrSet< PtrType, SmallSize >::count()</a>, <a class="el" href="Function_8h_source.html#l00352">llvm::Function::end()</a>, <a class="el" href="Function_8h_source.html#l00329">llvm::Function::getBasicBlockList()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="SimplifyCFGPass_8cpp_source.html#l00109">markAliveBlocks()</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00080">llvm::SmallPtrSetImpl::size()</a>, <a class="el" href="Function_8h_source.html#l00355">llvm::Function::size()</a>, <a class="el" href="Interval_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4b8fdf4ef317ca608404ea1520dd4018"></a><!-- doxytag: member="SimplifyCFGPass.cpp::STATISTIC" ref="a4b8fdf4ef317ca608404ea1520dd4018" args="(NumSimpl,"Number of blocks simplified")" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">STATISTIC </td>
+ <td>(</td>
+ <td class="paramtype">NumSimpl </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Number of blocks simplified" </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</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/SimplifyCFGPass_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFGPass_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+df27925d703adb4492d74542ad8f6ea3
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFG_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFG_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFG_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyCFG_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1806 @@
+<!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: SimplifyCFG.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_22ea62e2015f6a823fddac4ac38ba517.html">Transforms</a> </li>
+ <li class="navelem"><a class="el" href="dir_256b03a856f3de95632a509cd258a236.html">Utils</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">SimplifyCFG.cpp File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="Local_8h_source.html">llvm/Transforms/Utils/Local.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="DataLayout_8h_source.html">llvm/DataLayout.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="IRBuilder_8h_source.html">llvm/IRBuilder.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="IntrinsicInst_8h_source.html">llvm/IntrinsicInst.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="MDBuilder_8h_source.html">llvm/MDBuilder.h</a>"</code><br/>
+<code>#include "<a class="el" href="Metadata_8h_source.html">llvm/Metadata.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="Operator_8h_source.html">llvm/Operator.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="DenseMap_8h_source.html">llvm/ADT/DenseMap.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="SetVector_8h_source.html">llvm/ADT/SetVector.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="SmallVector_8h_source.html">llvm/ADT/SmallVector.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="InstructionSimplify_8h_source.html">llvm/Analysis/InstructionSimplify.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="CFG_8h_source.html">llvm/Support/CFG.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="NoFolder_8h_source.html">llvm/Support/NoFolder.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="TargetTransformInfo_8h_source.html">llvm/TargetTransformInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="BasicBlockUtils_8h_source.html">llvm/Transforms/Utils/BasicBlockUtils.h</a>"</code><br/>
+<code>#include <algorithm></code><br/>
+<code>#include <set></code><br/>
+<code>#include <map></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SimplifyCFG.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SimplifyCFG_8cpp__incl.png" border="0" usemap="#SimplifyCFG_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SimplifyCFG_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="SimplifyCFG_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a> "simplifycfg"</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="SimplifyCFG_8cpp.html#a094edb4846824b6513167facc6a7afe1">STATISTIC</a> (NumBitMaps,"Number of switch <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> turned into bitmaps")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a3b805cb990220111f878d52811233df0">STATISTIC</a> (NumLookupTables,"Number of switch <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> turned into lookup tables")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#afef79ee5b4feaa59ddd09123c1ae3f6a">STATISTIC</a> (NumSinkCommons,"Number of common <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> sunk down to the end block")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#ab4d51f817ed15e19df3ba4e102c25207">STATISTIC</a> (NumSpeculations,"Number of speculative executed <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a>")</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="SimplifyCFG_8cpp.html#a02215e210f29948498aeb844022afe53">SafeToMergeTerminators</a> (<a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> *SI1, <a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> *SI2)</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="SimplifyCFG_8cpp.html#a69987e50a47c1566fa22b3cfd696e7ea">isProfitableToFoldUnconditional</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *SI1, <a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *SI2, <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *Cond, <a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * > &PhiNodes)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#adfeed3997bba12e75a8e51d740f1969d">AddPredecessorToBlock</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *Succ, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *NewPred, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *ExistPred)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Value.html">Value</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a872693f6b0f3efb05e9a599e9a24c839">GetIfCondition</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *&IfTrue, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *&IfFalse)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classunsigned.html">unsigned</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#aaaae27d25fe7431c2ad47c4fb12273e8">ComputeSpeculationCost</a> (const <a class="el" href="classllvm_1_1User.html">User</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="SimplifyCFG_8cpp.html#ad3acb8f156ef3691661eae4471cb4887">DominatesMergePoint</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB, <a class="el" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, 4 > *AggressiveInsts, <a class="el" href="classunsigned.html">unsigned</a> &CostRemaining)</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="SimplifyCFG_8cpp.html#a0b050aae0f188426acd4124d39e50ae6">GetConstantInt</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Value.html">Value</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#aa62a063a23f704f9544485e57858b670">GatherConstantCompares</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, std::vector< <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * > &Vals, <a class="el" href="classllvm_1_1Value.html">Value</a> *&Extra, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isEQ, <a class="el" href="classunsigned.html">unsigned</a> &UsedICmps)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#ad04d12b08532d23bbd327a7024caad89">EraseTerminatorInstAndDCECond</a> (<a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> *TI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a38517d96538b847c6c3dbe58965c8053">EliminateBlockCases</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB, std::vector< ValueEqualityComparisonCase > &Cases)</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="SimplifyCFG_8cpp.html#aaba6ba9e89bea12994fa7a7a6ade4d38">ValuesOverlap</a> (std::vector< ValueEqualityComparisonCase > &C1, std::vector< ValueEqualityComparisonCase > &C2)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a31b649e28babc24eeefe7f6f9c9645d7">ConstantIntSortPredicate</a> (const void *P1, const void *P2)</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="SimplifyCFG_8cpp.html#ada99fd4fd27356d1518273d8248940a5">HasBranchWeights</a> (const <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a165512f38f31f01e7f18bf3838f3a12e">GetBranchWeights</a> (<a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> *TI, <a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< uint64_t > &Weights)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="SimplifyCFG_8cpp.html#a95ec32778f2bb913dc4cc45ac7a66e42">FitWeights</a> (<a class="el" href="classllvm_1_1MutableArrayRef.html">MutableArrayRef</a>< uint64_t > Weights)</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="SimplifyCFG_8cpp.html#a3aaba0277f5dd5636e099fa81c20c533">isSafeToHoistInvoke</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB1, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB2, <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I1, <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I2)</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="SimplifyCFG_8cpp.html#a6434e674d53619188f1a6b4bac3b304e">HoistThenElseCodeToIf</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI)</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="SimplifyCFG_8cpp.html#a136cc7ed9c1041928df9f03631026a0d">SinkThenElseCodeToEnd</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI1)</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="SimplifyCFG_8cpp.html#a9ea7032961696413a2b145bedf1224ad">SpeculativelyExecuteBB</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB1)</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="SimplifyCFG_8cpp.html#a03a2d451a241c934af3405a7cfc8adb4">BlockIsSimpleEnoughToThreadThrough</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB)</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="SimplifyCFG_8cpp.html#a1e3544295480ec7b23c650873d046538">FoldCondBranchOnPHI</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD)</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="SimplifyCFG_8cpp.html#a518d290fbe6b5f5e314e5b4e29780635">FoldTwoEntryPHINode</a> (<a class="el" href="classllvm_1_1PHINode.html">PHINode</a> *PN, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD)</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="SimplifyCFG_8cpp.html#a2e1b28b7b4b85744d3a02881d4601122">SimplifyCondBranchToTwoReturns</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI, <a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> &Builder)</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="SimplifyCFG_8cpp.html#a50c9506d55e08fb67115a29dde75388a">ExtractBranchMetadata</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI, uint64_t &ProbTrue, uint64_t &ProbFalse)</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="SimplifyCFG_8cpp.html#a747b33c392f2a4faef1bf40a4d169c7d">checkCSEInPredecessor</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *Inst, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *PB)</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="SimplifyCFG_8cpp.html#a285d756a993fe2460d35129ba58f92a2">SimplifyCondBranchToCondBranch</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *PBI, <a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI)</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="SimplifyCFG_8cpp.html#aae15857ee04fb44315481a693e4562c4">SimplifyTerminatorOnSelect</a> (<a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> *OldTerm, <a class="el" href="classllvm_1_1Value.html">Value</a> *Cond, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *TrueBB, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *FalseBB, uint32_t TrueWeight, uint32_t FalseWeight)</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="SimplifyCFG_8cpp.html#af0d7fe1e3aa12d83e0af774a398d34ab">SimplifySwitchOnSelect</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI, <a class="el" href="classllvm_1_1SelectInst.html">SelectInst</a> *Select)</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="SimplifyCFG_8cpp.html#a3ab1a6ec499c9bfd45258e149aa555c5">SimplifyIndirectBrOnSelect</a> (<a class="el" href="classllvm_1_1IndirectBrInst.html">IndirectBrInst</a> *IBI, <a class="el" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI)</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="SimplifyCFG_8cpp.html#a08e3b1927df1f87b617dcae0998dff2e">TryToSimplifyUncondBranchWithICmpInIt</a> (<a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> *ICI, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, <a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> &Builder)</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="SimplifyCFG_8cpp.html#a39eb6c7310d5673dad5be0af7c6a79f8">SimplifyBranchOnICmpChain</a> (<a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> *BI, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, <a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> &Builder)</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="SimplifyCFG_8cpp.html#abf5ef34c952cc6bc5dce92d91598bdd2">TurnSwitchRangeIntoICmp</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI, <a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> &Builder)</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="SimplifyCFG_8cpp.html#a48977a4b045a92bc5cf1c0ad4d95129e">EliminateDeadSwitchCases</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI)</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="SimplifyCFG_8cpp.html#a3a785324436b8d2862b09f5fd8d1c061">FindPHIForConditionForwarding</a> (<a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *CaseValue, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB, int *PhiIndex)</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="SimplifyCFG_8cpp.html#a819fe08329be34252ffde1e710574a34">ForwardSwitchConditionToPHI</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI)</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="SimplifyCFG_8cpp.html#a73476159b3f570043406e83b49ea036c">ValidLookupTableConstant</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *C)</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="SimplifyCFG_8cpp.html#afe11668c8bd8d29c005ca8e66ba9ef6b">LookupConstant</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, const <a class="el" href="classllvm_1_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1Value.html">Value</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > &ConstantPool)</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="SimplifyCFG_8cpp.html#a62553ebb8196620b44ccdfe7593fe089">ConstantFold</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I, const <a class="el" href="classllvm_1_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1Value.html">Value</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > &ConstantPool)</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="SimplifyCFG_8cpp.html#aca98f036365a2ce139c14606a593a438">GetCaseResults</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *CaseVal, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *CaseDest, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> **CommonDest, <a class="el" href="classllvm_1_1SmallVector.html">SmallVector</a>< std::pair< <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * >, 4 > &Res)</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="SimplifyCFG_8cpp.html#aa1d125e64c3d0c3105dbedc0cc4d5787">ShouldBuildLookupTable</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI, uint64_t TableSize, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, const <a class="el" href="classllvm_1_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> *, <a class="el" href="classllvm_1_1Type.html">Type</a> * > &ResultTypes)</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="SimplifyCFG_8cpp.html#ae403a3eeaed2fb079121bc3f2092064f">SwitchToLookupTable</a> (<a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> *SI, <a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> &Builder, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, const <a class="el" href="classllvm_1_1TargetTransformInfo.html">TargetTransformInfo</a> *TTI)</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="SimplifyCFG_8cpp.html#a8d718b79cd2832d71600169ac3e132b0">passingValueIsAlwaysUndefined</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if passing a value to an instruction will cause undefined behavior. <a href="#a8d718b79cd2832d71600169ac3e132b0"></a><br/></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="SimplifyCFG_8cpp.html#a2026c2afa149ebc0c1ac8fd091fdc22c">removeUndefIntroducingPredecessor</a> (<a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *BB)</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="SimplifyCFG_8cpp.html#a830a17648b2e5112beef220cc707c977">PHINodeFoldingThreshold</a> ("phi-node-folding-threshold", cl::Hidden, cl::init(1), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Control the amount of phi node folding to perform (default = 1)"))</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="SimplifyCFG_8cpp.html#a0b13773c26dad640e24611c48c657463">DupRet</a> ("simplifycfg-dup-ret", cl::Hidden, cl::init(<a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a>), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Duplicate return <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> into unconditional branches"))</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="SimplifyCFG_8cpp.html#ac7707bcaec113d0d136467c7b97a62f1">SinkCommon</a> ("simplifycfg-<a class="el" href="MachineSink_8cpp.html#abaeca283dd5280e74ec8774a25829c8d">sink</a>-common", cl::Hidden, cl::init(<a class="el" href="LoopSimplify_8cpp.html#a13f020c6a40eb04f1b4f9ddfbb004ce0">true</a>), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Sink common <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> down to the end block"))</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="SimplifyCFG.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG_TYPE "simplifycfg"</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00014">14</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="adfeed3997bba12e75a8e51d740f1969d"></a><!-- doxytag: member="SimplifyCFG.cpp::AddPredecessorToBlock" ref="adfeed3997bba12e75a8e51d740f1969d" args="(BasicBlock *Succ, BasicBlock *NewPred, BasicBlock *ExistPred)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void AddPredecessorToBlock </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>Succ</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>NewPred</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>ExistPred</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will now be entries in it from the 'NewPred' block. The values that will be flowing into the PHI nodes will be the same as those coming in from ExistPred, an existing predecessor of Succ. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00183">183</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <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="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, and <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01514">FoldCondBranchOnPHI()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01056">HoistThenElseCodeToIf()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02632">SimplifyBranchOnICmpChain()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02189">SimplifyCondBranchToCondBranch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a03a2d451a241c934af3405a7cfc8adb4"></a><!-- doxytag: member="SimplifyCFG.cpp::BlockIsSimpleEnoughToThreadThrough" ref="a03a2d451a241c934af3405a7cfc8adb4" args="(BasicBlock *BB)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> BlockIsSimpleEnoughToThreadThrough </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>BlockIsSimpleEnoughToThreadThrough - Return true if we can thread a branch across this block. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01486">1486</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, and <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01514">FoldCondBranchOnPHI()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02189">SimplifyCondBranchToCondBranch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a747b33c392f2a4faef1bf40a4d169c7d"></a><!-- doxytag: member="SimplifyCFG.cpp::checkCSEInPredecessor" ref="a747b33c392f2a4faef1bf40a4d169c7d" args="(Instruction *Inst, BasicBlock *PB)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> checkCSEInPredecessor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+ <td class="paramname"><em>Inst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>PB</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>checkCSEInPredecessor - Return true if the given instruction is available in its predecessor block. If yes, the instruction will be removed. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01853">1853</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Instruction_8cpp_source.html#l00173">llvm::Instruction::isIdenticalTo()</a>, and <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaaae27d25fe7431c2ad47c4fb12273e8"></a><!-- doxytag: member="SimplifyCFG.cpp::ComputeSpeculationCost" ref="aaaae27d25fe7431c2ad47c4fb12273e8" args="(const User *I)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classunsigned.html">unsigned</a> ComputeSpeculationCost </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classllvm_1_1User.html">User</a> * </td>
+ <td class="paramname"><em>I</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ComputeSpeculuationCost - Compute an abstract "cost" of speculating the given instruction, which is assumed to be safe to speculate. 1 means cheap, 2 means less cheap, and UINT_MAX means prohibitively expensive. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00283">283</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</a>, <a class="el" href="CallingConvLower_8h_source.html#l00149">llvm::Call</a>, <a class="el" href="Operator_8h_source.html#l00049">llvm::Operator::getOpcode()</a>, <a class="el" href="InstVisitor_8h_source.html#l00162">llvm::ICmp</a>, <a class="el" href="ValueTracking_8cpp_source.html#l01853">llvm::isSafeToSpeculativelyExecute()</a>, <a class="el" href="SparcInstrInfo_8h_source.html#l00031">llvm::SPII::Load</a>, <a class="el" href="InstVisitor_8h_source.html#l00124">llvm::LShr</a>, <a class="el" href="APInt_8h_source.html#l01765">llvm::APIntOps::Or()</a>, <a class="el" href="MCInstrDesc_8h_source.html#l00110">llvm::MCID::Select</a>, <a class="el" href="InstVisitor_8h_source.html#l00148">llvm::SExt</a>, <a class="el" href="InstVisitor_8h_source.html#l00146">llvm::Trunc</a>, and <a class="el" href="APInt_8h_source.html#l01771">llvm::APIntOps::Xor()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l00333">DominatesMergePoint()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l01353">SpeculativelyExecuteBB()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a62553ebb8196620b44ccdfe7593fe089"></a><!-- doxytag: member="SimplifyCFG.cpp::ConstantFold" ref="a62553ebb8196620b44ccdfe7593fe089" args="(Instruction *I, const SmallDenseMap< Value *, Constant * > &ConstantPool)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* ConstantFold </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_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1Value.html">Value</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > & </td>
+ <td class="paramname"><em>ConstantPool</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ConstantFold - Try to fold instruction I into a constant. This works for simple instructions such as binary operations where both operands are constant or can be replaced by constants from the ConstantPool. Returns the resulting constant on success, 0 otherwise. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03212">3212</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="ARMBaseInfo_8h_source.html#l00098">llvm::ARM_PROC::A</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00063">llvm::ISD::ConstantPool</a>, <a class="el" href="Constants_8cpp_source.html#l01610">llvm::ConstantExpr::get()</a>, <a class="el" href="Constants_8cpp_source.html#l01389">llvm::ConstantExpr::getCast()</a>, <a class="el" href="Constants_8cpp_source.html#l01730">llvm::ConstantExpr::getCompare()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="Constants_8cpp_source.html#l00067">llvm::Constant::isAllOnesValue()</a>, <a class="el" href="Constants_8cpp_source.html#l00054">llvm::Constant::isNullValue()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03201">LookupConstant()</a>, and <a class="el" href="InstVisitor_8h_source.html#l00166">llvm::Select</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03259">GetCaseResults()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a31b649e28babc24eeefe7f6f9c9645d7"></a><!-- doxytag: member="SimplifyCFG.cpp::ConstantIntSortPredicate" ref="a31b649e28babc24eeefe7f6f9c9645d7" args="(const void *P1, const void *P2)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ConstantIntSortPredicate </td>
+ <td>(</td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>P1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>P2</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="SimplifyCFG_8cpp_source.html#l00762">762</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, and <a class="el" href="APInt_8cpp_source.html#l00515">llvm::APInt::ult()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l02632">SimplifyBranchOnICmpChain()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l03003">TurnSwitchRangeIntoICmp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad3acb8f156ef3691661eae4471cb4887"></a><!-- doxytag: member="SimplifyCFG.cpp::DominatesMergePoint" ref="ad3acb8f156ef3691661eae4471cb4887" args="(Value *V, BasicBlock *BB, SmallPtrSet< Instruction *, 4 > *AggressiveInsts, unsigned &CostRemaining)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> DominatesMergePoint </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"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet</a>< <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *, 4 > * </td>
+ <td class="paramname"><em>AggressiveInsts</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>CostRemaining</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>DominatesMergePoint - If we have a merge point of an "if condition" as accepted above, return true if the specified value dominates the block. We don't handle the true generality of domination here, just a special case which works well enough for us.</p>
+<p>If AggressiveInsts is non-null, and if V does not dominate BB, we check to see if V (which must be an instruction) and its recursive operands that do not dominate BB have a combined cost lower than CostRemaining and are non-trapping. If both are true, the instruction is inserted into the set and true is returned.</p>
+<p>The cost for most non-trapping instructions is defined as 1 except for Select whose cost is 2.</p>
+<p>After this function returns, CostRemaining is decreased by the cost of V plus its non-dominating operands. If that cost is greater than CostRemaining, false is returned and CostRemaining is undefined. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00333">333</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00283">ComputeSpeculationCost()</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00265">llvm::SmallPtrSet< PtrType, SmallSize >::count()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00254">llvm::SmallPtrSet< PtrType, SmallSize >::insert()</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, <a class="el" href="ValueTracking_8cpp_source.html
#l01853">llvm::isSafeToSpeculativelyExecute()</a>, <a class="el" href="User_8h_source.html#l00116">llvm::User::op_begin()</a>, and <a class="el" href="User_8h_source.html#l00118">llvm::User::op_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01610">FoldTwoEntryPHINode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38517d96538b847c6c3dbe58965c8053"></a><!-- doxytag: member="SimplifyCFG.cpp::EliminateBlockCases" ref="a38517d96538b847c6c3dbe58965c8053" args="(BasicBlock *BB, std::vector< ValueEqualityComparisonCase > &Cases)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void EliminateBlockCases </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector< ValueEqualityComparisonCase > & </td>
+ <td class="paramname"><em>Cases</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>EliminateBlockCases - Given a vector of bb/value pairs, remove any entries in the list that match the specified block. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00570">570</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="namespacellvm_1_1sys_1_1fs.html#ac15deda0837e2db86daf672a10cb7ccb">llvm::sys::fs::remove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48977a4b045a92bc5cf1c0ad4d95129e"></a><!-- doxytag: member="SimplifyCFG.cpp::EliminateDeadSwitchCases" ref="a48977a4b045a92bc5cf1c0ad4d95129e" args="(SwitchInst *SI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> EliminateDeadSwitchCases </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>EliminateDeadSwitchCases - Compute masked bits for the condition of a switch and use it to remove dead cases. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03067">3067</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00154">llvm::SmallVectorTemplateCommon< T >::back()</a>, <a class="el" href="SmallVector_8h_source.html#l00111">llvm::SmallVectorTemplateCommon< T >::begin()</a>, <a class="el" href="TGLexer_8h_source.html#l00045">llvm::tgtok::Bits</a>, <a class="el" href="Instructions_8h_source.html#l02540">llvm::SwitchInst::case_begin()</a>, <a class="el" href="Instructions_8h_source.html#l02564">llvm::SwitchInst::case_default()</a>, <a class="el" href="Instructions_8h_source.html#l02551">llvm::SwitchInst::case_end()</a>, <a class="el" href="ValueTracking_8cpp_source.html#l00228">llvm::ComputeMaskedBits()</a>, <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="SmallVector_8h_source.html#l00055">llvm::SmallVectorBase::empty()</a>, <a class="el" href="SmallVector_8h_source.html#l00113">llvm::SmallVectorTemplateCommon< T
>::end()</a>, <a class="el" href="Instructions_8h_source.html#l02575">llvm::SwitchInst::findCaseValue()</a>, <a class="el" href="ValueTracking_8cpp_source.html#l00039">getBitWidth()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00784">GetBranchWeights()</a>, <a class="el" href="Instructions_8h_source.html#l02715">llvm::SwitchInst::CaseIteratorT< SwitchInstTy, ConstantIntTy, SubsetsItTy, BasicBlockTy >::getCaseIndex()</a>, <a class="el" href="Instructions_8h_source.html#l02707">llvm::SwitchInst::CaseIteratorT< SwitchInstTy, ConstantIntTy, SubsetsItTy, BasicBlockTy >::getCaseSuccessor()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00033">llvm::BasicBlock::getContext()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a
>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00772">HasBranchWeights()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>, <a class="el" href="SmallVector_8h_source.html#l00255">llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::pop_back()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back()</a>, <a class="el" href="Instructions_8cpp_source.html#l03213">llvm::SwitchInst::removeCase()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, <a class="el" href="Metadata_8cpp_source.html#l00622">llvm::Instruction::setMetadata()</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T
>::size()</a>, and <a class="el" href="OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad04d12b08532d23bbd327a7024caad89"></a><!-- doxytag: member="SimplifyCFG.cpp::EraseTerminatorInstAndDCECond" ref="ad04d12b08532d23bbd327a7024caad89" args="(TerminatorInst *TI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void EraseTerminatorInstAndDCECond </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> * </td>
+ <td class="paramname"><em>TI</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00504">504</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, and <a class="el" href="Local_8cpp_source.html#l00318">llvm::RecursivelyDeleteTriviallyDeadInstructions()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01056">HoistThenElseCodeToIf()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02632">SimplifyBranchOnICmpChain()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01747">SimplifyCondBranchToTwoReturns()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02391">SimplifyTerminatorOnSelect()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a50c9506d55e08fb67115a29dde75388a"></a><!-- doxytag: member="SimplifyCFG.cpp::ExtractBranchMetadata" ref="a50c9506d55e08fb67115a29dde75388a" args="(BranchInst *BI, uint64_t &ProbTrue, uint64_t &ProbFalse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> ExtractBranchMetadata </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint64_t & </td>
+ <td class="paramname"><em>ProbTrue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint64_t & </td>
+ <td class="paramname"><em>ProbFalse</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ExtractBranchMetadata - Given a conditional BranchInstruction, retrieve the probabilities of the branch taking each edge. Fills in the two APInt parameters and return true, or returns false if no or invalid metadata was found. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01836">1836</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8h_source.html#l00139">llvm::Instruction::getMetadata()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="APInt_8h_source.html#l01214">llvm::APInt::getZExtValue()</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, and <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02189">SimplifyCondBranchToCondBranch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3a785324436b8d2862b09f5fd8d1c061"></a><!-- doxytag: member="SimplifyCFG.cpp::FindPHIForConditionForwarding" ref="a3a785324436b8d2862b09f5fd8d1c061" args="(ConstantInt *CaseValue, BasicBlock *BB, int *PhiIndex)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1PHINode.html">PHINode</a>* FindPHIForConditionForwarding </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+ <td class="paramname"><em>CaseValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>PhiIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>FindPHIForConditionForwarding - If BB would be eligible for simplification by TryToSimplifyUncondBranchFromEmptyBlock (i.e. it is empty and terminated by an unconditional branch), look at the phi node for BB in the successor block and see if the incoming value is equal to CaseValue. If so, return the phi node, and set PhiIndex to BB's index in the phi node. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03120">3120</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="MCInstrDesc_8h_source.html#l00105">llvm::MCID::Branch</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00140">llvm::BasicBlock::getFirstNonPHIOrDbg()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00183">llvm::BasicBlock::getSinglePredecessor()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Instructions_8h_source.html#l02377">llvm::BranchInst::isUnconditional()</a>, and <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03153">ForwardSwitchConditionToPHI()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a95ec32778f2bb913dc4cc45ac7a66e42"></a><!-- doxytag: member="SimplifyCFG.cpp::FitWeights" ref="a95ec32778f2bb913dc4cc45ac7a66e42" args="(MutableArrayRef< uint64_t > Weights)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FitWeights </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1MutableArrayRef.html">MutableArrayRef</a>< uint64_t > </td>
+ <td class="paramname"><em>Weights</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sees if any of the weights are too big for a uint32_t, and halves all the weights if any are. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00807">807</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="ArrayRef_8h_source.html#l00093">llvm::ArrayRef< T >::size()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02189">SimplifyCondBranchToCondBranch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e3544295480ec7b23c650873d046538"></a><!-- doxytag: member="SimplifyCFG.cpp::FoldCondBranchOnPHI" ref="a1e3544295480ec7b23c650873d046538" args="(BranchInst *BI, const DataLayout *TD)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> FoldCondBranchOnPHI </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</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></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>FoldCondBranchOnPHI - If we have a conditional branch on a PHI node value that is defined in the same block as the branch and if any PHI entries are constants, thread edges corresponding to that entry to be branches to their ultimate destination. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01514">1514</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SimplifyCFG_8cpp_source.html#l00183">AddPredecessorToBlock()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01486">BlockIsSimpleEnoughToThreadThrough()</a>, <a class="el" href="BasicBlock_8h_source.html#l00102">llvm::BasicBlock::Create()</a>, <a class="el" href="Instructions_8h_source.html#l02359">llvm::BranchInst::Create()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="DenseMap_8h_source.html#l00057">llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT >, KeyT, ValueT, KeyInfoT >::end()</a>, <a class="el" href="DenseMap_8h_source.html#l00106">llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT >, KeyT, ValueT, KeyInfoT >::find()</a>, <a class="el" href="BasicBlockUtils_8cpp_source.html#l00067">llvm::FoldSingleEntryPHINodes()</a>, <a class="el" href="Instructions_8h_source.ht
ml#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00033">llvm::BasicBlock::getContext()</a>, <a class="el" href="Instructions_8h_source.html#l02060">llvm::PHINode::getIncomingBlock()</a>, <a class="el" href="Instructions_8h_source.html#l02045">llvm::PHINode::getIncomingValue()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</a>, <a class="el" href="InstrTypes_8h_source.html#l00059">llvm::TerminatorInst::getNumSuccessors()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00110">llvm::BasicBlock::getParent()</a>, <a cla
ss="el" href="InstrTypes_8h_source.html#l00065">llvm::TerminatorInst::getSuccessor()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Constants_8h_source.html#l00140">llvm::ConstantInt::getType()</a>, <a class="el" href="Constants_8h_source.html#l00116">llvm::ConstantInt::getZExtValue()</a>, <a class="el" href="Value_8h_source.html#l00156">llvm::Value::hasOneUse()</a>, <a class="el" href="Type_8h_source.html#l00180">llvm::Type::isIntegerTy()</a>, <a class="el" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</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>, <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, <a class="el" href="Value_8cpp_source.html#l00
172">llvm::Value::setName()</a>, <a class="el" href="InstrTypes_8h_source.html#l00071">llvm::TerminatorInst::setSuccessor()</a>, and <a class="el" href="InstructionSimplify_8cpp_source.html#l02781">llvm::SimplifyInstruction()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a518d290fbe6b5f5e314e5b4e29780635"></a><!-- doxytag: member="SimplifyCFG.cpp::FoldTwoEntryPHINode" ref="a518d290fbe6b5f5e314e5b4e29780635" args="(PHINode *PN, const DataLayout *TD)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> FoldTwoEntryPHINode </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1PHINode.html">PHINode</a> * </td>
+ <td class="paramname"><em>PN</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></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry PHI node, see if we can eliminate it. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01610">1610</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SmallPtrSet_8h_source.html#l00265">llvm::SmallPtrSet< PtrType, SmallSize >::count()</a>, <a class="el" href="IRBuilder_8h_source.html#l00460">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l01256">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect()</a>, <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="SimplifyCFG_8cpp_source.html#l00333">DominatesMergePoint()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00203">GetIfCondition()</a>, <a class="el" href="Instructions_8h_source.html#l02060">llvm::P
HINode::getIncomingBlock()</a>, <a class="el" href="Instructions_8h_source.html#l02045">llvm::PHINode::getIncomingValue()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Type_8h_source.html#l00180">llvm::Type::isIntegerTy()</a>, <a class="el" href="SimplifyCFG_8cpp.html#a830a17648b2e5112beef220cc707c977">PHINodeFoldingThreshold</a>, <a class="el" href="Interval_8h_source.html#l00117">llvm::pred_begin()</a>, <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>,
<a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>, <a class="el" href="InstructionSimplify_8cpp_source.html#l02781">llvm::SimplifyInstruction()</a>, and <a class="el" href="Value_8cpp_source.html#l00233">llvm::Value::takeName()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a819fe08329be34252ffde1e710574a34"></a><!-- doxytag: member="SimplifyCFG.cpp::ForwardSwitchConditionToPHI" ref="a819fe08329be34252ffde1e710574a34" args="(SwitchInst *SI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> ForwardSwitchConditionToPHI </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ForwardSwitchConditionToPHI - Try to forward the condition of a switch instruction to a phi node dominated by the switch, if that would mean that some of the destination blocks of the switch can be folded away. Returns true if a change is made. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03153">3153</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02540">llvm::SwitchInst::case_begin()</a>, <a class="el" href="Instructions_8h_source.html#l02551">llvm::SwitchInst::case_end()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03120">FindPHIForConditionForwarding()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>, <a class="el" href="Instructions_8h_source.html#l02048">llvm::PHINode::setIncomingValue()</a>, and <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T, typename >::size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa62a063a23f704f9544485e57858b670"></a><!-- doxytag: member="SimplifyCFG.cpp::GatherConstantCompares" ref="aa62a063a23f704f9544485e57858b670" args="(Value *V, std::vector< ConstantInt * > &Vals, Value *&Extra, const DataLayout *TD, bool isEQ, unsigned &UsedICmps)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1Value.html">Value</a>* GatherConstantCompares </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">std::vector< <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * > & </td>
+ <td class="paramname"><em>Vals</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> *& </td>
+ <td class="paramname"><em>Extra</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"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td>
+ <td class="paramname"><em>isEQ</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>UsedICmps</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>GatherConstantCompares - Given a potentially 'or'd or 'and'd together collection of icmp eq/ne instructions that compare a value against a constant, return the value being compared, and stick the constant into the Values vector. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00423">423</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</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="SimplifyCFG_8cpp_source.html#l00390">GetConstantInt()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="ConstantRange_8h_source.html#l00071">llvm::ConstantRange::getLower()</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="ConstantRange_8cpp_source.html#l00145">llvm::ConstantRange::getSetSize()</a>, <a class="el" href="ConstantRange_8h_source.html#l00075">llvm::ConstantRange::getUpper()</a>, <a class="el" href="ARMBaseInfo_8h_source.ht
ml#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="InstrTypes_8h_source.html#l00666">llvm::CmpInst::ICMP_EQ</a>, <a class="el" href="InstrTypes_8h_source.html#l00667">llvm::CmpInst::ICMP_NE</a>, <a class="el" href="ConstantRange_8cpp_source.html#l00708">llvm::ConstantRange::inverse()</a>, <a class="el" href="ConstantRange_8cpp_source.html#l00124">llvm::ConstantRange::isEmptySet()</a>, <a class="el" href="ConstantRange_8cpp_source.html#l00051">llvm::ConstantRange::makeICmpRegion()</a>, <a class="el" href="APInt_8h_source.html#l01765">llvm::APIntOps::Or()</a>, and <a class="el" href="APInt_8h_source.html#l01000">llvm::APInt::ugt()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l02632">SimplifyBranchOnICmpChain()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a165512f38f31f01e7f18bf3838f3a12e"></a><!-- doxytag: member="SimplifyCFG.cpp::GetBranchWeights" ref="a165512f38f31f01e7f18bf3838f3a12e" args="(TerminatorInst *TI, SmallVectorImpl< uint64_t > &Weights)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void GetBranchWeights </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> * </td>
+ <td class="paramname"><em>TI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< uint64_t > & </td>
+ <td class="paramname"><em>Weights</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get Weights of a given TerminatorInst, the default weight is at the front of the vector. If TI is a conditional eq, we need to swap the branch-weight metadata. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00784">784</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallVector_8h_source.html#l00154">llvm::SmallVectorTemplateCommon< T >::back()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="SmallVector_8h_source.html#l00147">llvm::SmallVectorTemplateCommon< T >::front()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Instruction_8h_source.html#l00139">llvm::Instruction::getMetadata()</a>, <a class="el" href="Metadata_8h_source.html#l00145">llvm::MDNode::getNumOperands()</a>, <a class="el" href="Metadata_8cpp_source.html#l00305">llvm::MDNode::getOperand()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="APInt_8h_source.html#l01214">llvm::APInt::getZExtValue()</a>, <a class="el" href="InstrTypes_8h_source.html#l00666">llvm::CmpInst::ICMP_EQ</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMC
ontext::MD_prof</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back()</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>, and <a class="el" href="BitVector_8h_source.html#l00584">std::swap()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03067">EliminateDeadSwitchCases()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02456">SimplifySwitchOnSelect()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02525">TryToSimplifyUncondBranchWithICmpInIt()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l03003">TurnSwitchRangeIntoICmp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aca98f036365a2ce139c14606a593a438"></a><!-- doxytag: member="SimplifyCFG.cpp::GetCaseResults" ref="aca98f036365a2ce139c14606a593a438" args="(SwitchInst *SI, ConstantInt *CaseVal, BasicBlock *CaseDest, BasicBlock **CommonDest, SmallVector< std::pair< PHINode *, Constant * >, 4 > &Res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> GetCaseResults </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</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>CaseVal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>CaseDest</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> ** </td>
+ <td class="paramname"><em>CommonDest</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SmallVector.html">SmallVector</a>< std::pair< <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * >, 4 > & </td>
+ <td class="paramname"><em>Res</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>GetCaseResults - Try to determine the resulting constant values in phi nodes at the common destination basic block, *CommonDest, for one of the case destionations CaseDest corresponding to value CaseVal (0 for the default case), of a switch instruction SI. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03259">3259</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03212">ConstantFold()</a>, <a class="el" href="ISDOpcodes_8h_source.html#l00063">llvm::ISD::ConstantPool</a>, <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="DenseMap_8h_source.html#l00151">llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT >, KeyT, ValueT, KeyInfoT >::insert()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03201">LookupConstant()</a>, <a class="el" href="InstVisitor_8h_source.ht
ml#l00164">llvm::PHI</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l03188">ValidLookupTableConstant()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03535">SwitchToLookupTable()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0b050aae0f188426acd4124d39e50ae6"></a><!-- doxytag: member="SimplifyCFG.cpp::GetConstantInt" ref="a0b050aae0f188426acd4124d39e50ae6" args="(Value *V, const DataLayout *TD)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a>* GetConstantInt </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_1DataLayout.html">DataLayout</a> * </td>
+ <td class="paramname"><em>TD</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>GetConstantInt - Extract ConstantInt from value, looking through IntToPtr and PointerNullValue. Return NULL if value is not a constant int. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00390">390</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <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="Constants_8cpp_source.html#l01440">llvm::ConstantExpr::getIntegerCast()</a>, <a class="el" href="DataLayout_8cpp_source.html#l00665">llvm::DataLayout::getIntPtrType()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Constants_8h_source.html#l00140">llvm::ConstantInt::getType()</a>, <a class="el" href="InstVisitor_8h_source.html#l00156">llvm::IntToPtr</a>, and <a class="el" href="Type_8h_source.html#l00204">llvm::Type::isPointerTy()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l00423">GatherConstantCompares()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a872693f6b0f3efb05e9a599e9a24c839"></a><!-- doxytag: member="SimplifyCFG.cpp::GetIfCondition" ref="a872693f6b0f3efb05e9a599e9a24c839" args="(BasicBlock *BB, BasicBlock *&IfTrue, BasicBlock *&IfFalse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1Value.html">Value</a>* GetIfCondition </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *& </td>
+ <td class="paramname"><em>IfTrue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *& </td>
+ <td class="paramname"><em>IfFalse</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>GetIfCondition - Given a basic block (BB) with two predecessors (and at least one PHI node in it), check to see if the merge at this block is due to an "if condition". If so, return the boolean condition that determines which entry into BB will be taken. Also, return by references the block that will be entered from if the condition is true, and the block that will be entered if the condition is false.</p>
+<p>This does no checking to see if the true/false blocks have large or unsavory instructions in them. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00203">203</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.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="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l02060">llvm::PHINode::getIncomingBlock()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00183">llvm::BasicBlock::getSinglePredecessor()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, and <a class="el" href="OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01610">FoldTwoEntryPHINode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada99fd4fd27356d1518273d8248940a5"></a><!-- doxytag: member="SimplifyCFG.cpp::HasBranchWeights" ref="ada99fd4fd27356d1518273d8248940a5" 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> HasBranchWeights </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> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00772">772</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instruction_8h_source.html#l00139">llvm::Instruction::getMetadata()</a>, <a class="el" href="Metadata_8cpp_source.html#l00305">llvm::MDNode::getOperand()</a>, and <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03067">EliminateDeadSwitchCases()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02456">SimplifySwitchOnSelect()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02525">TryToSimplifyUncondBranchWithICmpInIt()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l03003">TurnSwitchRangeIntoICmp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6434e674d53619188f1a6b4bac3b304e"></a><!-- doxytag: member="SimplifyCFG.cpp::HoistThenElseCodeToIf" ref="a6434e674d53619188f1a6b4bac3b304e" args="(BranchInst *BI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> HoistThenElseCodeToIf </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>HoistThenElseCodeToIf - Given a conditional branch that goes to BB1 and BB2, hoist any common code in the two blocks up into the branch block. The caller of this function guarantees that BI's block dominates BB1 and BB2. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01056">1056</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SimplifyCFG_8cpp_source.html#l00183">AddPredecessorToBlock()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Instruction_8cpp_source.html#l00432">llvm::Instruction::clone()</a>, <a class="el" href="IRBuilder_8h_source.html#l01256">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00504">EraseTerminatorInstAndDCECond()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l02060">llvm::PHINode::getIncomingBlock()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Value_8cpp_source.h
tml#l00164">llvm::Value::getName()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Value_8h_source.html#l00253">llvm::Value::intersectOptionalDataWith()</a>, <a class="el" href="Instruction_8cpp_source.html#l00181">llvm::Instruction::isIdenticalToWhenDefined()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01037">isSafeToHoistInvoke()</a>, <a class="el" href="Type_8h_source.html#l00136">llvm::Type::isVoidTy()</a>, <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>, <a class="el" href="Instructions_8h_source.html#l02048">llvm::PHINode::setIncomingValue()</a>, <a class="el" href="Interval_8h_source.h
tml#l00107">llvm::succ_begin()</a>, <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>, and <a class="el" href="Value_8cpp_source.html#l00233">llvm::Value::takeName()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a69987e50a47c1566fa22b3cfd696e7ea"></a><!-- doxytag: member="SimplifyCFG.cpp::isProfitableToFoldUnconditional" ref="a69987e50a47c1566fa22b3cfd696e7ea" args="(BranchInst *SI1, BranchInst *SI2, Instruction *Cond, SmallVectorImpl< PHINode * > &PhiNodes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isProfitableToFoldUnconditional </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>SI1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>SI2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+ <td class="paramname"><em>Cond</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_1PHINode.html">PHINode</a> * > & </td>
+ <td class="paramname"><em>PhiNodes</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>isProfitableToFoldUnconditional - Return true if it is safe and profitable to merge these two terminator instructions together, where SI1 is an unconditional branch. PhiNodes will store all PHI nodes in common successors. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00143">143</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallPtrSet_8h_source.html#l00265">llvm::SmallPtrSet< PtrType, SmallSize >::count()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, <a class="el" href="Instructions_8h_source.html#l02377">llvm::BranchInst::isUnconditional()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike >::push_back()</a>, <a class="el" href="Interv
al_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3aaba0277f5dd5636e099fa81c20c533"></a><!-- doxytag: member="SimplifyCFG.cpp::isSafeToHoistInvoke" ref="a3aaba0277f5dd5636e099fa81c20c533" args="(BasicBlock *BB1, BasicBlock *BB2, Instruction *I1, Instruction *I2)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isSafeToHoistInvoke </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+ <td class="paramname"><em>I1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+ <td class="paramname"><em>I2</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="SimplifyCFG_8cpp_source.html#l01037">1037</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="Interval_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01056">HoistThenElseCodeToIf()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afe11668c8bd8d29c005ca8e66ba9ef6b"></a><!-- doxytag: member="SimplifyCFG.cpp::LookupConstant" ref="afe11668c8bd8d29c005ca8e66ba9ef6b" args="(Value *V, const SmallDenseMap< Value *, Constant * > &ConstantPool)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* LookupConstant </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_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1Value.html">Value</a> *, <a class="el" href="classllvm_1_1Constant.html">Constant</a> * > & </td>
+ <td class="paramname"><em>ConstantPool</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>LookupConstant - If V is a Constant, return it. Otherwise, try to look up its constant value in ConstantPool, returning 0 if it's not there. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03201">3201</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, and <a class="el" href="DenseMap_8h_source.html#l00141">llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT >, KeyT, ValueT, KeyInfoT >::lookup()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03212">ConstantFold()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l03259">GetCaseResults()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d718b79cd2832d71600169ac3e132b0"></a><!-- doxytag: member="SimplifyCFG.cpp::passingValueIsAlwaysUndefined" ref="a8d718b79cd2832d71600169ac3e132b0" args="(Value *V, 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> passingValueIsAlwaysUndefined </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"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+ <td class="paramname"><em>I</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Check if passing a value to an instruction will cause undefined behavior. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03866">3866</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.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="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Constants_8cpp_source.html#l00054">llvm::Constant::isNullValue()</a>, <a class="el" href="LoopInfoImpl_8h_source.html#l00430">LI</a>, <a class="el" href="Value_8h_source.html#l00145">llvm::Value::use_begin()</a>, and <a class="el" href="Value_8h_source.html#l00144">llvm::Value::use_empty()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03906">removeUndefIntroducingPredecessor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2026c2afa149ebc0c1ac8fd091fdc22c"></a><!-- doxytag: member="SimplifyCFG.cpp::removeUndefIntroducingPredecessor" ref="a2026c2afa149ebc0c1ac8fd091fdc22c" args="(BasicBlock *BB)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> removeUndefIntroducingPredecessor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If BB has an incoming value that will always trigger undefined behavior (eg. null pointer dereference), remove the branch leading here. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03906">3906</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="IRBuilder_8h_source.html#l00460">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l00520">llvm::IRBuilder< preserveNames, T, Inserter >::CreateUnreachable()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="Instructions_8h_source.html#l02060">llvm::PHINode::getIncomingBlock()</a>, <a class="el" href="Instructions_8h_source.html#l02045">llvm::PHINode::getIncomingValue()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTermi
nator()</a>, <a class="el" href="Instructions_8h_source.html#l02377">llvm::BranchInst::isUnconditional()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03866">passingValueIsAlwaysUndefined()</a>, <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>, and <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a02215e210f29948498aeb844022afe53"></a><!-- doxytag: member="SimplifyCFG.cpp::SafeToMergeTerminators" ref="a02215e210f29948498aeb844022afe53" args="(TerminatorInst *SI1, TerminatorInst *SI2)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SafeToMergeTerminators </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> * </td>
+ <td class="paramname"><em>SI1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> * </td>
+ <td class="paramname"><em>SI2</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SafeToMergeTerminators - Return true if it is safe to merge these two terminator instructions together. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00115">115</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="SmallPtrSet_8h_source.html#l00265">llvm::SmallPtrSet< PtrType, SmallSize >::count()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Interval_8h_source.html#l00107">llvm::succ_begin()</a>, and <a class="el" href="Interval_8h_source.html#l00110">llvm::succ_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01871">llvm::FoldBranchToCommonDest()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa1d125e64c3d0c3105dbedc0cc4d5787"></a><!-- doxytag: member="SimplifyCFG.cpp::ShouldBuildLookupTable" ref="aa1d125e64c3d0c3105dbedc0cc4d5787" args="(SwitchInst *SI, uint64_t TableSize, const DataLayout *TD, const SmallDenseMap< PHINode *, Type * > &ResultTypes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> ShouldBuildLookupTable </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint64_t </td>
+ <td class="paramname"><em>TableSize</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_1SmallDenseMap.html">SmallDenseMap</a>< <a class="el" href="classllvm_1_1PHINode.html">PHINode</a> *, <a class="el" href="classllvm_1_1Type.html">Type</a> * > & </td>
+ <td class="paramname"><em>ResultTypes</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ShouldBuildLookupTable - Determine whether a lookup table should be built for this switch, based on the number of caes, size of the table and the types of the results. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03511">3511</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="DenseMap_8h_source.html#l00053">llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT >, KeyT, ValueT, KeyInfoT >::begin()</a>, <a class="el" href="DenseMap_8h_source.html#l00057">llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT >, KeyT, ValueT, KeyInfoT >::end()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, and <a class="el" href="DataTypes_8h_source.html#l00188">UINT64_MAX</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03535">SwitchToLookupTable()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a39eb6c7310d5673dad5be0af7c6a79f8"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifyBranchOnICmpChain" ref="a39eb6c7310d5673dad5be0af7c6a79f8" args="(BranchInst *BI, const DataLayout *TD, IRBuilder<> &Builder)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifyBranchOnICmpChain </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</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"><a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> & </td>
+ <td class="paramname"><em>Builder</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SimplifyBranchOnICmpChain - The specified branch is a conditional branch. Check to see if it is branching on an or/and chain of icmp instructions, and fold it into a switch instruction if so. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l02632">2632</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8cpp_source.html#l03185">llvm::SwitchInst::addCase()</a>, <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00183">AddPredecessorToBlock()</a>, <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</a>, <a class="el" href="STLExtras_8h_source.html#l00273">llvm::array_pod_sort()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00762">ConstantIntSortPredicate()</a>, <a class="el" href="IRBuilder_8h_source.html#l00466">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l01049">llvm::IRBuilder< preserveNames, T, Inserter >::CreatePtrToInt()</a>, <a class="el" href="IRBuilder_8h_source.html#l00475">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSwitch()</a
>, <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="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00504">EraseTerminatorInstAndDCECond()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00423">GatherConstantCompares()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="DataLayout_8cpp_source.html#l00665">llvm::DataLayout::getIntPtrType()</a>, <a class="el" href="Instruction_8h_source.html#l00082">llvm::Instruction::getOpcode()</a>, <a class="el" href="Instruction_8h_sour
ce.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Type_8h_source.html#l00204">llvm::Type::isPointerTy()</a>, <a class="el" href="APInt_8h_source.html#l01765">llvm::APIntOps::Or()</a>, <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>, <a class="el" href="BasicBlock_8h_source.html#l00194">llvm::BasicBlock::size()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00298">llvm::BasicBlock::splitBasicBlock()</a>, and <a class="el" href="OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a285d756a993fe2460d35129ba58f92a2"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifyCondBranchToCondBranch" ref="a285d756a993fe2460d35129ba58f92a2" args="(BranchInst *PBI, BranchInst *BI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifyCondBranchToCondBranch </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>PBI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SimplifyCondBranchToCondBranch - If we have a conditional branch as a predecessor of another block, this function tries to simplify it. We know that PBI and BI are both conditional branches, and BI is in one of the successor blocks of PBI - PBI branches to BI. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l02189">2189</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00183">AddPredecessorToBlock()</a>, <a class="el" href="StringRef_8h_source.html#l00098">llvm::StringRef::begin()</a>, <a class="el" href="SmallVector_8h_source.html#l00111">llvm::SmallVectorTemplateCommon< T >::begin()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01486">BlockIsSimpleEnoughToThreadThrough()</a>, <a class="el" href="BasicBlock_8h_source.html#l00102">llvm::BasicBlock::Create()</a>, <a class="el" href="Instructions_8h_source.html#l01999">llvm::PHINode::Create()</a>, <a class="el" href="Instructions_8h_source.html#l02359">llvm::BranchInst::Create()</a>, <a class="el" href="IRBuilder_8h_source.html#l00793">llvm::IRBuilder< preserveNames, T, Inserter >::CreateNot()</a>, <a class="el" href="IRBuilder_8h_sourc
e.html#l00736">llvm::IRBuilder< preserveNames, T, Inserter >::CreateOr()</a>, <a class="el" href="IRBuilder_8h_source.html#l01256">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect()</a>, <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="SmallVector_8h_source.html#l00113">llvm::SmallVectorTemplateCommon< T >::end()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l01836">ExtractBranchMetadata()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00807">FitWeights()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instructions_8h_source.ht
ml#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="Type_8cpp_source.html#l00237">llvm::Type::getInt1Ty()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00110">llvm::BasicBlock::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>, <a class="el" href="Interval_8h_source.html#l00117">llvm::pred_begin()</a>, <a class="el" href="Interval_8h_source.html#l00120">llvm::pred_end()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVector
TemplateBase< T, isPodLike< T >::value >::push_back()</a>, <a class="el" href="Instructions_8h_source.html#l02385">llvm::BranchInst::setCondition()</a>, <a class="el" href="Metadata_8cpp_source.html#l00622">llvm::Instruction::setMetadata()</a>, and <a class="el" href="Instructions_8h_source.html#l02397">llvm::BranchInst::setSuccessor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2e1b28b7b4b85744d3a02881d4601122"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifyCondBranchToTwoReturns" ref="a2e1b28b7b4b85744d3a02881d4601122" args="(BranchInst *BI, IRBuilder<> &Builder)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifyCondBranchToTwoReturns </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> & </td>
+ <td class="paramname"><em>Builder</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SimplifyCondBranchToTwoReturns - If we found a conditional branch that goes to two returning blocks, try to merge them together into one return, introducing a select if the return values disagree. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01747">1747</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="IRBuilder_8h_source.html#l00441">llvm::IRBuilder< preserveNames, T, Inserter >::CreateRet()</a>, <a class="el" href="IRBuilder_8h_source.html#l00434">llvm::IRBuilder< preserveNames, T, Inserter >::CreateRetVoid()</a>, <a class="el" href="IRBuilder_8h_source.html#l01256">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect()</a>, <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="SimplifyCFG_8cpp_source.html#l00504">EraseTerminatorInstAndDCECond()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00140">llvm::BasicBlock::getFirstNonPHIOrDbg()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02304">llvm::ReturnInst::getReturnValue()
</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Instructions_8h_source.html#l02378">llvm::BranchInst::isConditional()</a>, <a class="el" href="Instruction_8h_source.html#l00085">llvm::Instruction::isTerminator()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, and <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3ab1a6ec499c9bfd45258e149aa555c5"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifyIndirectBrOnSelect" ref="a3ab1a6ec499c9bfd45258e149aa555c5" args="(IndirectBrInst *IBI, SelectInst *SI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifyIndirectBrOnSelect </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1IndirectBrInst.html">IndirectBrInst</a> * </td>
+ <td class="paramname"><em>IBI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SelectInst.html">SelectInst</a> * </td>
+ <td class="paramname"><em>SI</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="SimplifyCFG_8cpp_source.html#l02492">2492</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Constants_8h_source.html#l00765">llvm::BlockAddress::getBasicBlock()</a>, <a class="el" href="Instructions_8h_source.html#l01452">llvm::SelectInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l01454">llvm::SelectInst::getFalseValue()</a>, <a class="el" href="Instructions_8h_source.html#l01453">llvm::SelectInst::getTrueValue()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02391">SimplifyTerminatorOnSelect()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af0d7fe1e3aa12d83e0af774a398d34ab"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifySwitchOnSelect" ref="af0d7fe1e3aa12d83e0af774a398d34ab" args="(SwitchInst *SI, SelectInst *Select)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifySwitchOnSelect </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SelectInst.html">SelectInst</a> * </td>
+ <td class="paramname"><em>Select</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="SimplifyCFG_8cpp_source.html#l02456">2456</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instructions_8h_source.html#l02575">llvm::SwitchInst::findCaseValue()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00784">GetBranchWeights()</a>, <a class="el" href="Instructions_8h_source.html#l01452">llvm::SelectInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l01454">llvm::SelectInst::getFalseValue()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="Instructions_8h_source.html#l01453">llvm::SelectInst::getTrueValue()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00772">HasBranchWeights()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l02391">SimplifyTerminatorOnSelect()</a>, and <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aae15857ee04fb44315481a693e4562c4"></a><!-- doxytag: member="SimplifyCFG.cpp::SimplifyTerminatorOnSelect" ref="aae15857ee04fb44315481a693e4562c4" args="(TerminatorInst *OldTerm, Value *Cond, BasicBlock *TrueBB, BasicBlock *FalseBB, uint32_t TrueWeight, uint32_t FalseWeight)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SimplifyTerminatorOnSelect </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a> * </td>
+ <td class="paramname"><em>OldTerm</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+ <td class="paramname"><em>Cond</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>TrueBB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>FalseBB</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>TrueWeight</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>FalseWeight</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="SimplifyCFG_8cpp_source.html#l02391">2391</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="IRBuilder_8h_source.html#l00460">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l00466">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00504">EraseTerminatorInstAndDCECond()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instruction_8h_source.html#l00177">llvm::Instruction::getDebugLoc()</a>, <a class="el" href="InstrTypes_8h_source.html#l00059">llvm::TerminatorInst::getNumSuccessors()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="InstrTypes_8h_source.html#l00065">llvm::TerminatorInst::getSuccessor()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>, <a cla
ss="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, <a class="el" href="IRBuilder_8h_source.html#l00110">llvm::IRBuilderBase::SetCurrentDebugLocation()</a>, and <a class="el" href="Metadata_8cpp_source.html#l00622">llvm::Instruction::setMetadata()</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l02492">SimplifyIndirectBrOnSelect()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l02456">SimplifySwitchOnSelect()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a136cc7ed9c1041928df9f03631026a0d"></a><!-- doxytag: member="SimplifyCFG.cpp::SinkThenElseCodeToEnd" ref="a136cc7ed9c1041928df9f03631026a0d" args="(BranchInst *BI1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SinkThenElseCodeToEnd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI1</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SinkThenElseCodeToEnd - Given an unconditional branch that goes to BBEnd, check whether BBEnd has only two predecessors and the other predecessor ends with an unconditional branch. If it is true, sink any common code in the two predecessors to BBEnd. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01170">1170</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Instructions_8h_source.html#l01999">llvm::PHINode::Create()</a>, <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="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="User_8h_source.html#l00108">llvm::User::getNumOperands()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <
a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Value_8h_source.html#l00156">llvm::Value::hasOneUse()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Value_8h_source.html#l00253">llvm::Value::intersectOptionalDataWith()</a>, <a class="el" href="Instruction_8cpp_source.html#l00243">llvm::Instruction::isSameOperationAs()</a>, <a class="el" href="Instructions_8h_source.html#l02377">llvm::BranchInst::isUnconditional()</a>, <a class="el" href="Instruction_8h_source.html#l00264">llvm::Instruction::mayHaveSideEffects()</a>, <a class="el" href="Instruction_8h_source.html#l00250">llvm::Instruction::mayReadOr
WriteMemory()</a>, <a class="el" href="Interval_8h_source.html#l00117">llvm::pred_begin()</a>, <a class="el" href="Interval_8h_source.html#l00120">llvm::pred_end()</a>, <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>, <a class="el" href="User_8h_source.html#l00092">llvm::User::setOperand()</a>, and <a class="el" href="Value_8h_source.html#l00144">llvm::Value::use_empty()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ea7032961696413a2b145bedf1224ad"></a><!-- doxytag: member="SimplifyCFG.cpp::SpeculativelyExecuteBB" ref="a9ea7032961696413a2b145bedf1224ad" args="(BranchInst *BI, BasicBlock *BB1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SpeculativelyExecuteBB </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BranchInst.html">BranchInst</a> * </td>
+ <td class="paramname"><em>BI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+ <td class="paramname"><em>BB1</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SpeculativelyExecuteBB - Given a conditional branch that goes to BB1 and an BB2 and the only successor of BB1 is BB2, hoist simple code (for now, restricted to a single instruction that's side effect free) from the BB1 into the branch block to speculatively execute it.</p>
+<p>Turn BB: t1 = icmp br i1 t1, label BB1, label BB2 BB1: t3 = add t2, c br label BB2 BB2: => BB: t1 = icmp t4 = add t2, c t3 = select i1 t1, t2, t3 </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l01353">1353</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00283">ComputeSpeculationCost()</a>, <a class="el" href="IRBuilder_8h_source.html#l01256">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect()</a>, <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="SetVector_8h_source.html#l00059">llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::empty()</a>, <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Instructions_8h_source.html#l02118">llvm::PHINode::getBasicBlockIndex()</a>, <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="Instructions_8h_source.html#l02045">
llvm::PHINode::getIncomingValue()</a>, <a class="el" href="Instructions_8h_source.html#l02125">llvm::PHINode::getIncomingValueForBlock()</a>, <a class="el" href="BasicBlock_8h_source.html#l00204">llvm::BasicBlock::getInstList()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="InstrTypes_8h_source.html#l00065">llvm::TerminatorInst::getSuccessor()</a>, <a class="el" href="Instructions_8h_source.html#l02392">llvm::BranchInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="SetVector_8h_source.html#l00102">llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::insert()</a>, <a class="el" href="ValueTracking_8cpp_source.html#l01853">llvm::isSafeToSpec
ulativelyExecute()</a>, <a class="el" href="Value_8cpp_source.html#l00110">llvm::Value::isUsedInBasicBlock()</a>, <a class="el" href="Instruction_8h_source.html#l00264">llvm::Instruction::mayHaveSideEffects()</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>, <a class="el" href="SimplifyCFG_8cpp.html#a830a17648b2e5112beef220cc707c977">PHINodeFoldingThreshold</a>, <a class="el" href="Instructions_8h_source.html#l02048">llvm::PHINode::setIncomingValue()</a>, and <a class="el" href="SetVector_8h_source.html#l00064">llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a094edb4846824b6513167facc6a7afe1"></a><!-- doxytag: member="SimplifyCFG.cpp::STATISTIC" ref="a094edb4846824b6513167facc6a7afe1" args="(NumBitMaps,"Number of switch instructions turned into bitmaps")" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">STATISTIC </td>
+ <td>(</td>
+ <td class="paramtype">NumBitMaps </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Number of switch <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> turned into bitmaps" </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="a3b805cb990220111f878d52811233df0"></a><!-- doxytag: member="SimplifyCFG.cpp::STATISTIC" ref="a3b805cb990220111f878d52811233df0" args="(NumLookupTables,"Number of switch instructions turned into lookup tables")" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">STATISTIC </td>
+ <td>(</td>
+ <td class="paramtype">NumLookupTables </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Number of switch <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> turned into lookup tables" </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="afef79ee5b4feaa59ddd09123c1ae3f6a"></a><!-- doxytag: member="SimplifyCFG.cpp::STATISTIC" ref="afef79ee5b4feaa59ddd09123c1ae3f6a" args="(NumSinkCommons,"Number of common instructions sunk down to the end block")" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">STATISTIC </td>
+ <td>(</td>
+ <td class="paramtype">NumSinkCommons </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Number of common <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> sunk down to the end block" </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="ab4d51f817ed15e19df3ba4e102c25207"></a><!-- doxytag: member="SimplifyCFG.cpp::STATISTIC" ref="ab4d51f817ed15e19df3ba4e102c25207" args="(NumSpeculations,"Number of speculative executed instructions")" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">STATISTIC </td>
+ <td>(</td>
+ <td class="paramtype">NumSpeculations </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">"Number of speculative executed <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</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="ae403a3eeaed2fb079121bc3f2092064f"></a><!-- doxytag: member="SimplifyCFG.cpp::SwitchToLookupTable" ref="ae403a3eeaed2fb079121bc3f2092064f" args="(SwitchInst *SI, IRBuilder<> &Builder, const DataLayout *TD, const TargetTransformInfo *TTI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SwitchToLookupTable </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> & </td>
+ <td class="paramname"><em>Builder</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_1TargetTransformInfo.html">TargetTransformInfo</a> * </td>
+ <td class="paramname"><em>TTI</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>SwitchToLookupTable - If the switch is only used to initialize one or more phi nodes in a common successor block with different constant values, replace the switch with lookup tables. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03535">3535</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8h_source.html#l02540">llvm::SwitchInst::case_begin()</a>, <a class="el" href="Instructions_8h_source.html#l02551">llvm::SwitchInst::case_end()</a>, <a class="el" href="DenseMap_8h_source.html#l00101">llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT >, KeyT, ValueT, KeyInfoT >::count()</a>, <a class="el" href="BasicBlock_8h_source.html#l00102">llvm::BasicBlock::Create()</a>, <a class="el" href="IRBuilder_8h_source.html#l00460">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l00466">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l01138">llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpULT()</a>, <a class="el" href="IRBuilder_8h_source.html#l00441">llvm::IRBuilder< preserveNames, T, Inserter >::CreateRet()</a>, <a class="el" href="IRBuilder_
8h_source.html#l00568">llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03259">GetCaseResults()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="Module_8h_source.html#l00247">llvm::Module::getContext()</a>, <a class="el" href="Instructions_8h_source.html#l02524">llvm::SwitchInst::getDefaultDest()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00140">llvm::BasicBlock::getFirstNonPHIOrDbg()</a>, <a class="el" href="APInt_8h_source.html#l00388">llvm::APInt::getLimitedValue()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="Instructions_8h_source.html#l02624">llvm::SwitchInst::getNumSu
ccessors()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00110">llvm::BasicBlock::getParent()</a>, <a class="el" href="GlobalValue_8h_source.html#l00286">llvm::GlobalValue::getParent()</a>, <a class="el" href="TargetTransformInfo_8h_source.html#l00057">llvm::TargetTransformInfo::getScalarTargetTransformInfo()</a>, <a class="el" href="Instructions_8h_source.html#l02625">llvm::SwitchInst::getSuccessor()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Constants_8h_source.html#l00140">llvm::ConstantInt::getType()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBa
se< T, isPodLike< T >::value >::push_back()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00216">llvm::BasicBlock::removePredecessor()</a>, <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>, <a class="el" href="APInt_8h_source.html#l01016">llvm::APInt::sgt()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l03511">ShouldBuildLookupTable()</a>, <a class="el" href="TargetTransformInfo_8h_source.html#l00122">llvm::ScalarTargetTransformInfo::shouldBuildLookupTables()</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>, and <a class="el" href="APInt_8cpp_source.html#l00547">llvm::APInt::slt()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08e3b1927df1f87b617dcae0998dff2e"></a><!-- doxytag: member="SimplifyCFG.cpp::TryToSimplifyUncondBranchWithICmpInIt" ref="a08e3b1927df1f87b617dcae0998dff2e" args="(ICmpInst *ICI, const DataLayout *TD, IRBuilder<> &Builder)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> TryToSimplifyUncondBranchWithICmpInIt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> * </td>
+ <td class="paramname"><em>ICI</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"><a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> & </td>
+ <td class="paramname"><em>Builder</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>TryToSimplifyUncondBranchWithICmpInIt - This is called when we find an icmp instruction (a seteq/setne with a constant) as the only instruction in a block that ends with an uncond branch. We are looking for a very specific pattern that occurs when "A == 1 || A == 2 || A == 3" gets simplified. In this case, we merge the first two "or's of icmp" into a switch, but then the default value goes to an uncond block with a seteq in it, we get something like:</p>
+<p>switch i8 A, label DEFAULT [ i8 1, label end i8 2, label end ] DEFAULT: tmp = icmp eq i8 A, 92 br label end end: ... = phi i1 [ true, entry ], [ tmp, DEFAULT ], [ true, entry ]</p>
+<p>We prefer to split the edge to 'end' so that there is a true/false entry to the PHI, merging the third icmp into the switch. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l02525">2525</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="Instructions_8cpp_source.html#l03185">llvm::SwitchInst::addCase()</a>, <a class="el" href="Instructions_8h_source.html#l02086">llvm::PHINode::addIncoming()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="Instructions_8h_source.html#l02564">llvm::SwitchInst::case_default()</a>, <a class="el" href="BasicBlock_8h_source.html#l00102">llvm::BasicBlock::Create()</a>, <a class="el" href="IRBuilder_8h_source.html#l00460">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="Instructions_8h_source.html#l02590">llvm::SwitchInst::findCaseDest()</a>, <a class="el" href="Instructions_8h_source.html#l02575">llvm::SwitchInst::findCaseValue()</a>, <a class="el" href="BasicBlock_8h_source.html#
l00196">llvm::BasicBlock::front()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00784">GetBranchWeights()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00033">llvm::BasicBlock::getContext()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instruction_8h_source.html#l00177">llvm::Instruction::getDebugLoc()</a>, <a class="el" href="Instructions_8h_source.html#l02524">llvm::SwitchInst::getDefaultDest()</a>, <a class="el" href="Constants_8cpp_source.html#l00413">llvm::ConstantInt::getFalse()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a>, <a class="el" href="BasicBlock_8h_source.html#l00110">llvm::
BasicBlock::getParent()</a>, <a class="el" href="InstrTypes_8h_source.html#l00708">llvm::CmpInst::getPredicate()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00183">llvm::BasicBlock::getSinglePredecessor()</a>, <a class="el" href="InstrTypes_8h_source.html#l00065">llvm::TerminatorInst::getSuccessor()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00120">llvm::BasicBlock::getTerminator()</a>, <a class="el" href="Constants_8cpp_source.html#l00406">llvm::ConstantInt::getTrue()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00772">HasBranchWeights()</a>, <a class="el" href="Value_8h_source.html#l00156">llvm::Value::hasOneUse()</a>, <a class="el" href="InstrTypes_8h_source.html#l00666">llvm::CmpInst::ICMP_EQ</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>, <a class="el" href="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>, <a class="el" href="IRBuilder_8h_source.html#l00110">llvm::IRBuilderBa
se::SetCurrentDebugLocation()</a>, <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>, <a class="el" href="Metadata_8cpp_source.html#l00622">llvm::Instruction::setMetadata()</a>, <a class="el" href="User_8h_source.html#l00092">llvm::User::setOperand()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l04001">llvm::SimplifyCFG()</a>, <a class="el" href="InstructionSimplify_8cpp_source.html#l02781">llvm::SimplifyInstruction()</a>, <a class="el" href="BitVector_8h_source.html#l00584">std::swap()</a>, and <a class="el" href="Instruction_8h_source.html#l00048">llvm::Instruction::use_back()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf5ef34c952cc6bc5dce92d91598bdd2"></a><!-- doxytag: member="SimplifyCFG.cpp::TurnSwitchRangeIntoICmp" ref="abf5ef34c952cc6bc5dce92d91598bdd2" args="(SwitchInst *SI, IRBuilder<> &Builder)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> TurnSwitchRangeIntoICmp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1SwitchInst.html">SwitchInst</a> * </td>
+ <td class="paramname"><em>SI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1IRBuilder.html">IRBuilder</a><> & </td>
+ <td class="paramname"><em>Builder</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>TurnSwitchRangeIntoICmp - Turns a switch with that contains only a integer range comparison into a sub, an icmp and a branch. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03003">3003</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="STLExtras_8h_source.html#l00273">llvm::array_pod_sort()</a>, <a class="el" href="Instructions_8h_source.html#l02540">llvm::SwitchInst::case_begin()</a>, <a class="el" href="Instructions_8h_source.html#l02551">llvm::SwitchInst::case_end()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00762">ConstantIntSortPredicate()</a>, <a class="el" href="IRBuilder_8h_source.html#l00546">llvm::IRBuilder< preserveNames, T, Inserter >::CreateAdd()</a>, <a class="el" href="IRBuilder_8h_source.html#l00466">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr()</a>, <a class="el" href="IRBuilder_8h_source.html#l01138">llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpULT()</a>, <a class="el" href="Instruction_8cpp_source.html#l00071">llvm::Instruction::eraseFromParent()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00784">GetBra
nchWeights()</a>, <a class="el" href="Instructions_8h_source.html#l02707">llvm::SwitchInst::CaseIteratorT< SwitchInstTy, ConstantIntTy, SubsetsItTy, BasicBlockTy >::getCaseSuccessor()</a>, <a class="el" href="Instructions_8h_source.html#l02691">llvm::SwitchInst::CaseIteratorT< SwitchInstTy, ConstantIntTy, SubsetsItTy, BasicBlockTy >::getCaseValue()</a>, <a class="el" href="Instructions_8h_source.html#l02521">llvm::SwitchInst::getCondition()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Instructions_8h_source.html#l02524">llvm::SwitchInst::getDefaultDest()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Constants_8cpp_source.html#l01930">llvm::ConstantExpr::getNeg()</a>, <a class="el" href="Instructions_8h_source.html#l02534">llvm::SwitchInst::getNumCases()</a>, <a class="el" href="Instruction_8h_source.html#l00051">llvm::Instruction::getParent()</a
>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="SimplifyCFG_8cpp_source.html#l00772">HasBranchWeights()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="Constants_8cpp_source.html#l00054">llvm::Constant::isNullValue()</a>, <a class="el" href="LLVMContext_8h_source.html#l00046">llvm::LLVMContext::MD_prof</a>, <a class="el" href="Metadata_8cpp_source.html#l00622">llvm::Instruction::setMetadata()</a>, and <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a73476159b3f570043406e83b49ea036c"></a><!-- doxytag: member="SimplifyCFG.cpp::ValidLookupTableConstant" ref="a73476159b3f570043406e83b49ea036c" args="(Constant *C)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> ValidLookupTableConstant </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+ <td class="paramname"><em>C</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ValidLookupTableConstant - Return true if the backend will be able to handle initializing an array of constants like C. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l03188">3188</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>.</p>
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l03259">GetCaseResults()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaba6ba9e89bea12994fa7a7a6ade4d38"></a><!-- doxytag: member="SimplifyCFG.cpp::ValuesOverlap" ref="aaba6ba9e89bea12994fa7a7a6ade4d38" args="(std::vector< ValueEqualityComparisonCase > &C1, std::vector< ValueEqualityComparisonCase > &C2)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> ValuesOverlap </td>
+ <td>(</td>
+ <td class="paramtype">std::vector< ValueEqualityComparisonCase > & </td>
+ <td class="paramname"><em>C1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector< ValueEqualityComparisonCase > & </td>
+ <td class="paramname"><em>C2</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>ValuesOverlap - Return true if there are any keys in C1 that exist in C2 as well. </p>
+
+<p>Definition at line <a class="el" href="SimplifyCFG_8cpp_source.html#l00578">578</a> of file <a class="el" href="SimplifyCFG_8cpp_source.html">SimplifyCFG.cpp</a>.</p>
+
+<p>References <a class="el" href="STLExtras_8h_source.html#l00273">llvm::array_pod_sort()</a>, <a class="el" href="BitVector_8h_source.html#l00584">std::swap()</a>, <a class="el" href="NVPTX_8h_source.html#l00121">llvm::NVPTX::PTXLdStInstCode::V2</a>, and <a class="el" href="Value_8cpp_source.html#l00043">llvm::Value::Value()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a0b13773c26dad640e24611c48c657463"></a><!-- doxytag: member="SimplifyCFG.cpp::DupRet" ref="a0b13773c26dad640e24611c48c657463" args="("simplifycfg-dup-ret", cl::Hidden, cl::init(false), cl::desc("Duplicate return instructions into unconditional branches"))" -->
+<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="SimplifyCFG_8cpp.html#a0b13773c26dad640e24611c48c657463">DupRet</a>("simplifycfg-dup-ret", cl::Hidden, cl::init(<a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a>), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Duplicate return <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> into unconditional branches"))<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a830a17648b2e5112beef220cc707c977"></a><!-- doxytag: member="SimplifyCFG.cpp::PHINodeFoldingThreshold" ref="a830a17648b2e5112beef220cc707c977" args="("phi-node-folding-threshold", cl::Hidden, cl::init(1), cl::desc("Control the amount of phi node folding to perform (default = 1)"))" -->
+<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="SimplifyCFG_8cpp.html#a830a17648b2e5112beef220cc707c977">PHINodeFoldingThreshold</a>("phi-node-folding-threshold", cl::Hidden, cl::init(1), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Control the amount of phi node folding to perform (default = 1)"))<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="SimplifyCFG_8cpp_source.html#l01610">FoldTwoEntryPHINode()</a>, and <a class="el" href="SimplifyCFG_8cpp_source.html#l01353">SpeculativelyExecuteBB()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7707bcaec113d0d136467c7b97a62f1"></a><!-- doxytag: member="SimplifyCFG.cpp::SinkCommon" ref="ac7707bcaec113d0d136467c7b97a62f1" args="("simplifycfg-sink-common", cl::Hidden, cl::init(true), cl::desc("Sink common instructions down to the end block"))" -->
+<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="SimplifyCFG_8cpp.html#ac7707bcaec113d0d136467c7b97a62f1">SinkCommon</a>("simplifycfg-<a class="el" href="MachineSink_8cpp.html#abaeca283dd5280e74ec8774a25829c8d">sink</a>-common", cl::Hidden, cl::init(<a class="el" href="LoopSimplify_8cpp.html#a13f020c6a40eb04f1b4f9ddfbb004ce0">true</a>), <a class="el" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>("Sink common <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> down to the end block"))<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</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/SimplifyIndVar_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,449 @@
+<!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: SimplifyIndVar.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_256b03a856f3de95632a509cd258a236.html">Utils</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SimplifyIndVar.cpp</div> </div>
+</div>
+<div class="contents">
+<a href="SimplifyIndVar_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SimplifyIndVar.cpp - Induction variable simplification ------------===//</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 induction variable simplification. It does</span>
+<a name="l00011"></a>00011 <span class="comment">// not define any actual pass or policy, but provides a single function to</span>
+<a name="l00012"></a>00012 <span class="comment">// simplify a loop's induction variables based on ScalarEvolution.</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><a class="code" href="SimplifyIndVar_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">00016</a> <span class="preprocessor">#define DEBUG_TYPE "indvars"</span>
+<a name="l00017"></a>00017 <span class="preprocessor"></span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="Instructions_8h.html">llvm/Instructions.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="IVUsers_8h.html">llvm/Analysis/IVUsers.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="LoopInfo_8h.html">llvm/Analysis/LoopInfo.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="LoopPass_8h.html">llvm/Analysis/LoopPass.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="ScalarEvolutionExpressions_8h.html">llvm/Analysis/ScalarEvolutionExpressions.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="CommandLine_8h.html">llvm/Support/CommandLine.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="SimplifyIndVar_8h.html">llvm/Transforms/Utils/SimplifyIndVar.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="DataLayout_8h.html">llvm/DataLayout.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="SmallVector_8h.html">llvm/ADT/SmallVector.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="Statistic_8h.html">llvm/ADT/Statistic.h</a>"</span>
+<a name="l00030"></a>00030
+<a name="l00031"></a>00031 <span class="keyword">using namespace </span>llvm;
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumElimIdentity, <span class="stringliteral">"Number of IV identities eliminated"</span>);
+<a name="l00034"></a>00034 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumElimOperand, <span class="stringliteral">"Number of IV operands folded into a use"</span>);
+<a name="l00035"></a>00035 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumElimRem , <span class="stringliteral">"Number of IV remainder operations eliminated"</span>);
+<a name="l00036"></a>00036 <a class="code" href="Statistic_8h.html#ad6117415b93e5675d5a6c8e1855b3b2f">STATISTIC</a>(NumElimCmp , <span class="stringliteral">"Number of IV comparisons eliminated"</span>);
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 <span class="keyword">namespace </span>{<span class="comment"></span>
+<a name="l00039"></a>00039 <span class="comment"> /// SimplifyIndvar - This is a utility for simplifying induction variables</span>
+<a name="l00040"></a>00040 <span class="comment"> /// based on ScalarEvolution. It is the primary instrument of the</span>
+<a name="l00041"></a>00041 <span class="comment"> /// IndvarSimplify pass, but it may also be directly invoked to cleanup after</span>
+<a name="l00042"></a>00042 <span class="comment"> /// other loop passes that preserve SCEV.</span>
+<a name="l00043"></a>00043 <span class="comment"></span> <span class="keyword">class </span>SimplifyIndvar {
+<a name="l00044"></a>00044 <a class="code" href="classllvm_1_1Loop.html">Loop</a> *L;
+<a name="l00045"></a>00045 <a class="code" href="classllvm_1_1LoopInfo.html">LoopInfo</a> *<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>;
+<a name="l00046"></a>00046 <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE;
+<a name="l00047"></a>00047 <span class="keyword">const</span> <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD; <span class="comment">// May be NULL</span>
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<WeakVH></a> &DeadInsts;
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="keywordtype">bool</span> Changed;
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="keyword">public</span>:
+<a name="l00054"></a>00054 SimplifyIndvar(<a class="code" href="classllvm_1_1Loop.html">Loop</a> *<a class="code" href="classllvm_1_1Loop.html">Loop</a>, <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE, <a class="code" href="classllvm_1_1LPPassManager.html">LPPassManager</a> *LPM,
+<a name="l00055"></a>00055 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<WeakVH></a> &<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa2fee1a7db4e84247a193a9af1f907013">Dead</a>, <a class="code" href="classllvm_1_1IVUsers.html">IVUsers</a> *IVU = NULL) :
+<a name="l00056"></a>00056 L(Loop),
+<a name="l00057"></a>00057 <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>(LPM->getAnalysisIfAvailable<<a class="code" href="classllvm_1_1LoopInfo.html">LoopInfo</a>>()),
+<a name="l00058"></a>00058 SE(SE),
+<a name="l00059"></a>00059 TD(LPM->getAnalysisIfAvailable<<a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a>>()),
+<a name="l00060"></a>00060 DeadInsts(Dead),
+<a name="l00061"></a>00061 Changed(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>) {
+<a name="l00062"></a>00062 assert(<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a> && <span class="stringliteral">"IV simplification requires LoopInfo"</span>);
+<a name="l00063"></a>00063 }
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="keywordtype">bool</span> hasChanged()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Changed; }
+<a name="l00066"></a>00066 <span class="comment"></span>
+<a name="l00067"></a>00067 <span class="comment"> /// Iteratively perform simplification on a worklist of users of the</span>
+<a name="l00068"></a>00068 <span class="comment"> /// specified induction variable. This is the top-level driver that applies</span>
+<a name="l00069"></a>00069 <span class="comment"> /// all simplicitions to users of an IV.</span>
+<a name="l00070"></a>00070 <span class="comment"></span> <span class="keywordtype">void</span> simplifyUsers(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *CurrIV, <a class="code" href="classllvm_1_1IVVisitor.html">IVVisitor</a> *V = NULL);
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *foldIVUser(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *UseInst, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOperand);
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="keywordtype">bool</span> eliminateIVUser(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *UseInst, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOperand);
+<a name="l00075"></a>00075 <span class="keywordtype">void</span> eliminateIVComparison(<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *<a class="code" href="namespacellvm.html#a6a4ce50f71e29df6dd1920cf067a2eb5">ICmp</a>, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IVOperand);
+<a name="l00076"></a>00076 <span class="keywordtype">void</span> eliminateIVRemainder(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *Rem, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IVOperand,
+<a name="l00077"></a>00077 <span class="keywordtype">bool</span> IsSigned);
+<a name="l00078"></a>00078 };
+<a name="l00079"></a>00079 }
+<a name="l00080"></a>00080 <span class="comment"></span>
+<a name="l00081"></a>00081 <span class="comment">/// foldIVUser - Fold an IV operand into its use. This removes increments of an</span>
+<a name="l00082"></a>00082 <span class="comment">/// aligned IV when used by a instruction that ignores the low bits.</span>
+<a name="l00083"></a>00083 <span class="comment">///</span>
+<a name="l00084"></a>00084 <span class="comment">/// IVOperand is guaranteed SCEVable, but UseInst may not be.</span>
+<a name="l00085"></a>00085 <span class="comment">///</span>
+<a name="l00086"></a>00086 <span class="comment">/// Return the operand of IVOperand for this induction variable if IVOperand can</span>
+<a name="l00087"></a>00087 <span class="comment">/// be folded (in case more folding opportunities have been exposed).</span>
+<a name="l00088"></a>00088 <span class="comment">/// Otherwise return null.</span>
+<a name="l00089"></a>00089 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SimplifyIndvar::foldIVUser(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *UseInst, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOperand) {
+<a name="l00090"></a>00090 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IVSrc = 0;
+<a name="l00091"></a>00091 <span class="keywordtype">unsigned</span> OperIdx = 0;
+<a name="l00092"></a>00092 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *FoldedExpr = 0;
+<a name="l00093"></a>00093 <span class="keywordflow">switch</span> (UseInst-><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="l00094"></a>00094 <span class="keywordflow">default</span>:
+<a name="l00095"></a>00095 <span class="keywordflow">return</span> 0;
+<a name="l00096"></a>00096 <span class="keywordflow">case</span> Instruction::UDiv:
+<a name="l00097"></a>00097 <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>:
+<a name="l00098"></a>00098 <span class="comment">// We're only interested in the case where we know something about</span>
+<a name="l00099"></a>00099 <span class="comment">// the numerator and have a constant denominator.</span>
+<a name="l00100"></a>00100 <span class="keywordflow">if</span> (IVOperand != UseInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(OperIdx) ||
+<a name="l00101"></a>00101 !isa<ConstantInt>(UseInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00102"></a>00102 <span class="keywordflow">return</span> 0;
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="comment">// Attempt to fold a binary operator with constant operand.</span>
+<a name="l00105"></a>00105 <span class="comment">// e.g. ((I + 1) >> 2) => I >> 2</span>
+<a name="l00106"></a>00106 <span class="keywordflow">if</span> (!isa<BinaryOperator>(IVOperand)
+<a name="l00107"></a>00107 || !isa<ConstantInt>(IVOperand-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00108"></a>00108 <span class="keywordflow">return</span> 0;
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 IVSrc = IVOperand-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00111"></a>00111 <span class="comment">// IVSrc must be the (SCEVable) IV, since the other operand is const.</span>
+<a name="l00112"></a>00112 assert(SE->isSCEVable(IVSrc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) && <span class="stringliteral">"Expect SCEVable IV operand"</span>);
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *D = cast<ConstantInt>(UseInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00115"></a>00115 <span class="keywordflow">if</span> (UseInst-><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 class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>) {
+<a name="l00116"></a>00116 <span class="comment">// Get a constant for the divisor. See createSCEV.</span>
+<a name="l00117"></a>00117 uint32_t BitWidth = cast<IntegerType>(UseInst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())-><a class="code" href="ValueTracking_8cpp.html#a06c14477546c3a0eb4c79ff007ea2375">getBitWidth</a>();
+<a name="l00118"></a>00118 <span class="keywordflow">if</span> (D-><a class="code" href="classllvm_1_1ConstantInt.html#af8dde13a97efce293a7b04daf1e208fb" title="Return the constant's value.">getValue</a>().<a class="code" href="classllvm_1_1APInt.html#a0229ff3a1d7432810a86c8efab115c33" title="Unsigned greater or equal comparison.">uge</a>(BitWidth))
+<a name="l00119"></a>00119 <span class="keywordflow">return</span> 0;
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 D = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(UseInst-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>(),
+<a name="l00122"></a>00122 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(BitWidth, 1).<a class="code" href="classllvm_1_1APInt.html#a411d64cdd67dcdfd36677fda0cc52bc1" title="Left-shift function.">shl</a>(D-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>()));
+<a name="l00123"></a>00123 }
+<a name="l00124"></a>00124 FoldedExpr = SE->getUDivExpr(SE->getSCEV(IVSrc), SE->getSCEV(D));
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126 <span class="comment">// We have something that might fold it's operand. Compare SCEVs.</span>
+<a name="l00127"></a>00127 <span class="keywordflow">if</span> (!SE->isSCEVable(UseInst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()))
+<a name="l00128"></a>00128 <span class="keywordflow">return</span> 0;
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 <span class="comment">// Bypass the operand if SCEV can prove it has no effect.</span>
+<a name="l00131"></a>00131 <span class="keywordflow">if</span> (SE->getSCEV(UseInst) != FoldedExpr)
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> 0;
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134 <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">"INDVARS: Eliminated IV operand: "</span> << *IVOperand
+<a name="l00135"></a>00135 << <span class="stringliteral">" -> "</span> << *UseInst << <span class="charliteral">'\n'</span>);
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 UseInst-><a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(OperIdx, IVSrc);
+<a name="l00138"></a>00138 assert(SE->getSCEV(UseInst) == FoldedExpr && <span class="stringliteral">"bad SCEV with folded oper"</span>);
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140 ++NumElimOperand;
+<a name="l00141"></a>00141 Changed = <span class="keyword">true</span>;
+<a name="l00142"></a>00142 <span class="keywordflow">if</span> (IVOperand-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>())
+<a name="l00143"></a>00143 DeadInsts.push_back(IVOperand);
+<a name="l00144"></a>00144 <span class="keywordflow">return</span> IVSrc;
+<a name="l00145"></a>00145 }
+<a name="l00146"></a>00146 <span class="comment"></span>
+<a name="l00147"></a>00147 <span class="comment">/// eliminateIVComparison - SimplifyIVUsers helper for eliminating useless</span>
+<a name="l00148"></a>00148 <span class="comment">/// comparisons against an induction variable.</span>
+<a name="l00149"></a>00149 <span class="comment"></span><span class="keywordtype">void</span> SimplifyIndvar::eliminateIVComparison(<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *<a class="code" href="namespacellvm.html#a6a4ce50f71e29df6dd1920cf067a2eb5">ICmp</a>, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IVOperand) {
+<a name="l00150"></a>00150 <span class="keywordtype">unsigned</span> IVOperIdx = 0;
+<a name="l00151"></a>00151 <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05">ICmpInst::Predicate</a> Pred = ICmp-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>();
+<a name="l00152"></a>00152 <span class="keywordflow">if</span> (IVOperand != ICmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)) {
+<a name="l00153"></a>00153 <span class="comment">// Swapped</span>
+<a name="l00154"></a>00154 assert(IVOperand == ICmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1) && <span class="stringliteral">"Can't find IVOperand"</span>);
+<a name="l00155"></a>00155 IVOperIdx = 1;
+<a name="l00156"></a>00156 Pred = <a class="code" href="classllvm_1_1CmpInst.html#ab5d3f9900a0284e85ee7a1520a4eeb60" title="Return the predicate as if the operands were swapped.">ICmpInst::getSwappedPredicate</a>(Pred);
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 <span class="comment">// Get the SCEVs for the ICmp operands.</span>
+<a name="l00160"></a>00160 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S = SE->getSCEV(ICmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(IVOperIdx));
+<a name="l00161"></a>00161 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a> = SE->getSCEV(ICmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1 - IVOperIdx));
+<a name="l00162"></a>00162
+<a name="l00163"></a>00163 <span class="comment">// Simplify unnecessary loops away.</span>
+<a name="l00164"></a>00164 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *ICmpLoop = <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>->getLoopFor(ICmp-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>());
+<a name="l00165"></a>00165 S = SE->getSCEVAtScope(S, ICmpLoop);
+<a name="l00166"></a>00166 X = SE->getSCEVAtScope(X, ICmpLoop);
+<a name="l00167"></a>00167
+<a name="l00168"></a>00168 <span class="comment">// If the condition is always true or always false, replace it with</span>
+<a name="l00169"></a>00169 <span class="comment">// a constant value.</span>
+<a name="l00170"></a>00170 <span class="keywordflow">if</span> (SE->isKnownPredicate(Pred, S, X))
+<a name="l00171"></a>00171 ICmp-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(<a class="code" href="classllvm_1_1ConstantInt.html#a82dbbd8e3688b0bc1eedb338864d0d0c">ConstantInt::getTrue</a>(ICmp-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l00172"></a>00172 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SE->isKnownPredicate(<a class="code" href="classllvm_1_1CmpInst.html#a3c76890714593c78e3b5d142c9030548" title="Return the inverse of the instruction's predicate.">ICmpInst::getInversePredicate</a>(Pred), S, X))
+<a name="l00173"></a>00173 ICmp-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(<a class="code" href="classllvm_1_1ConstantInt.html#aa7cce62ac5cc6df09cce0535874336b7">ConstantInt::getFalse</a>(ICmp-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l00174"></a>00174 <span class="keywordflow">else</span>
+<a name="l00175"></a>00175 <span class="keywordflow">return</span>;
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <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">"INDVARS: Eliminated comparison: "</span> << *ICmp << <span class="charliteral">'\n'</span>);
+<a name="l00178"></a>00178 ++NumElimCmp;
+<a name="l00179"></a>00179 Changed = <span class="keyword">true</span>;
+<a name="l00180"></a>00180 DeadInsts.push_back(ICmp);
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 <span class="comment"></span>
+<a name="l00183"></a>00183 <span class="comment">/// eliminateIVRemainder - SimplifyIVUsers helper for eliminating useless</span>
+<a name="l00184"></a>00184 <span class="comment">/// remainder operations operating on an induction variable.</span>
+<a name="l00185"></a>00185 <span class="comment"></span><span class="keywordtype">void</span> SimplifyIndvar::eliminateIVRemainder(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *Rem,
+<a name="l00186"></a>00186 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IVOperand,
+<a name="l00187"></a>00187 <span class="keywordtype">bool</span> IsSigned) {
+<a name="l00188"></a>00188 <span class="comment">// We're only interested in the case where we know something about</span>
+<a name="l00189"></a>00189 <span class="comment">// the numerator.</span>
+<a name="l00190"></a>00190 <span class="keywordflow">if</span> (IVOperand != Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0))
+<a name="l00191"></a>00191 <span class="keywordflow">return</span>;
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="comment">// Get the SCEVs for the ICmp operands.</span>
+<a name="l00194"></a>00194 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S = SE->getSCEV(Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00195"></a>00195 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *X = SE->getSCEV(Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="comment">// Simplify unnecessary loops away.</span>
+<a name="l00198"></a>00198 <span class="keyword">const</span> <a class="code" href="classllvm_1_1Loop.html">Loop</a> *ICmpLoop = <a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a>->getLoopFor(Rem-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>());
+<a name="l00199"></a>00199 S = SE->getSCEVAtScope(S, ICmpLoop);
+<a name="l00200"></a>00200 X = SE->getSCEVAtScope(X, ICmpLoop);
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 <span class="comment">// i % n --> i if i is in [0,n).</span>
+<a name="l00203"></a>00203 <span class="keywordflow">if</span> ((!IsSigned || SE->isKnownNonNegative(S)) &&
+<a name="l00204"></a>00204 SE->isKnownPredicate(IsSigned ? <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a15ae464950ac676919c2f0c7aafc706c" title="signed less than">ICmpInst::ICMP_SLT</a> : <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a91d86a4753c8bd7624e01bf565d87f8e" title="unsigned less than">ICmpInst::ICMP_ULT</a>,
+<a name="l00205"></a>00205 S, X))
+<a name="l00206"></a>00206 Rem-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00207"></a>00207 <span class="keywordflow">else</span> {
+<a name="l00208"></a>00208 <span class="comment">// (i+1) % n --> (i+1)==n?0:(i+1) if i is in [0,n).</span>
+<a name="l00209"></a>00209 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *LessOne =
+<a name="l00210"></a>00210 SE->getMinusSCEV(S, SE->getConstant(S-><a class="code" href="classllvm_1_1SCEV.html#a9a16f1241255a605fc8debc1e26eaa4c">getType</a>(), 1));
+<a name="l00211"></a>00211 <span class="keywordflow">if</span> (IsSigned && !SE->isKnownNonNegative(LessOne))
+<a name="l00212"></a>00212 <span class="keywordflow">return</span>;
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <span class="keywordflow">if</span> (!SE->isKnownPredicate(IsSigned ?
+<a name="l00215"></a>00215 <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a15ae464950ac676919c2f0c7aafc706c" title="signed less than">ICmpInst::ICMP_SLT</a> : ICmpInst::ICMP_ULT,
+<a name="l00216"></a>00216 LessOne, X))
+<a name="l00217"></a>00217 <span class="keywordflow">return</span>;
+<a name="l00218"></a>00218
+<a name="l00219"></a>00219 <a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICmp = <span class="keyword">new</span> <a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a>(Rem, <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05aa719225e2de4059f93fd3209e1f48218" title="equal">ICmpInst::ICMP_EQ</a>,
+<a name="l00220"></a>00220 Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00221"></a>00221 <a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *Sel =
+<a name="l00222"></a>00222 <a class="code" href="classllvm_1_1SelectInst.html#a8bce457e977f23507c48c9dfd7052990">SelectInst::Create</a>(ICmp,
+<a name="l00223"></a>00223 <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Rem-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 0),
+<a name="l00224"></a>00224 Rem-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), <span class="stringliteral">"tmp"</span>, Rem);
+<a name="l00225"></a>00225 Rem-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(Sel);
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 <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">"INDVARS: Simplified rem: "</span> << *Rem << <span class="charliteral">'\n'</span>);
+<a name="l00229"></a>00229 ++NumElimRem;
+<a name="l00230"></a>00230 Changed = <span class="keyword">true</span>;
+<a name="l00231"></a>00231 DeadInsts.push_back(Rem);
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233 <span class="comment"></span>
+<a name="l00234"></a>00234 <span class="comment">/// eliminateIVUser - Eliminate an operation that consumes a simple IV and has</span>
+<a name="l00235"></a>00235 <span class="comment">/// no observable side-effect given the range of IV values.</span>
+<a name="l00236"></a>00236 <span class="comment">/// IVOperand is guaranteed SCEVable, but UseInst may not be.</span>
+<a name="l00237"></a>00237 <span class="comment"></span><span class="keywordtype">bool</span> SimplifyIndvar::eliminateIVUser(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *UseInst,
+<a name="l00238"></a>00238 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOperand) {
+<a name="l00239"></a>00239 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICmp = dyn_cast<ICmpInst>(UseInst)) {
+<a name="l00240"></a>00240 eliminateIVComparison(ICmp, IVOperand);
+<a name="l00241"></a>00241 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00242"></a>00242 }
+<a name="l00243"></a>00243 <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *Rem = dyn_cast<BinaryOperator>(UseInst)) {
+<a name="l00244"></a>00244 <span class="keywordtype">bool</span> IsSigned = Rem-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>() == Instruction::SRem;
+<a name="l00245"></a>00245 <span class="keywordflow">if</span> (IsSigned || Rem-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>() == Instruction::URem) {
+<a name="l00246"></a>00246 eliminateIVRemainder(Rem, IVOperand, IsSigned);
+<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 <span class="comment">// Eliminate any operation that SCEV can prove is an identity function.</span>
+<a name="l00252"></a>00252 <span class="keywordflow">if</span> (!SE->isSCEVable(UseInst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) ||
+<a name="l00253"></a>00253 (UseInst-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != IVOperand-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) ||
+<a name="l00254"></a>00254 (SE->getSCEV(UseInst) != SE->getSCEV(IVOperand)))
+<a name="l00255"></a>00255 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <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">"INDVARS: Eliminated identity: "</span> << *UseInst << <span class="charliteral">'\n'</span>);
+<a name="l00258"></a>00258
+<a name="l00259"></a>00259 UseInst-><a class="code" href="classllvm_1_1Value.html#a3ab5fc45117b450e8bb04e564cb6e5f2">replaceAllUsesWith</a>(IVOperand);
+<a name="l00260"></a>00260 ++NumElimIdentity;
+<a name="l00261"></a>00261 Changed = <span class="keyword">true</span>;
+<a name="l00262"></a>00262 DeadInsts.push_back(UseInst);
+<a name="l00263"></a>00263 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265 <span class="comment"></span>
+<a name="l00266"></a>00266 <span class="comment">/// pushIVUsers - Add all uses of Def to the current IV's worklist.</span>
+<a name="l00267"></a>00267 <span class="comment">///</span>
+<a name="l00268"></a><a class="code" href="SimplifyIndVar_8cpp.html#a644363e986ed6b4712ec081d8330c9d1">00268</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SimplifyIndVar_8cpp.html#a644363e986ed6b4712ec081d8330c9d1">pushIVUsers</a>(
+<a name="l00269"></a>00269 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5aceb138f68fe183995736614928e3394a">Def</a>,
+<a name="l00270"></a>00270 <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<Instruction*,16></a> &Simplified,
+<a name="l00271"></a>00271 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< std::pair<Instruction*,Instruction*> > &SimpleIVUsers) {
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UI = Def-><a class="code" href="classllvm_1_1Value.html#a413abcab8dbc3900fc2fde96a5d8fca6">use_begin</a>(), E = Def-><a class="code" href="classllvm_1_1Value.html#ad86469939d2a8bdd4169be9403b89f5a">use_end</a>();
+<a name="l00274"></a>00274 UI != E; ++UI) {
+<a name="l00275"></a>00275 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1User.html">User</a> = cast<Instruction>(*UI);
+<a name="l00276"></a>00276
+<a name="l00277"></a>00277 <span class="comment">// Avoid infinite or exponential worklist processing.</span>
+<a name="l00278"></a>00278 <span class="comment">// Also ensure unique worklist users.</span>
+<a name="l00279"></a>00279 <span class="comment">// If Def is a LoopPhi, it may not be in the Simplified set, so check for</span>
+<a name="l00280"></a>00280 <span class="comment">// self edges first.</span>
+<a name="l00281"></a>00281 <span class="keywordflow">if</span> (User != Def && Simplified.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(User))
+<a name="l00282"></a>00282 SimpleIVUsers.push_back(std::make_pair(User, Def));
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284 }
+<a name="l00285"></a>00285 <span class="comment"></span>
+<a name="l00286"></a>00286 <span class="comment">/// isSimpleIVUser - Return true if this instruction generates a simple SCEV</span>
+<a name="l00287"></a>00287 <span class="comment">/// expression in terms of that IV.</span>
+<a name="l00288"></a>00288 <span class="comment">///</span>
+<a name="l00289"></a>00289 <span class="comment">/// This is similar to IVUsers' isInteresting() but processes each instruction</span>
+<a name="l00290"></a>00290 <span class="comment">/// non-recursively when the operand is already known to be a simpleIVUser.</span>
+<a name="l00291"></a>00291 <span class="comment">///</span>
+<a name="l00292"></a><a class="code" href="SimplifyIndVar_8cpp.html#a3e219df8a1368668aa0aac77616a4ce9">00292</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SimplifyIndVar_8cpp.html#a3e219df8a1368668aa0aac77616a4ce9">isSimpleIVUser</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 class="code" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE) {
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (!SE-><a class="code" href="classllvm_1_1ScalarEvolution.html#ae9623974341419bfd1d185cfdc65bedd">isSCEVable</a>(I-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()))
+<a name="l00294"></a>00294 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 <span class="comment">// Get the symbolic expression for this instruction.</span>
+<a name="l00297"></a>00297 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEV.html">SCEV</a> *S = SE-><a class="code" href="classllvm_1_1ScalarEvolution.html#a30bd18ac905eacf3601bc6a553a9ff49">getSCEV</a>(I);
+<a name="l00298"></a>00298
+<a name="l00299"></a>00299 <span class="comment">// Only consider affine recurrences.</span>
+<a name="l00300"></a>00300 <span class="keyword">const</span> <a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a> *AR = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1SCEVAddRecExpr.html">SCEVAddRecExpr</a>>(S);
+<a name="l00301"></a>00301 <span class="keywordflow">if</span> (AR && AR-><a class="code" href="classllvm_1_1SCEVAddRecExpr.html#a7fcbbc51eef313e675a2442bb2053ae9">getLoop</a>() == L)
+<a name="l00302"></a>00302 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00303"></a>00303
+<a name="l00304"></a>00304 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 <span class="comment"></span>
+<a name="l00307"></a>00307 <span class="comment">/// simplifyUsers - Iteratively perform simplification on a worklist of users</span>
+<a name="l00308"></a>00308 <span class="comment">/// of the specified induction variable. Each successive simplification may push</span>
+<a name="l00309"></a>00309 <span class="comment">/// more users which may themselves be candidates for simplification.</span>
+<a name="l00310"></a>00310 <span class="comment">///</span>
+<a name="l00311"></a>00311 <span class="comment">/// This algorithm does not require IVUsers analysis. Instead, it simplifies</span>
+<a name="l00312"></a>00312 <span class="comment">/// instructions in-place during analysis. Rather than rewriting induction</span>
+<a name="l00313"></a>00313 <span class="comment">/// variables bottom-up from their users, it transforms a chain of IVUsers</span>
+<a name="l00314"></a>00314 <span class="comment">/// top-down, updating the IR only when it encouters a clear optimization</span>
+<a name="l00315"></a>00315 <span class="comment">/// opportunitiy.</span>
+<a name="l00316"></a>00316 <span class="comment">///</span>
+<a name="l00317"></a>00317 <span class="comment">/// Once DisableIVRewrite is default, LSR will be the only client of IVUsers.</span>
+<a name="l00318"></a>00318 <span class="comment">///</span>
+<a name="l00319"></a>00319 <span class="comment"></span><span class="keywordtype">void</span> SimplifyIndvar::simplifyUsers(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *CurrIV, <a class="code" href="classllvm_1_1IVVisitor.html">IVVisitor</a> *V) {
+<a name="l00320"></a>00320 <span class="keywordflow">if</span> (!SE->isSCEVable(CurrIV-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()))
+<a name="l00321"></a>00321 <span class="keywordflow">return</span>;
+<a name="l00322"></a>00322
+<a name="l00323"></a>00323 <span class="comment">// Instructions processed by SimplifyIndvar for CurrIV.</span>
+<a name="l00324"></a>00324 <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<Instruction*,16></a> Simplified;
+<a name="l00325"></a>00325
+<a name="l00326"></a>00326 <span class="comment">// Use-def pairs if IV users waiting to be processed for CurrIV.</span>
+<a name="l00327"></a>00327 <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<Instruction*, Instruction*></a>, 8> SimpleIVUsers;
+<a name="l00328"></a>00328
+<a name="l00329"></a>00329 <span class="comment">// Push users of the current LoopPhi. In rare cases, pushIVUsers may be</span>
+<a name="l00330"></a>00330 <span class="comment">// called multiple times for the same LoopPhi. This is the proper thing to</span>
+<a name="l00331"></a>00331 <span class="comment">// do for loop header phis that use each other.</span>
+<a name="l00332"></a>00332 <a class="code" href="SimplifyIndVar_8cpp.html#a644363e986ed6b4712ec081d8330c9d1">pushIVUsers</a>(CurrIV, Simplified, SimpleIVUsers);
+<a name="l00333"></a>00333
+<a name="l00334"></a>00334 <span class="keywordflow">while</span> (!SimpleIVUsers.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>()) {
+<a name="l00335"></a>00335 std::pair<Instruction*, Instruction*> UseOper =
+<a name="l00336"></a>00336 SimpleIVUsers.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a0c8ffe664a36e30d49c84d0aded2fe08">pop_back_val</a>();
+<a name="l00337"></a>00337 <span class="comment">// Bypass back edges to avoid extra work.</span>
+<a name="l00338"></a>00338 <span class="keywordflow">if</span> (UseOper.first == CurrIV) <span class="keywordflow">continue</span>;
+<a name="l00339"></a>00339
+<a name="l00340"></a>00340 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *IVOperand = UseOper.second;
+<a name="l00341"></a>00341 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> N = 0; IVOperand; ++<a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>) {
+<a name="l00342"></a>00342 assert(N <= Simplified.<a class="code" href="classllvm_1_1SmallPtrSetImpl.html#a41c201584742f7eb45b2be8cd54e3bcb">size</a>() && <span class="stringliteral">"runaway iteration"</span>);
+<a name="l00343"></a>00343
+<a name="l00344"></a>00344 <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewOper = foldIVUser(UseOper.first, IVOperand);
+<a name="l00345"></a>00345 <span class="keywordflow">if</span> (!NewOper)
+<a name="l00346"></a>00346 <span class="keywordflow">break</span>; <span class="comment">// done folding</span>
+<a name="l00347"></a>00347 IVOperand = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(NewOper);
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349 <span class="keywordflow">if</span> (!IVOperand)
+<a name="l00350"></a>00350 <span class="keywordflow">continue</span>;
+<a name="l00351"></a>00351
+<a name="l00352"></a>00352 <span class="keywordflow">if</span> (eliminateIVUser(UseOper.first, IVOperand)) {
+<a name="l00353"></a>00353 <a class="code" href="SimplifyIndVar_8cpp.html#a644363e986ed6b4712ec081d8330c9d1">pushIVUsers</a>(IVOperand, Simplified, SimpleIVUsers);
+<a name="l00354"></a>00354 <span class="keywordflow">continue</span>;
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356 <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *Cast = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a>>(UseOper.first);
+<a name="l00357"></a>00357 <span class="keywordflow">if</span> (V && Cast) {
+<a name="l00358"></a>00358 V-><a class="code" href="classllvm_1_1IVVisitor.html#a366cbb9ce621c37ddb186c0813e60f22">visitCast</a>(Cast);
+<a name="l00359"></a>00359 <span class="keywordflow">continue</span>;
+<a name="l00360"></a>00360 }
+<a name="l00361"></a>00361 <span class="keywordflow">if</span> (<a class="code" href="SimplifyIndVar_8cpp.html#a3e219df8a1368668aa0aac77616a4ce9">isSimpleIVUser</a>(UseOper.first, L, SE)) {
+<a name="l00362"></a>00362 <a class="code" href="SimplifyIndVar_8cpp.html#a644363e986ed6b4712ec081d8330c9d1">pushIVUsers</a>(UseOper.first, Simplified, SimpleIVUsers);
+<a name="l00363"></a>00363 }
+<a name="l00364"></a>00364 }
+<a name="l00365"></a>00365 }
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 <span class="keyword">namespace </span>llvm {
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369 <span class="keywordtype">void</span> IVVisitor::anchor() { }
+<a name="l00370"></a>00370 <span class="comment"></span>
+<a name="l00371"></a>00371 <span class="comment">/// simplifyUsersOfIV - Simplify instructions that use this induction variable</span>
+<a name="l00372"></a>00372 <span class="comment">/// by using ScalarEvolution to analyze the IV's recurrence.</span>
+<a name="l00373"></a><a class="code" href="namespacellvm.html#adead3a49058bc795978ec97b9c99e1a2">00373</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#adead3a49058bc795978ec97b9c99e1a2">simplifyUsersOfIV</a>(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *CurrIV, <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE, <a class="code" href="classllvm_1_1LPPassManager.html">LPPassManager</a> *LPM,
+<a name="l00374"></a>00374 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<WeakVH></a> &<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa2fee1a7db4e84247a193a9af1f907013">Dead</a>, <a class="code" href="classllvm_1_1IVVisitor.html">IVVisitor</a> *V)
+<a name="l00375"></a>00375 {
+<a name="l00376"></a>00376 <a class="code" href="classllvm_1_1LoopInfo.html">LoopInfo</a> *<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a> = &LPM-><a class="code" href="classllvm_1_1Pass.html#ab78af013d3a11515403da8517f8f3d4a">getAnalysis</a><<a class="code" href="classllvm_1_1LoopInfo.html">LoopInfo</a>>();
+<a name="l00377"></a>00377 SimplifyIndvar SIV(LI-><a class="code" href="classllvm_1_1LoopInfo.html#a4abca289c73cd09487e05d11d9f7d877">getLoopFor</a>(CurrIV-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()), SE, LPM, Dead);
+<a name="l00378"></a>00378 SIV.simplifyUsers(CurrIV, V);
+<a name="l00379"></a>00379 <span class="keywordflow">return</span> SIV.hasChanged();
+<a name="l00380"></a>00380 }
+<a name="l00381"></a>00381 <span class="comment"></span>
+<a name="l00382"></a>00382 <span class="comment">/// simplifyLoopIVs - Simplify users of induction variables within this</span>
+<a name="l00383"></a>00383 <span class="comment">/// loop. This does not actually change or add IVs.</span>
+<a name="l00384"></a><a class="code" href="namespacellvm.html#aa7578a2ebd899a0174c82843cdf3c274">00384</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#aa7578a2ebd899a0174c82843cdf3c274">simplifyLoopIVs</a>(<a class="code" href="classllvm_1_1Loop.html">Loop</a> *L, <a class="code" href="classllvm_1_1ScalarEvolution.html">ScalarEvolution</a> *SE, <a class="code" href="classllvm_1_1LPPassManager.html">LPPassManager</a> *LPM,
+<a name="l00385"></a>00385 <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<WeakVH></a> &<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa2fee1a7db4e84247a193a9af1f907013">Dead</a>) {
+<a name="l00386"></a>00386 <span class="keywordtype">bool</span> Changed = <span class="keyword">false</span>;
+<a name="l00387"></a>00387 <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> = L-><a class="code" href="classllvm_1_1LoopBase.html#ac4f141a355e5898255f2cbc57c5b54c3">getHeader</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>(); isa<PHINode>(<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="l00388"></a>00388 Changed |= <a class="code" href="namespacellvm.html#adead3a49058bc795978ec97b9c99e1a2">simplifyUsersOfIV</a>(cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>), SE, LPM, Dead);
+<a name="l00389"></a>00389 }
+<a name="l00390"></a>00390 <span class="keywordflow">return</span> Changed;
+<a name="l00391"></a>00391 }
+<a name="l00392"></a>00392
+<a name="l00393"></a>00393 } <span class="comment">// namespace llvm</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/SimplifyIndVar_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,102 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SimplifyIndVar.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/Support/CommandLine.h",height=0.2,width=0.4,color="black",URL="$CommandLine_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+ Node3 -> 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"];
+ Node3 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="utility",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+ Node2 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="black",URL="$SmallVector_8h.html"];
+ Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+ Node13 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="cassert",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="cstring",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="iterator",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="memory",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="black",URL="$Twine_8h.html"];
+ Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+ Node21 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node22 [label="limits",height=0.2,width=0.4,color="grey75"];
+ Node21 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node23 [label="string",height=0.2,width=0.4,color="grey75"];
+ Node21 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+ Node24 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node24 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node25 [label="climits",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node26 [label="cstdarg",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node27 [label="vector",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 [label="llvm/Support/ValueHandle.h",height=0.2,width=0.4,color="black",URL="$ValueHandle_8h.html"];
+ Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node29 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="black",URL="$DenseMapInfo_8h.html"];
+ Node29 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node30 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+ Node30 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node29 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node31 [label="llvm/ADT/PointerIntPair.h",height=0.2,width=0.4,color="black",URL="$PointerIntPair_8h.html"];
+ Node31 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node31 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node28 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 [label="llvm/Value.h",height=0.2,width=0.4,color="black",URL="$Value_8h.html"];
+ Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 [label="llvm/Use.h",height=0.2,width=0.4,color="black",URL="$Use_8h.html"];
+ Node33 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node33 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 [label="llvm/Support/Casting.h",height=0.2,width=0.4,color="black",URL="$Casting_8h.html"];
+ Node34 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node34 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node32 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyIndVar_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,109 @@
+<!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: SimplifyIndVar.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">SimplifyIndVar.h</div> </div>
+</div>
+<div class="contents">
+<a href="SimplifyIndVar_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/Transforms/Utils/SimplifyIndVar.h - Indvar Utils ---*- 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 in interface for induction variable simplification. It does</span>
+<a name="l00011"></a>00011 <span class="comment">// not define any actual pass or policy, but provides a single function to</span>
+<a name="l00012"></a>00012 <span class="comment">// simplify a loop's induction variables based on ScalarEvolution.</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">#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H</span>
+<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H</span>
+<a name="l00018"></a>00018 <span class="preprocessor"></span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="CommandLine_8h.html">llvm/Support/CommandLine.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="ValueHandle_8h.html">llvm/Support/ValueHandle.h</a>"</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="keyword">namespace </span>llvm {
+<a name="l00023"></a>00023
+<a name="l00024"></a>00024 <span class="keyword">class </span>CastInst;
+<a name="l00025"></a>00025 <span class="keyword">class </span>IVUsers;
+<a name="l00026"></a>00026 <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="l00027"></a>00027 <span class="keyword">class </span>LPPassManager;
+<a name="l00028"></a>00028 <span class="keyword">class </span>PHINode;
+<a name="l00029"></a>00029 <span class="keyword">class </span>ScalarEvolution;
+<a name="l00030"></a>00030 <span class="comment"></span>
+<a name="l00031"></a>00031 <span class="comment">/// Interface for visiting interesting IV users that are recognized but not</span>
+<a name="l00032"></a>00032 <span class="comment">/// simplified by this utility.</span>
+<a name="l00033"></a><a class="code" href="classllvm_1_1IVVisitor.html">00033</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classllvm_1_1IVVisitor.html">IVVisitor</a> {
+<a name="l00034"></a>00034 <span class="keyword">virtual</span> <span class="keywordtype">void</span> anchor();
+<a name="l00035"></a>00035 <span class="keyword">public</span>:
+<a name="l00036"></a><a class="code" href="classllvm_1_1IVVisitor.html#ab4b6613af725ade77c0426f317c704c1">00036</a> <span class="keyword">virtual</span> <a class="code" href="classllvm_1_1IVVisitor.html#ab4b6613af725ade77c0426f317c704c1">~IVVisitor</a>() {}
+<a name="l00037"></a>00037 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1IVVisitor.html#a366cbb9ce621c37ddb186c0813e60f22">visitCast</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *Cast) = 0;
+<a name="l00038"></a>00038 };
+<a name="l00039"></a>00039 <span class="comment"></span>
+<a name="l00040"></a>00040 <span class="comment">/// simplifyUsersOfIV - Simplify instructions that use this induction variable</span>
+<a name="l00041"></a>00041 <span class="comment">/// by using ScalarEvolution to analyze the IV's recurrence.</span>
+<a name="l00042"></a>00042 <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#adead3a49058bc795978ec97b9c99e1a2">simplifyUsersOfIV</a>(PHINode *CurrIV, ScalarEvolution *SE, LPPassManager *LPM,
+<a name="l00043"></a>00043 SmallVectorImpl<WeakVH> &<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa2fee1a7db4e84247a193a9af1f907013">Dead</a>, IVVisitor *V = NULL);
+<a name="l00044"></a>00044 <span class="comment"></span>
+<a name="l00045"></a>00045 <span class="comment">/// SimplifyLoopIVs - Simplify users of induction variables within this</span>
+<a name="l00046"></a>00046 <span class="comment">/// loop. This does not actually change or add IVs.</span>
+<a name="l00047"></a>00047 <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#aa7578a2ebd899a0174c82843cdf3c274">simplifyLoopIVs</a>(<a class="code" href="namespacellvm_1_1GC.html#a5f606a2b04c809f789a574660cd25213a960eba6a93af558b44d3d14e8393d324" title="Instr is a loop (backwards branch).">Loop</a> *L, ScalarEvolution *SE, LPPassManager *LPM,
+<a name="l00048"></a>00048 SmallVectorImpl<WeakVH> &<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daa2fee1a7db4e84247a193a9af1f907013">Dead</a>);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 } <span class="comment">// namespace llvm</span>
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 <span class="preprocessor">#endif</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/SimplifyLibCalls_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SimplifyLibCalls_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SimplifyLibCalls_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SimplifyLibCalls_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+9849807bd45e2766915774dbd4efcca4
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,108 @@
+<!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: SlotIndexes.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="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">SlotIndexes.h File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="MachineInstrBundle_8h_source.html">llvm/CodeGen/MachineInstrBundle.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="MachineFunctionPass_8h_source.html">llvm/CodeGen/MachineFunctionPass.h</a>"</code><br/>
+<code>#include "<a class="el" href="PointerIntPair_8h_source.html">llvm/ADT/PointerIntPair.h</a>"</code><br/>
+<code>#include "<a class="el" href="ilist_8h_source.html">llvm/ADT/ilist.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="DenseMap_8h_source.html">llvm/ADT/DenseMap.h</a>"</code><br/>
+<code>#include "<a class="el" href="Allocator_8h_source.html">llvm/Support/Allocator.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SlotIndexes.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SlotIndexes_8h__incl.png" border="0" usemap="#SlotIndexes_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="SlotIndexes_8h__dep__incl.png" border="0" usemap="#SlotIndexes_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SlotIndexes_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_1IndexListEntry.html">llvm::IndexListEntry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1ilist__traits_3_01IndexListEntry_01_4.html">llvm::ilist_traits< IndexListEntry ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SlotIndex.html">llvm::SlotIndex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> - An opaque wrapper around machine indexes. <a href="classllvm_1_1SlotIndex.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1isPodLike_3_01SlotIndex_01_4.html">llvm::isPodLike< SlotIndex ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1Idx2MBBCompare.html">llvm::Idx2MBBCompare</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1SlotIndexes.html">llvm::SlotIndexes</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1IntervalMapInfo_3_01SlotIndex_01_4.html">llvm::IntervalMapInfo< SlotIndex ></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="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef std::pair< SlotIndex, <br class="typebreak"/>
+MachineBasicBlock * > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#aba24e536c3251a25af8e222286db0850">llvm::IdxMBBPair</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">raw_ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#afb2f5b035ec59f95f3816eafe1ac4b43">llvm::operator<<</a> (raw_ostream &os, SlotIndex li)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#acbebae85c778fdcf1a8b19620084ce18">llvm::operator<</a> (SlotIndex V, const IdxMBBPair &IM)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a7cc26e8345ee22f199c63e4d63846330">llvm::operator<</a> (const IdxMBBPair &IM, SlotIndex V)</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/SlotIndexes_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SlotIndexes_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+f2a08a92f77fcd9adb0f20362aa23c30
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SmallBitVector_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallBitVector_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallBitVector_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallBitVector_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+44b8999e98affc20417a840db724f147
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SmallPtrSet_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallPtrSet_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallPtrSet_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallPtrSet_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,53 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SmallPtrSet.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/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"];
+ Node1 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="black",URL="$DenseMapInfo_8h.html"];
+ Node14 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+ Node15 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="utility",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="black",URL="$MathExtras_8h.html"];
+ Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="llvm/Support/SwapByteOrder.h",height=0.2,width=0.4,color="black",URL="$SwapByteOrder_8h.html"];
+ Node18 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="limits",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node20 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node21 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+2c3f7da4f1eaad42abecfead9dab3e7d
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallSet_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+c4081a2d01406e41e881b152be667283
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SmallString_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallString_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallString_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallString_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,78 @@
+<!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: SmallString.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_5760af5717174facf3d4fa63878994a9.html">ADT</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">SmallString.h File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SmallVector_8h_source.html">llvm/ADT/SmallVector.h</a>"</code><br/>
+<code>#include "<a class="el" href="StringRef_8h_source.html">llvm/ADT/StringRef.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SmallString.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SmallString_8h__incl.png" border="0" usemap="#SmallString_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SmallString_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_1SmallString.html">llvm::SmallString< InternalLen ></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:41 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/SmallVector_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SmallVector_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SmallVector_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SmallVector_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,42 @@
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="SmallVector.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/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_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="cstddef",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+ Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+ Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="math.h",height=0.2,width=0.4,color="grey75"];
+ Node6 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node6 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+ Node6 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+ Node5 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="utility",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="cassert",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="cstring",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="iterator",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="memory",height=0.2,width=0.4,color="grey75"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/Solution_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Solution_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Solution_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Solution_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="Solution.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="HeuristicSolver.h",height=0.2,width=0.4,color="black",URL="$HeuristicSolver_8h.html"];
+ Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="HeuristicBase.h",height=0.2,width=0.4,color="black",URL="$HeuristicBase_8h.html"];
+ Node3 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="Briggs.h",height=0.2,width=0.4,color="black",URL="$Briggs_8h.html"];
+ Node4 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="RegAllocPBQP.cpp",height=0.2,width=0.4,color="black",URL="$RegAllocPBQP_8cpp.html"];
+ Node2 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="RegAllocPBQP.h",height=0.2,width=0.4,color="black",URL="$RegAllocPBQP_8h.html"];
+ Node6 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SourceMgr_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SourceMgr_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SourceMgr_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SourceMgr_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+f90903248259aebafdaac647e34c0185
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcAsmPrinter_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcAsmPrinter_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcAsmPrinter_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcAsmPrinter_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+5aa708c1afb8ec0e58eb88702594b5f0
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+0ac711542f8ad3aff0de8451b1c16f8e
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcFrameLowering_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,96 @@
+<!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: SparcFrameLowering.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SparcFrameLowering.h</div> </div>
+</div>
+<div class="contents">
+<a href="SparcFrameLowering_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SparcFrameLowering.h - Define frame lowering for Sparc --*- 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">//</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 SPARC_FRAMEINFO_H</span>
+<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define SPARC_FRAMEINFO_H</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="Sparc_8h.html">Sparc.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="SparcSubtarget_8h.html">SparcSubtarget.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="TargetFrameLowering_8h.html">llvm/Target/TargetFrameLowering.h</a>"</span>
+<a name="l00020"></a>00020
+<a name="l00021"></a>00021 <span class="keyword">namespace </span>llvm {
+<a name="l00022"></a>00022 <span class="keyword">class </span>SparcSubtarget;
+<a name="l00023"></a>00023
+<a name="l00024"></a><a class="code" href="classllvm_1_1SparcFrameLowering.html">00024</a> <span class="keyword">class </span><a class="code" href="classllvm_1_1SparcFrameLowering.html">SparcFrameLowering</a> : <span class="keyword">public</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> {
+<a name="l00025"></a>00025 <span class="keyword">public</span>:
+<a name="l00026"></a><a class="code" href="classllvm_1_1SparcFrameLowering.html#ab73b43f8166e5daefd276eb3320833d2">00026</a> <span class="keyword">explicit</span> <a class="code" href="classllvm_1_1SparcFrameLowering.html#ab73b43f8166e5daefd276eb3320833d2">SparcFrameLowering</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1SparcSubtarget.html">SparcSubtarget</a> &<span class="comment">/*sti*/</span>)
+<a name="l00027"></a>00027 : <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a>(<a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a>::<a class="code" href="classllvm_1_1TargetFrameLowering.html#a453c74e2daac0745b53f8b31c11fc50cad1fc7c9d0bae5bf76a67d2d26ce99c1a">StackGrowsDown</a>, 8, 0) {
+<a name="l00028"></a>00028 }
+<a name="l00029"></a>00029 <span class="comment"></span>
+<a name="l00030"></a>00030 <span class="comment"> /// emitProlog/emitEpilog - These methods insert prolog and epilog code into</span>
+<a name="l00031"></a>00031 <span class="comment"> /// the function.</span>
+<a name="l00032"></a>00032 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SparcFrameLowering.html#ab683aa4264876a91326df0c62b0495ea">emitPrologue</a>(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF) <span class="keyword">const</span>;
+<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1SparcFrameLowering.html#a3625cd68d7b3456e35f607b6eb9e28c9">emitEpilogue</a>(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF, <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB) <span class="keyword">const</span>;
+<a name="l00034"></a>00034
+<a name="l00035"></a><a class="code" href="classllvm_1_1SparcFrameLowering.html#abc026d52c6ae080bff69c891069c7812">00035</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1SparcFrameLowering.html#abc026d52c6ae080bff69c891069c7812">hasFP</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00036"></a>00036 };
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 } <span class="comment">// End llvm namespace</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:18 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/SparcInstrInfo_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,114 @@
+<!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: SparcInstrInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#define-members">Defines</a> |
+<a href="#enum-members">Enumerations</a> </div>
+ <div class="headertitle">
+<div class="title">SparcInstrInfo.h File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SparcRegisterInfo_8h_source.html">SparcRegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetInstrInfo_8h_source.html">llvm/Target/TargetInstrInfo.h</a>"</code><br/>
+<code>#include "SparcGenInstrInfo.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SparcInstrInfo.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SparcInstrInfo_8h__incl.png" border="0" usemap="#SparcInstrInfo_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="SparcInstrInfo_8h__dep__incl.png" border="0" usemap="#SparcInstrInfo_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SparcInstrInfo_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_1SparcInstrInfo.html">llvm::SparcInstrInfo</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 class="memItemLeft" align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1SPII.html">llvm::SPII</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="SparcInstrInfo_8h.html#ab12de263eb2ee622714701bc1946fad6">GET_INSTRINFO_HEADER</a></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_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a17a19cadefc233162854b3d0e5a45705">llvm::SPII::Pseudo</a> = (1<<0),
+<a class="el" href="namespacellvm_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a5069619ca8fdce305534f3fe85091a0f">llvm::SPII::Load</a> = (1<<1),
+<a class="el" href="namespacellvm_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a36b3dd3b84fde3f8494a9b18af131856">llvm::SPII::Store</a> = (1<<2),
+<a class="el" href="namespacellvm_1_1SPII.html#add994c36633ba2d8f6a1366b775e88a6a7441cc88673535510c39412b68c7618b">llvm::SPII::DelaySlot</a> = (1<<3)
+ }</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ab12de263eb2ee622714701bc1946fad6"></a><!-- doxytag: member="SparcInstrInfo.h::GET_INSTRINFO_HEADER" ref="ab12de263eb2ee622714701bc1946fad6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GET_INSTRINFO_HEADER</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SparcInstrInfo_8h_source.html#l00020">20</a> of file <a class="el" href="SparcInstrInfo_8h_source.html">SparcInstrInfo.h</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:41 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/SparcInstrInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcInstrInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+fe429cb431a93e3e61e9e68cb935e4b6
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,66 @@
+<!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: SparcMCAsmInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ <li class="navelem"><a class="el" href="dir_0ab3e721b4862084a2819cf1ac46b201.html">MCTargetDesc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SparcMCAsmInfo.cpp File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SparcMCAsmInfo_8h_source.html">SparcMCAsmInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="Triple_8h_source.html">llvm/ADT/Triple.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SparcMCAsmInfo.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SparcMCAsmInfo_8cpp__incl.png" border="0" usemap="#SparcMCAsmInfo_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SparcMCAsmInfo_8cpp_source.html">Go to the source code of this file.</a></p>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:43 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/SparcMCAsmInfo_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_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: SparcMCAsmInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ <li class="navelem"><a class="el" href="dir_0ab3e721b4862084a2819cf1ac46b201.html">MCTargetDesc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SparcMCAsmInfo.cpp</div> </div>
+</div>
+<div class="contents">
+<a href="SparcMCAsmInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SparcMCAsmInfo.cpp - Sparc 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 SparcMCAsmInfo 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="SparcMCAsmInfo_8h.html">SparcMCAsmInfo.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="Triple_8h.html">llvm/ADT/Triple.h</a>"</span>
+<a name="l00016"></a>00016
+<a name="l00017"></a>00017 <span class="keyword">using namespace </span>llvm;
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="keywordtype">void</span> SparcELFMCAsmInfo::anchor() { }
+<a name="l00020"></a>00020
+<a name="l00021"></a><a class="code" href="classllvm_1_1SparcELFMCAsmInfo.html#a5f357236e430f20519566fce2489e010">00021</a> <a class="code" href="classllvm_1_1SparcELFMCAsmInfo.html#a5f357236e430f20519566fce2489e010">SparcELFMCAsmInfo::SparcELFMCAsmInfo</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="l00022"></a>00022 <a class="code" href="classllvm_1_1MCAsmInfo.html#adfd724f11ba125f30c3bb516be0bb06f">IsLittleEndian</a> = <span class="keyword">false</span>;
+<a name="l00023"></a>00023 <a class="code" href="classllvm_1_1Triple.html">Triple</a> TheTriple(TT);
+<a name="l00024"></a>00024 <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a97f56ec2cf93b5b4d1db9befd8d3d535" title="getArch - Get the parsed architecture type of this triple.">getArch</a>() == <a class="code" href="classllvm_1_1Triple.html#a547abd13f7a3c063aa72c8192a868154a34e8fe940082d534b3957f06616c8227">Triple::sparcv9</a>)
+<a name="l00025"></a>00025 <a class="code" href="classllvm_1_1MCAsmInfo.html#a78ea65d8ecc8eba667d3770385ae403a">PointerSize</a> = 8;
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 <a class="code" href="classllvm_1_1MCAsmInfo.html#a035c98c0423e6dd21ec2ea039f762440">Data16bitsDirective</a> = <span class="stringliteral">"\t.half\t"</span>;
+<a name="l00028"></a>00028 <a class="code" href="classllvm_1_1MCAsmInfo.html#a620b2ebe9e68a34106b7bdcc4220c6b2">Data32bitsDirective</a> = <span class="stringliteral">"\t.word\t"</span>;
+<a name="l00029"></a>00029 <a class="code" href="classllvm_1_1MCAsmInfo.html#a3c136967a2fc9489724bcd8706a16fed">Data64bitsDirective</a> = 0; <span class="comment">// .xword is only supported by V9.</span>
+<a name="l00030"></a>00030 <a class="code" href="classllvm_1_1MCAsmInfo.html#acf84c6bd03a785a251784cad666d9ee1">ZeroDirective</a> = <span class="stringliteral">"\t.skip\t"</span>;
+<a name="l00031"></a>00031 <a class="code" href="classllvm_1_1MCAsmInfo.html#a0f9dfd5867a9130d05cd9f560a7ba68f">CommentString</a> = <span class="stringliteral">"!"</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 class="code" href="classllvm_1_1MCAsmInfo.html#a98f40236cfff7278d4b57633fad2245d">SupportsDebugInformation</a> = <span class="keyword">true</span>;
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <a class="code" href="classllvm_1_1MCAsmInfo.html#a85a783f63be57e7903e54bd293a52479">SunStyleELFSectionSwitchSyntax</a> = <span class="keyword">true</span>;
+<a name="l00036"></a>00036 <a class="code" href="classllvm_1_1MCAsmInfo.html#a9209a7aeb154de066a5f7ed6087892cc">UsesELFSectionDirectiveForBSS</a> = <span class="keyword">true</span>;
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 <a class="code" href="classllvm_1_1MCAsmInfo.html#a72118878aeadcae71da2d5d179aebb81">WeakRefDirective</a> = <span class="stringliteral">"\t.weak\t"</span>;
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <a class="code" href="classllvm_1_1MCAsmInfo.html#abea34ee331e36cc6ee7eb7230432f02e">PrivateGlobalPrefix</a> = <span class="stringliteral">".L"</span>;
+<a name="l00041"></a>00041 }
+<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:19 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/SparcMCAsmInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcMCAsmInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+2bff6232b7abb0cce54c6db7b00f576d
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcMCTargetDesc_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcMCTargetDesc_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcMCTargetDesc_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcMCTargetDesc_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+871ad15df8776db389e0f7c13b98bc28
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcMachineFunctionInfo_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcMachineFunctionInfo_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcMachineFunctionInfo_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcMachineFunctionInfo_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+f3dde0a3518fc79a243187cb80aea71b
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,98 @@
+<!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: SparcRegisterInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> </div>
+ <div class="headertitle">
+<div class="title">SparcRegisterInfo.cpp File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SparcRegisterInfo_8h_source.html">SparcRegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="Sparc_8h_source.html">Sparc.h</a>"</code><br/>
+<code>#include "<a class="el" href="SparcSubtarget_8h_source.html">SparcSubtarget.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="MachineInstrBuilder_8h_source.html">llvm/CodeGen/MachineInstrBuilder.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="MachineFrameInfo_8h_source.html">llvm/CodeGen/MachineFrameInfo.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="TargetInstrInfo_8h_source.html">llvm/Target/TargetInstrInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="BitVector_8h_source.html">llvm/ADT/BitVector.h</a>"</code><br/>
+<code>#include "<a class="el" href="STLExtras_8h_source.html">llvm/ADT/STLExtras.h</a>"</code><br/>
+<code>#include "SparcGenRegisterInfo.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SparcRegisterInfo.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SparcRegisterInfo_8cpp__incl.png" border="0" usemap="#SparcRegisterInfo_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SparcRegisterInfo_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="SparcRegisterInfo_8cpp.html#a13b7359d3501128c4c130fd13756facc">GET_REGINFO_TARGET_DESC</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a13b7359d3501128c4c130fd13756facc"></a><!-- doxytag: member="SparcRegisterInfo.cpp::GET_REGINFO_TARGET_DESC" ref="a13b7359d3501128c4c130fd13756facc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GET_REGINFO_TARGET_DESC</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SparcRegisterInfo_8cpp_source.html#l00026">26</a> of file <a class="el" href="SparcRegisterInfo_8cpp_source.html">SparcRegisterInfo.cpp</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:46 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/SparcRegisterInfo_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,104 @@
+<!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: SparcRegisterInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#define-members">Defines</a> </div>
+ <div class="headertitle">
+<div class="title">SparcRegisterInfo.h File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="TargetRegisterInfo_8h_source.html">llvm/Target/TargetRegisterInfo.h</a>"</code><br/>
+<code>#include "SparcGenRegisterInfo.inc"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SparcRegisterInfo.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="SparcRegisterInfo_8h__incl.png" border="0" usemap="#SparcRegisterInfo_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="SparcRegisterInfo_8h__dep__incl.png" border="0" usemap="#SparcRegisterInfo_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="SparcRegisterInfo_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_1SparcRegisterInfo.html">llvm::SparcRegisterInfo</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="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="SparcRegisterInfo_8h.html#aedf089544bf9a9a8ce4dd3bff13bcca2">GET_REGINFO_HEADER</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aedf089544bf9a9a8ce4dd3bff13bcca2"></a><!-- doxytag: member="SparcRegisterInfo.h::GET_REGINFO_HEADER" ref="aedf089544bf9a9a8ce4dd3bff13bcca2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GET_REGINFO_HEADER</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="SparcRegisterInfo_8h_source.html#l00019">19</a> of file <a class="el" href="SparcRegisterInfo_8h_source.html">SparcRegisterInfo.h</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:46 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/SparcRegisterInfo_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcRegisterInfo_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+a99542f06e673b7870bd181e7003f43f
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcSelectionDAGInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcSelectionDAGInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcSelectionDAGInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcSelectionDAGInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+a88e10e0ddc64cc21b05fc2edc869134
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,102 @@
+<!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: SparcSubtarget.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SparcSubtarget.cpp</div> </div>
+</div>
+<div class="contents">
+<a href="SparcSubtarget_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SparcSubtarget.cpp - SPARC Subtarget Information ------------------===//</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 the SPARC 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">#include "<a class="code" href="SparcSubtarget_8h.html">SparcSubtarget.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="Sparc_8h.html">Sparc.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="TargetRegistry_8h.html">llvm/Support/TargetRegistry.h</a>"</span>
+<a name="l00017"></a>00017
+<a name="l00018"></a><a class="code" href="SparcSubtarget_8cpp.html#a9edcf2eb5fb8161f71f0b6540ad9cf95">00018</a> <span class="preprocessor">#define GET_SUBTARGETINFO_TARGET_DESC</span>
+<a name="l00019"></a><a class="code" href="SparcSubtarget_8cpp.html#aa7e319f7bba8b140ee2d876cc3f8308b">00019</a> <span class="preprocessor"></span><span class="preprocessor">#define GET_SUBTARGETINFO_CTOR</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#include "SparcGenSubtargetInfo.inc"</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="keyword">using namespace </span>llvm;
+<a name="l00023"></a>00023
+<a name="l00024"></a>00024 <span class="keywordtype">void</span> SparcSubtarget::anchor() { }
+<a name="l00025"></a>00025
+<a name="l00026"></a><a class="code" href="classllvm_1_1SparcSubtarget.html#a91716089cc7ccc99807c61ff51ebbc3f">00026</a> <a class="code" href="classllvm_1_1SparcSubtarget.html#a91716089cc7ccc99807c61ff51ebbc3f">SparcSubtarget::SparcSubtarget</a>(<span class="keyword">const</span> std::string &TT, <span class="keyword">const</span> std::string &CPU,
+<a name="l00027"></a>00027 <span class="keyword">const</span> std::string &<a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a50aa2061845b3ff4e6e2242d762c6a80">FS</a>, <span class="keywordtype">bool</span> is64Bit) :
+<a name="l00028"></a>00028 <a class="code" href="classSparcGenSubtargetInfo.html">SparcGenSubtargetInfo</a>(TT, CPU, FS),
+<a name="l00029"></a>00029 IsV9(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>),
+<a name="l00030"></a>00030 V8DeprecatedInsts(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>),
+<a name="l00031"></a>00031 IsVIS(<a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>),
+<a name="l00032"></a>00032 Is64Bit(is64Bit) {
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 <span class="comment">// Determine default and user specified characteristics</span>
+<a name="l00035"></a>00035 std::string CPUName = CPU;
+<a name="l00036"></a>00036 <span class="keywordflow">if</span> (CPUName.empty()) {
+<a name="l00037"></a>00037 <span class="keywordflow">if</span> (is64Bit)
+<a name="l00038"></a>00038 CPUName = <span class="stringliteral">"v9"</span>;
+<a name="l00039"></a>00039 <span class="keywordflow">else</span>
+<a name="l00040"></a>00040 CPUName = <span class="stringliteral">"v8"</span>;
+<a name="l00041"></a>00041 }
+<a name="l00042"></a>00042 IsV9 = CPUName == <span class="stringliteral">"v9"</span>;
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="comment">// Parse features string.</span>
+<a name="l00045"></a>00045 <a class="code" href="classllvm_1_1SparcSubtarget.html#a1c42095a0b901e7834dbe8add1d85c99">ParseSubtargetFeatures</a>(CPUName, FS);
+<a name="l00046"></a>00046 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:19 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/SparcSubtarget_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcSubtarget_8h__dep__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="SparcSubtarget.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="FPMover.cpp",height=0.2,width=0.4,color="black",URL="$FPMover_8cpp.html"];
+ Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="SparcFrameLowering.h",height=0.2,width=0.4,color="black",URL="$SparcFrameLowering_8h.html"];
+ Node3 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="SparcTargetMachine.h",height=0.2,width=0.4,color="black",URL="$SparcTargetMachine_8h.html"];
+ Node4 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="SparcAsmPrinter.cpp",height=0.2,width=0.4,color="black",URL="$SparcAsmPrinter_8cpp.html"];
+ Node4 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="SparcISelDAGToDAG.cpp",height=0.2,width=0.4,color="black",URL="$SparcISelDAGToDAG_8cpp.html"];
+ Node4 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="SparcISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$SparcISelLowering_8cpp.html"];
+ Node4 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="SparcSelectionDAGInfo.cpp",height=0.2,width=0.4,color="black",URL="$SparcSelectionDAGInfo_8cpp.html"];
+ Node4 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="SparcTargetMachine.cpp",height=0.2,width=0.4,color="black",URL="$SparcTargetMachine_8cpp.html"];
+ Node3 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="SparcFrameLowering.cpp",height=0.2,width=0.4,color="black",URL="$SparcFrameLowering_8cpp.html"];
+ Node1 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="SparcInstrInfo.cpp",height=0.2,width=0.4,color="black",URL="$SparcInstrInfo_8cpp.html"];
+ Node1 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="SparcRegisterInfo.cpp",height=0.2,width=0.4,color="black",URL="$SparcRegisterInfo_8cpp.html"];
+ Node1 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="SparcSubtarget.cpp",height=0.2,width=0.4,color="black",URL="$SparcSubtarget_8cpp.html"];
+}
Added: www-releases/trunk/3.2/docs/doxygen/html/SparcTargetInfo_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcTargetInfo_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcTargetInfo_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcTargetInfo_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,78 @@
+<!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: SparcTargetInfo.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ <li class="navelem"><a class="el" href="dir_acadb2f64cc784eb9a6930a5ba53c0d2.html">TargetInfo</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">SparcTargetInfo.cpp</div> </div>
+</div>
+<div class="contents">
+<a href="SparcTargetInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- SparcTargetInfo.cpp - Sparc Target Implementation -----------------===//</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
+<a name="l00010"></a>00010 <span class="preprocessor">#include "<a class="code" href="Sparc_8h.html">Sparc.h</a>"</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include "<a class="code" href="Module_8h.html">llvm/Module.h</a>"</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include "<a class="code" href="TargetRegistry_8h.html">llvm/Support/TargetRegistry.h</a>"</span>
+<a name="l00013"></a>00013 <span class="keyword">using namespace </span>llvm;
+<a name="l00014"></a>00014
+<a name="l00015"></a><a class="code" href="namespacellvm.html#a6cacd263b2a3c7c00428c5d183c26822">00015</a> <a class="code" href="classllvm_1_1Target.html">Target</a> <a class="code" href="namespacellvm.html#a6cacd263b2a3c7c00428c5d183c26822">llvm::TheSparcTarget</a>;
+<a name="l00016"></a><a class="code" href="namespacellvm.html#afb75415735cb485bf02c9c087a58bffd">00016</a> <a class="code" href="classllvm_1_1Target.html">Target</a> <a class="code" href="namespacellvm.html#afb75415735cb485bf02c9c087a58bffd">llvm::TheSparcV9Target</a>;
+<a name="l00017"></a>00017
+<a name="l00018"></a><a class="code" href="SparcTargetInfo_8cpp.html#aee20887ee3016027cea70150669551fe">00018</a> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">void</span> <a class="code" href="SparcTargetInfo_8cpp.html#aee20887ee3016027cea70150669551fe">LLVMInitializeSparcTargetInfo</a>() {
+<a name="l00019"></a>00019 <a class="code" href="structllvm_1_1RegisterTarget.html">RegisterTarget<Triple::sparc></a> <a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>(<a class="code" href="namespacellvm.html#a6cacd263b2a3c7c00428c5d183c26822">TheSparcTarget</a>, <span class="stringliteral">"sparc"</span>, <span class="stringliteral">"Sparc"</span>);
+<a name="l00020"></a>00020 <a class="code" href="structllvm_1_1RegisterTarget.html">RegisterTarget<Triple::sparcv9></a> <a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>(<a class="code" href="namespacellvm.html#afb75415735cb485bf02c9c087a58bffd">TheSparcV9Target</a>, <span class="stringliteral">"sparcv9"</span>, <span class="stringliteral">"Sparc V9"</span>);
+<a name="l00021"></a>00021 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:19 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/SparcTargetMachine_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparcTargetMachine_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparcTargetMachine_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparcTargetMachine_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,96 @@
+<!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: SparcTargetMachine.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">SparcTargetMachine.cpp File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SparcTargetMachine_8h_source.html">SparcTargetMachine.h</a>"</code><br/>
+<code>#include "<a class="el" href="Sparc_8h_source.html">Sparc.h</a>"</code><br/>
+<code>#include "<a class="el" href="PassManager_8h_source.html">llvm/PassManager.h</a>"</code><br/>
+<code>#include "<a class="el" href="CodeGen_2Passes_8h_source.html">llvm/CodeGen/Passes.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetRegistry_8h_source.html">llvm/Support/TargetRegistry.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for SparcTargetMachine.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="SparcTargetMachine_8cpp__incl.png" border="0" usemap="#SparcTargetMachine_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="SparcTargetMachine_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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="SparcTargetMachine_8cpp.html#a4490eb8eb92c3b12491b8247cb4bd71a">LLVMInitializeSparcTarget</a> ()</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a4490eb8eb92c3b12491b8247cb4bd71a"></a><!-- doxytag: member="SparcTargetMachine.cpp::LLVMInitializeSparcTarget" ref="a4490eb8eb92c3b12491b8247cb4bd71a" args="()" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LLVMInitializeSparcTarget </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="SparcTargetMachine_8cpp_source.html#l00020">20</a> of file <a class="el" href="SparcTargetMachine_8cpp_source.html">SparcTargetMachine.cpp</a>.</p>
+
+<p>References <a class="el" href="SparcTargetInfo_8cpp_source.html#l00015">llvm::TheSparcTarget</a>, <a class="el" href="SparcTargetInfo_8cpp_source.html#l00016">llvm::TheSparcV9Target</a>, <a class="el" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">llvm::X</a>, and <a class="el" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:46 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/Sparc_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+b667fe6fdd3294baa6e7a489658b0e8f
\ No newline at end of file
Added: www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Sparc_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,164 @@
+<!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: Sparc.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_edce17930487b6f6a46914aab75e7d58.html">Sparc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">Sparc.h</div> </div>
+</div>
+<div class="contents">
+<a href="Sparc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- Sparc.h - Top-level interface for Sparc representation --*- 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 entry points for global functions defined in the LLVM</span>
+<a name="l00011"></a>00011 <span class="comment">// Sparc back-end.</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 TARGET_SPARC_H</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define TARGET_SPARC_H</span>
+<a name="l00017"></a>00017 <span class="preprocessor"></span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="SparcMCTargetDesc_8h.html">MCTargetDesc/SparcMCTargetDesc.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="Target_2TargetMachine_8h.html">llvm/Target/TargetMachine.h</a>"</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="keyword">namespace </span>llvm {
+<a name="l00023"></a>00023 <span class="keyword">class </span>FunctionPass;
+<a name="l00024"></a>00024 <span class="keyword">class </span>SparcTargetMachine;
+<a name="l00025"></a>00025 <span class="keyword">class </span>formatted_raw_ostream;
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 FunctionPass *<a class="code" href="namespacellvm.html#aa5307e81182b1d6f30622de0ffb316f4">createSparcISelDag</a>(SparcTargetMachine &TM);
+<a name="l00028"></a>00028 FunctionPass *<a class="code" href="namespacellvm.html#a5df1ae106d5cd9dc4f4f1fa4d6998c09">createSparcDelaySlotFillerPass</a>(TargetMachine &TM);
+<a name="l00029"></a>00029 FunctionPass *<a class="code" href="namespacellvm.html#a5871abda67c75575fee05595fab961f2">createSparcFPMoverPass</a>(TargetMachine &TM);
+<a name="l00030"></a>00030
+<a name="l00031"></a>00031 } <span class="comment">// end namespace llvm;</span>
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>llvm {
+<a name="l00034"></a>00034 <span class="comment">// Enums corresponding to Sparc condition codes, both icc's and fcc's. These</span>
+<a name="l00035"></a>00035 <span class="comment">// values must be kept in sync with the ones in the .td file.</span>
+<a name="l00036"></a><a class="code" href="namespacellvm_1_1SPCC.html">00036</a> <span class="keyword">namespace </span>SPCC {
+<a name="l00037"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9">00037</a> <span class="keyword">enum</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9">CondCodes</a> {
+<a name="l00038"></a>00038 <span class="comment">//ICC_A = 8 , // Always</span>
+<a name="l00039"></a>00039 <span class="comment">//ICC_N = 0 , // Never</span>
+<a name="l00040"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab9a7855b45288146df6d3ab3e321c43b">00040</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab9a7855b45288146df6d3ab3e321c43b">ICC_NE</a> = 9 , <span class="comment">// Not Equal</span>
+<a name="l00041"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac1dc27bfc24df99cd29246ec54419659">00041</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac1dc27bfc24df99cd29246ec54419659">ICC_E</a> = 1 , <span class="comment">// Equal</span>
+<a name="l00042"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2e9b359e236c3f89d1cd1646419a0438">00042</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2e9b359e236c3f89d1cd1646419a0438">ICC_G</a> = 10 , <span class="comment">// Greater</span>
+<a name="l00043"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a639506be5285099011780c4a03c9b371">00043</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a639506be5285099011780c4a03c9b371">ICC_LE</a> = 2 , <span class="comment">// Less or Equal</span>
+<a name="l00044"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a7b7a8837c5c902680ac8aec565079596">00044</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a7b7a8837c5c902680ac8aec565079596">ICC_GE</a> = 11 , <span class="comment">// Greater or Equal</span>
+<a name="l00045"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a3f6ef8aede46014a36966dc084d81087">00045</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a3f6ef8aede46014a36966dc084d81087">ICC_L</a> = 3 , <span class="comment">// Less</span>
+<a name="l00046"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aad6b4c4abc1731149339bdcac755ee87">00046</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aad6b4c4abc1731149339bdcac755ee87">ICC_GU</a> = 12 , <span class="comment">// Greater Unsigned</span>
+<a name="l00047"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a58fd730a813b831ee05050e63d30405c">00047</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a58fd730a813b831ee05050e63d30405c">ICC_LEU</a> = 4 , <span class="comment">// Less or Equal Unsigned</span>
+<a name="l00048"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9add11869e4071f1b4587c8f1a7f1f6191">00048</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9add11869e4071f1b4587c8f1a7f1f6191">ICC_CC</a> = 13 , <span class="comment">// Carry Clear/Great or Equal Unsigned</span>
+<a name="l00049"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a52da0658a7ccad50715ed99701281c5f">00049</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a52da0658a7ccad50715ed99701281c5f">ICC_CS</a> = 5 , <span class="comment">// Carry Set/Less Unsigned</span>
+<a name="l00050"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a1c26d5c90286fc0f30cb668a7a644ebc">00050</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a1c26d5c90286fc0f30cb668a7a644ebc">ICC_POS</a> = 14 , <span class="comment">// Positive</span>
+<a name="l00051"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afcf61d074d6039adac588209f5d9d6ad">00051</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afcf61d074d6039adac588209f5d9d6ad">ICC_NEG</a> = 6 , <span class="comment">// Negative</span>
+<a name="l00052"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9adc2b09c7d0c6869a1f05262717986737">00052</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9adc2b09c7d0c6869a1f05262717986737">ICC_VC</a> = 15 , <span class="comment">// Overflow Clear</span>
+<a name="l00053"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a5553287ec99a6227069fca2f37a5b34b">00053</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a5553287ec99a6227069fca2f37a5b34b">ICC_VS</a> = 7 , <span class="comment">// Overflow Set</span>
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="comment">//FCC_A = 8+16, // Always</span>
+<a name="l00056"></a>00056 <span class="comment">//FCC_N = 0+16, // Never</span>
+<a name="l00057"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a6820b0c58a07365f1341ca30d64bd218">00057</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a6820b0c58a07365f1341ca30d64bd218">FCC_U</a> = 7+16, <span class="comment">// Unordered</span>
+<a name="l00058"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aed8356273fdf3a0487c872cb3d085542">00058</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aed8356273fdf3a0487c872cb3d085542">FCC_G</a> = 6+16, <span class="comment">// Greater</span>
+<a name="l00059"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2106f4522bd06f6daad2a8e8769a6270">00059</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2106f4522bd06f6daad2a8e8769a6270">FCC_UG</a> = 5+16, <span class="comment">// Unordered or Greater</span>
+<a name="l00060"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a965bae47c4fccd3973ecbf040869ff7f">00060</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a965bae47c4fccd3973ecbf040869ff7f">FCC_L</a> = 4+16, <span class="comment">// Less</span>
+<a name="l00061"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afbb30e35da42c9cac83731fe3709387b">00061</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afbb30e35da42c9cac83731fe3709387b">FCC_UL</a> = 3+16, <span class="comment">// Unordered or Less</span>
+<a name="l00062"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a53356323fdd97606927cec5c20cd6215">00062</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a53356323fdd97606927cec5c20cd6215">FCC_LG</a> = 2+16, <span class="comment">// Less or Greater</span>
+<a name="l00063"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a488d679dc60c1f44701c9f0af8aa5d2c">00063</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a488d679dc60c1f44701c9f0af8aa5d2c">FCC_NE</a> = 1+16, <span class="comment">// Not Equal</span>
+<a name="l00064"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a80f16f53e18c59ae3681b303cda7a308">00064</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a80f16f53e18c59ae3681b303cda7a308">FCC_E</a> = 9+16, <span class="comment">// Equal</span>
+<a name="l00065"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9abaea969a35799493146fdd78c36dfa4c">00065</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9abaea969a35799493146fdd78c36dfa4c">FCC_UE</a> = 10+16, <span class="comment">// Unordered or Equal</span>
+<a name="l00066"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac202b4c5d9c55d73489b315c7e393836">00066</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac202b4c5d9c55d73489b315c7e393836">FCC_GE</a> = 11+16, <span class="comment">// Greater or Equal</span>
+<a name="l00067"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ad38b12aa07c4354222b6b9422bbb90d6">00067</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ad38b12aa07c4354222b6b9422bbb90d6">FCC_UGE</a> = 12+16, <span class="comment">// Unordered or Greater or Equal</span>
+<a name="l00068"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a607f8b24c191bb766a34c2eb1bfb63c4">00068</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a607f8b24c191bb766a34c2eb1bfb63c4">FCC_LE</a> = 13+16, <span class="comment">// Less or Equal</span>
+<a name="l00069"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a0823c4f36acc84808ba44f1f92fe58f2">00069</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a0823c4f36acc84808ba44f1f92fe58f2">FCC_ULE</a> = 14+16, <span class="comment">// Unordered or Less or Equal</span>
+<a name="l00070"></a><a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab6d11f42acc70a53b6bf5d36feb0f6e8">00070</a> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab6d11f42acc70a53b6bf5d36feb0f6e8">FCC_O</a> = 15+16 <span class="comment">// Ordered</span>
+<a name="l00071"></a>00071 };
+<a name="l00072"></a>00072 }
+<a name="l00073"></a>00073
+<a name="l00074"></a><a class="code" href="namespacellvm.html#aa65c80675ddfc0518d01cfba72613c87">00074</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="namespacellvm.html#aa65c80675ddfc0518d01cfba72613c87">SPARCCondCodeToString</a>(<a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9">SPCC::CondCodes</a> <a class="code" href="namespacellvm_1_1MBlazeCC.html#aba42d64ed60fd2a2e8045b6d7f26958d">CC</a>) {
+<a name="l00075"></a>00075 <span class="keywordflow">switch</span> (CC) {
+<a name="l00076"></a>00076 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab9a7855b45288146df6d3ab3e321c43b">SPCC::ICC_NE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ne"</span>;
+<a name="l00077"></a>00077 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac1dc27bfc24df99cd29246ec54419659">SPCC::ICC_E</a>: <span class="keywordflow">return</span> <span class="stringliteral">"e"</span>;
+<a name="l00078"></a>00078 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2e9b359e236c3f89d1cd1646419a0438">SPCC::ICC_G</a>: <span class="keywordflow">return</span> <span class="stringliteral">"g"</span>;
+<a name="l00079"></a>00079 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a639506be5285099011780c4a03c9b371">SPCC::ICC_LE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"le"</span>;
+<a name="l00080"></a>00080 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a7b7a8837c5c902680ac8aec565079596">SPCC::ICC_GE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ge"</span>;
+<a name="l00081"></a>00081 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a3f6ef8aede46014a36966dc084d81087">SPCC::ICC_L</a>: <span class="keywordflow">return</span> <span class="stringliteral">"l"</span>;
+<a name="l00082"></a>00082 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aad6b4c4abc1731149339bdcac755ee87">SPCC::ICC_GU</a>: <span class="keywordflow">return</span> <span class="stringliteral">"gu"</span>;
+<a name="l00083"></a>00083 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a58fd730a813b831ee05050e63d30405c">SPCC::ICC_LEU</a>: <span class="keywordflow">return</span> <span class="stringliteral">"leu"</span>;
+<a name="l00084"></a>00084 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9add11869e4071f1b4587c8f1a7f1f6191">SPCC::ICC_CC</a>: <span class="keywordflow">return</span> <span class="stringliteral">"cc"</span>;
+<a name="l00085"></a>00085 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a52da0658a7ccad50715ed99701281c5f">SPCC::ICC_CS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"cs"</span>;
+<a name="l00086"></a>00086 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a1c26d5c90286fc0f30cb668a7a644ebc">SPCC::ICC_POS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"pos"</span>;
+<a name="l00087"></a>00087 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afcf61d074d6039adac588209f5d9d6ad">SPCC::ICC_NEG</a>: <span class="keywordflow">return</span> <span class="stringliteral">"neg"</span>;
+<a name="l00088"></a>00088 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9adc2b09c7d0c6869a1f05262717986737">SPCC::ICC_VC</a>: <span class="keywordflow">return</span> <span class="stringliteral">"vc"</span>;
+<a name="l00089"></a>00089 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a5553287ec99a6227069fca2f37a5b34b">SPCC::ICC_VS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"vs"</span>;
+<a name="l00090"></a>00090 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a6820b0c58a07365f1341ca30d64bd218">SPCC::FCC_U</a>: <span class="keywordflow">return</span> <span class="stringliteral">"u"</span>;
+<a name="l00091"></a>00091 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9aed8356273fdf3a0487c872cb3d085542">SPCC::FCC_G</a>: <span class="keywordflow">return</span> <span class="stringliteral">"g"</span>;
+<a name="l00092"></a>00092 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a2106f4522bd06f6daad2a8e8769a6270">SPCC::FCC_UG</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ug"</span>;
+<a name="l00093"></a>00093 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a965bae47c4fccd3973ecbf040869ff7f">SPCC::FCC_L</a>: <span class="keywordflow">return</span> <span class="stringliteral">"l"</span>;
+<a name="l00094"></a>00094 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9afbb30e35da42c9cac83731fe3709387b">SPCC::FCC_UL</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ul"</span>;
+<a name="l00095"></a>00095 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a53356323fdd97606927cec5c20cd6215">SPCC::FCC_LG</a>: <span class="keywordflow">return</span> <span class="stringliteral">"lg"</span>;
+<a name="l00096"></a>00096 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a488d679dc60c1f44701c9f0af8aa5d2c">SPCC::FCC_NE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ne"</span>;
+<a name="l00097"></a>00097 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a80f16f53e18c59ae3681b303cda7a308">SPCC::FCC_E</a>: <span class="keywordflow">return</span> <span class="stringliteral">"e"</span>;
+<a name="l00098"></a>00098 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9abaea969a35799493146fdd78c36dfa4c">SPCC::FCC_UE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ue"</span>;
+<a name="l00099"></a>00099 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ac202b4c5d9c55d73489b315c7e393836">SPCC::FCC_GE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ge"</span>;
+<a name="l00100"></a>00100 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ad38b12aa07c4354222b6b9422bbb90d6">SPCC::FCC_UGE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"uge"</span>;
+<a name="l00101"></a>00101 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a607f8b24c191bb766a34c2eb1bfb63c4">SPCC::FCC_LE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"le"</span>;
+<a name="l00102"></a>00102 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9a0823c4f36acc84808ba44f1f92fe58f2">SPCC::FCC_ULE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"ule"</span>;
+<a name="l00103"></a>00103 <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1SPCC.html#ab817ca090b73e64dc6c2a7dd705edda9ab6d11f42acc70a53b6bf5d36feb0f6e8">SPCC::FCC_O</a>: <span class="keywordflow">return</span> <span class="stringliteral">"o"</span>;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105 <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Invalid cond code"</span>);
+<a name="l00106"></a>00106 }
+<a name="l00107"></a>00107 } <span class="comment">// end namespace llvm</span>
+<a name="l00108"></a>00108 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:38:17 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/SparseBitVector_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/SparseBitVector_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/SparseBitVector_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/SparseBitVector_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+e8532f9dc88ccd39f9439c1e9b0c39dd
\ No newline at end of file
More information about the llvm-commits
mailing list