[llvm-commits] [www-releases] r170845 [15/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/InstCombineCasts_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineCasts_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineCasts_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineCasts_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1818 @@
+<!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: InstCombineCasts.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstCombineCasts.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="InstCombineCasts_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- InstCombineCasts.cpp -----------------------------------------------===//</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 visit functions for cast operations.</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="InstCombine_8h.html">InstCombine.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="ConstantFolding_8h.html">llvm/Analysis/ConstantFolding.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="DataLayout_8h.html">llvm/DataLayout.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="TargetLibraryInfo_8h.html">llvm/Target/TargetLibraryInfo.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="PatternMatch_8h.html">llvm/Support/PatternMatch.h</a>"</span>
+<a name="l00019"></a>00019 <span class="keyword">using namespace </span>llvm;
+<a name="l00020"></a>00020 <span class="keyword">using namespace </span>PatternMatch;
+<a name="l00021"></a>00021 <span class="comment"></span>
+<a name="l00022"></a>00022 <span class="comment">/// DecomposeSimpleLinearExpr - Analyze 'Val', seeing if it is a simple linear</span>
+<a name="l00023"></a>00023 <span class="comment">/// expression.  If so, decompose it, returning some value X, such that Val is</span>
+<a name="l00024"></a>00024 <span class="comment">/// X*Scale+Offset.</span>
+<a name="l00025"></a>00025 <span class="comment">///</span>
+<a name="l00026"></a><a class="code" href="InstCombineCasts_8cpp.html#a865e260a33c703d12c88d6fa42f1afb9">00026</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="InstCombineCasts_8cpp.html#a865e260a33c703d12c88d6fa42f1afb9">DecomposeSimpleLinearExpr</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Val, <span class="keywordtype">unsigned</span> &Scale,
+<a name="l00027"></a>00027                                         uint64_t &Offset) {
+<a name="l00028"></a>00028   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = dyn_cast<ConstantInt>(Val)) {
+<a name="l00029"></a>00029     Offset = CI->getZExtValue();
+<a name="l00030"></a>00030     Scale  = 0;
+<a name="l00031"></a>00031     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Val-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 0);
+<a name="l00032"></a>00032   }
+<a name="l00033"></a>00033   
+<a name="l00034"></a>00034   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = dyn_cast<BinaryOperator>(Val)) {
+<a name="l00035"></a>00035     <span class="comment">// Cannot look past anything that might overflow.</span>
+<a name="l00036"></a>00036     <a class="code" href="classllvm_1_1OverflowingBinaryOperator.html">OverflowingBinaryOperator</a> *OBI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1OverflowingBinaryOperator.html">OverflowingBinaryOperator</a>>(Val);
+<a name="l00037"></a>00037     <span class="keywordflow">if</span> (OBI && !OBI-><a class="code" href="classllvm_1_1OverflowingBinaryOperator.html#abe8af726db43885a1178cf75ed0725d9">hasNoUnsignedWrap</a>() && !OBI-><a class="code" href="classllvm_1_1OverflowingBinaryOperator.html#a5a1ebefdf12a23a94f8a135cdfa0cd90">hasNoSignedWrap</a>()) {
+<a name="l00038"></a>00038       Scale = 1;
+<a name="l00039"></a>00039       Offset = 0;
+<a name="l00040"></a>00040       <span class="keywordflow">return</span> Val;
+<a name="l00041"></a>00041     }
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *RHS = dyn_cast<ConstantInt>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(1))) {
+<a name="l00044"></a>00044       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOpcode() == Instruction::Shl) {
+<a name="l00045"></a>00045         <span class="comment">// This is a value scaled by '1 << the shift amt'.</span>
+<a name="l00046"></a>00046         Scale = UINT64_C(1) << RHS->getZExtValue();
+<a name="l00047"></a>00047         Offset = 0;
+<a name="l00048"></a>00048         <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(0);
+<a name="l00049"></a>00049       }
+<a name="l00050"></a>00050       
+<a name="l00051"></a>00051       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOpcode() == Instruction::Mul) {
+<a name="l00052"></a>00052         <span class="comment">// This value is scaled by 'RHS'.</span>
+<a name="l00053"></a>00053         Scale = RHS->getZExtValue();
+<a name="l00054"></a>00054         Offset = 0;
+<a name="l00055"></a>00055         <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(0);
+<a name="l00056"></a>00056       }
+<a name="l00057"></a>00057       
+<a name="l00058"></a>00058       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOpcode() == Instruction::Add) {
+<a name="l00059"></a>00059         <span class="comment">// We have X+C.  Check to see if we really have (X*C2)+C1, </span>
+<a name="l00060"></a>00060         <span class="comment">// where C1 is divisible by C2.</span>
+<a name="l00061"></a>00061         <span class="keywordtype">unsigned</span> SubScale;
+<a name="l00062"></a>00062         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SubVal = 
+<a name="l00063"></a>00063           <a class="code" href="InstCombineCasts_8cpp.html#a865e260a33c703d12c88d6fa42f1afb9">DecomposeSimpleLinearExpr</a>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(0), SubScale, Offset);
+<a name="l00064"></a>00064         Offset += RHS->getZExtValue();
+<a name="l00065"></a>00065         Scale = SubScale;
+<a name="l00066"></a>00066         <span class="keywordflow">return</span> SubVal;
+<a name="l00067"></a>00067       }
+<a name="l00068"></a>00068     }
+<a name="l00069"></a>00069   }
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071   <span class="comment">// Otherwise, we can't look past this.</span>
+<a name="l00072"></a>00072   Scale = 1;
+<a name="l00073"></a>00073   Offset = 0;
+<a name="l00074"></a>00074   <span class="keywordflow">return</span> Val;
+<a name="l00075"></a>00075 }
+<a name="l00076"></a>00076 <span class="comment"></span>
+<a name="l00077"></a>00077 <span class="comment">/// PromoteCastOfAllocation - If we find a cast of an allocation instruction,</span>
+<a name="l00078"></a>00078 <span class="comment">/// try to eliminate the cast by moving the type information into the alloc.</span>
+<a name="l00079"></a>00079 <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::PromoteCastOfAllocation(<a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> &CI,
+<a name="l00080"></a>00080                                                    <a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> &AI) {
+<a name="l00081"></a>00081   <span class="comment">// This requires DataLayout to get the alloca alignment and size information.</span>
+<a name="l00082"></a>00082   <span class="keywordflow">if</span> (!TD) <span class="keywordflow">return</span> 0;
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084   <a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *PTy = cast<PointerType>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00085"></a>00085   
+<a name="l00086"></a>00086   <a class="code" href="classllvm_1_1IRBuilder.html">BuilderTy</a> AllocaBuilder(*Builder);
+<a name="l00087"></a>00087   AllocaBuilder.SetInsertPoint(AI.<a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>(), &AI);
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089   <span class="comment">// Get the type really allocated and the type casted to.</span>
+<a name="l00090"></a>00090   <a class="code" href="classllvm_1_1Type.html">Type</a> *AllocElTy = AI.<a class="code" href="classllvm_1_1AllocaInst.html#a214c60dbb4f1ed467e5a3420db6eefd6">getAllocatedType</a>();
+<a name="l00091"></a>00091   <a class="code" href="classllvm_1_1Type.html">Type</a> *CastElTy = PTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>();
+<a name="l00092"></a>00092   <span class="keywordflow">if</span> (!AllocElTy-><a class="code" href="classllvm_1_1Type.html#a9dc5111b1a9b1d5c4652d50f74fe850b">isSized</a>() || !CastElTy-><a class="code" href="classllvm_1_1Type.html#a9dc5111b1a9b1d5c4652d50f74fe850b">isSized</a>()) <span class="keywordflow">return</span> 0;
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094   <span class="keywordtype">unsigned</span> AllocElTyAlign = TD->getABITypeAlignment(AllocElTy);
+<a name="l00095"></a>00095   <span class="keywordtype">unsigned</span> CastElTyAlign = TD->getABITypeAlignment(CastElTy);
+<a name="l00096"></a>00096   <span class="keywordflow">if</span> (CastElTyAlign < AllocElTyAlign) <span class="keywordflow">return</span> 0;
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098   <span class="comment">// If the allocation has multiple uses, only promote it if we are strictly</span>
+<a name="l00099"></a>00099   <span class="comment">// increasing the alignment of the resultant allocation.  If we keep it the</span>
+<a name="l00100"></a>00100   <span class="comment">// same, we open the door to infinite loops of various kinds.</span>
+<a name="l00101"></a>00101   <span class="keywordflow">if</span> (!AI.<a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && CastElTyAlign == AllocElTyAlign) <span class="keywordflow">return</span> 0;
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103   uint64_t AllocElTySize = TD->getTypeAllocSize(AllocElTy);
+<a name="l00104"></a>00104   uint64_t CastElTySize = TD->getTypeAllocSize(CastElTy);
+<a name="l00105"></a>00105   <span class="keywordflow">if</span> (CastElTySize == 0 || AllocElTySize == 0) <span class="keywordflow">return</span> 0;
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107   <span class="comment">// See if we can satisfy the modulus by pulling a scale out of the array</span>
+<a name="l00108"></a>00108   <span class="comment">// size argument.</span>
+<a name="l00109"></a>00109   <span class="keywordtype">unsigned</span> ArraySizeScale;
+<a name="l00110"></a>00110   uint64_t ArrayOffset;
+<a name="l00111"></a>00111   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NumElements = <span class="comment">// See if the array size is a decomposable linear expr.</span>
+<a name="l00112"></a>00112     <a class="code" href="InstCombineCasts_8cpp.html#a865e260a33c703d12c88d6fa42f1afb9">DecomposeSimpleLinearExpr</a>(AI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), ArraySizeScale, ArrayOffset);
+<a name="l00113"></a>00113  
+<a name="l00114"></a>00114   <span class="comment">// If we can now satisfy the modulus, by using a non-1 scale, we really can</span>
+<a name="l00115"></a>00115   <span class="comment">// do the xform.</span>
+<a name="l00116"></a>00116   <span class="keywordflow">if</span> ((AllocElTySize*ArraySizeScale) % CastElTySize != 0 ||
+<a name="l00117"></a>00117       (AllocElTySize*ArrayOffset   ) % CastElTySize != 0) <span class="keywordflow">return</span> 0;
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119   <span class="keywordtype">unsigned</span> Scale = (AllocElTySize*ArraySizeScale)/CastElTySize;
+<a name="l00120"></a>00120   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Amt = 0;
+<a name="l00121"></a>00121   <span class="keywordflow">if</span> (Scale == 1) {
+<a name="l00122"></a>00122     Amt = NumElements;
+<a name="l00123"></a>00123   } <span class="keywordflow">else</span> {
+<a name="l00124"></a>00124     Amt = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(AI.<a class="code" href="classllvm_1_1AllocaInst.html#a642f52c0f081ad0de10258c1d8d67b23">getArraySize</a>()-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), Scale);
+<a name="l00125"></a>00125     <span class="comment">// Insert before the alloca, not before the cast.</span>
+<a name="l00126"></a>00126     Amt = AllocaBuilder.CreateMul(Amt, NumElements);
+<a name="l00127"></a>00127   }
+<a name="l00128"></a>00128   
+<a name="l00129"></a>00129   <span class="keywordflow">if</span> (uint64_t Offset = (AllocElTySize*ArrayOffset)/CastElTySize) {
+<a name="l00130"></a>00130     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Off = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(AI.<a class="code" href="classllvm_1_1AllocaInst.html#a642f52c0f081ad0de10258c1d8d67b23">getArraySize</a>()-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00131"></a>00131                                   Offset, <span class="keyword">true</span>);
+<a name="l00132"></a>00132     Amt = AllocaBuilder.CreateAdd(Amt, Off);
+<a name="l00133"></a>00133   }
+<a name="l00134"></a>00134   
+<a name="l00135"></a>00135   <a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> *New = AllocaBuilder.CreateAlloca(CastElTy, Amt);
+<a name="l00136"></a>00136   New-><a class="code" href="classllvm_1_1AllocaInst.html#a42defc71631bc55fcb48421784b276c9">setAlignment</a>(AI.<a class="code" href="classllvm_1_1AllocaInst.html#ad441932c20e5b9ba36c8c72a6c7f5ec3">getAlignment</a>());
+<a name="l00137"></a>00137   New-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(&AI);
+<a name="l00138"></a>00138   
+<a name="l00139"></a>00139   <span class="comment">// If the allocation has multiple real uses, insert a cast and change all</span>
+<a name="l00140"></a>00140   <span class="comment">// things that used it to use the new cast.  This will also hack on CI, but it</span>
+<a name="l00141"></a>00141   <span class="comment">// will die soon.</span>
+<a name="l00142"></a>00142   <span class="keywordflow">if</span> (!AI.<a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) {
+<a name="l00143"></a>00143     <span class="comment">// New is the allocation instruction, pointer typed. AI is the original</span>
+<a name="l00144"></a>00144     <span class="comment">// allocation instruction, also pointer typed. Thus, cast to use is BitCast.</span>
+<a name="l00145"></a>00145     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewCast = AllocaBuilder.CreateBitCast(New, AI.<a class="code" href="classllvm_1_1AllocaInst.html#a597c918a615f26a0cea7adb84f06fc3f">getType</a>(), <span class="stringliteral">"tmpcast"</span>);
+<a name="l00146"></a>00146     ReplaceInstUsesWith(AI, NewCast);
+<a name="l00147"></a>00147   }
+<a name="l00148"></a>00148   <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, New);
+<a name="l00149"></a>00149 }
+<a name="l00150"></a>00150 <span class="comment"></span>
+<a name="l00151"></a>00151 <span class="comment">/// EvaluateInDifferentType - Given an expression that </span>
+<a name="l00152"></a>00152 <span class="comment">/// CanEvaluateTruncated or CanEvaluateSExtd returns true for, actually</span>
+<a name="l00153"></a>00153 <span class="comment">/// insert the code to evaluate the expression.</span>
+<a name="l00154"></a>00154 <span class="comment"></span><a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InstCombiner::EvaluateInDifferentType(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty, 
+<a name="l00155"></a>00155                                              <span class="keywordtype">bool</span> isSigned) {
+<a name="l00156"></a>00156   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<Constant>(V)) {
+<a name="l00157"></a>00157     <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="classllvm_1_1ConstantExpr.html#a81ad2fffd14e2df92cad4f631ae76480" title="Create a ZExt, Bitcast or Trunc for integer -> integer casts.">ConstantExpr::getIntegerCast</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, Ty, isSigned <span class="comment">/*Sext or ZExt*/</span>);
+<a name="l00158"></a>00158     <span class="comment">// If we got a constantexpr back, try to simplify it with TD info.</span>
+<a name="l00159"></a>00159     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantExpr.html">ConstantExpr</a> *CE = dyn_cast<ConstantExpr>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>))
+<a name="l00160"></a>00160       <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="namespacellvm.html#a8891be7c27326c20a6dba7d98e9030b5">ConstantFoldConstantExpression</a>(CE, TD, TLI);
+<a name="l00161"></a>00161     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>;
+<a name="l00162"></a>00162   }
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164   <span class="comment">// Otherwise, it must be an instruction.</span>
+<a name="l00165"></a>00165   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = cast<Instruction>(V);
+<a name="l00166"></a>00166   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Res = 0;
+<a name="l00167"></a>00167   <span class="keywordtype">unsigned</span> Opc = 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="l00168"></a>00168   <span class="keywordflow">switch</span> (Opc) {
+<a name="l00169"></a>00169   <span class="keywordflow">case</span> Instruction::Add:
+<a name="l00170"></a>00170   <span class="keywordflow">case</span> Instruction::Sub:
+<a name="l00171"></a>00171   <span class="keywordflow">case</span> Instruction::Mul:
+<a name="l00172"></a>00172   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a>:
+<a name="l00173"></a>00173   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>:
+<a name="l00174"></a>00174   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>:
+<a name="l00175"></a>00175   <span class="keywordflow">case</span> Instruction::AShr:
+<a name="l00176"></a>00176   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>:
+<a name="l00177"></a>00177   <span class="keywordflow">case</span> Instruction::Shl:
+<a name="l00178"></a>00178   <span class="keywordflow">case</span> Instruction::UDiv:
+<a name="l00179"></a>00179   <span class="keywordflow">case</span> Instruction::URem: {
+<a name="l00180"></a>00180     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = EvaluateInDifferentType(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty, isSigned);
+<a name="l00181"></a>00181     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = EvaluateInDifferentType(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty, isSigned);
+<a name="l00182"></a>00182     Res = <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>((<a class="code" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a>)Opc, LHS, RHS);
+<a name="l00183"></a>00183     <span class="keywordflow">break</span>;
+<a name="l00184"></a>00184   }    
+<a name="l00185"></a>00185   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Instruction::Trunc</a>:
+<a name="l00186"></a>00186   <span class="keywordflow">case</span> Instruction::ZExt:
+<a name="l00187"></a>00187   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>:
+<a name="l00188"></a>00188     <span class="comment">// If the source type of the cast is the type we're trying for then we can</span>
+<a name="l00189"></a>00189     <span class="comment">// just return the source.  There's no need to insert it because it is not</span>
+<a name="l00190"></a>00190     <span class="comment">// new.</span>
+<a name="l00191"></a>00191     <span class="keywordflow">if</span> (I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00192"></a>00192       <span class="keywordflow">return</span> I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00193"></a>00193     
+<a name="l00194"></a>00194     <span class="comment">// Otherwise, must be the same type of cast, so just reinsert a new one.</span>
+<a name="l00195"></a>00195     <span class="comment">// This also handles the case of zext(trunc(x)) -> zext(x).</span>
+<a name="l00196"></a>00196     Res = <a class="code" href="classllvm_1_1CastInst.html#ae96aa53c0b7c0eb9ec680db6a43abaa7" title="Create a ZExt, BitCast, or Trunc for int -> int casts.">CastInst::CreateIntegerCast</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty,
+<a name="l00197"></a>00197                                       Opc == <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>);
+<a name="l00198"></a>00198     <span class="keywordflow">break</span>;
+<a name="l00199"></a>00199   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MCID.html#accb16fffd544529ed4d816a45e40f425a32dbd2c72a98eaee90e3ad5ef7b5af16">Instruction::Select</a>: {
+<a name="l00200"></a>00200     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *True = EvaluateInDifferentType(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty, isSigned);
+<a name="l00201"></a>00201     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *False = EvaluateInDifferentType(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(2), Ty, isSigned);
+<a name="l00202"></a>00202     Res = <a class="code" href="classllvm_1_1SelectInst.html#a8bce457e977f23507c48c9dfd7052990">SelectInst::Create</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), True, False);
+<a name="l00203"></a>00203     <span class="keywordflow">break</span>;
+<a name="l00204"></a>00204   }
+<a name="l00205"></a>00205   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">Instruction::PHI</a>: {
+<a name="l00206"></a>00206     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *OPN = cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00207"></a>00207     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *NPN = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(Ty, OPN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>());
+<a name="l00208"></a>00208     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = OPN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00209"></a>00209       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V =EvaluateInDifferentType(OPN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i), Ty, isSigned);
+<a name="l00210"></a>00210       NPN->addIncoming(V, OPN-><a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i));
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212     Res = NPN;
+<a name="l00213"></a>00213     <span class="keywordflow">break</span>;
+<a name="l00214"></a>00214   }
+<a name="l00215"></a>00215   <span class="keywordflow">default</span>: 
+<a name="l00216"></a>00216     <span class="comment">// TODO: Can handle more cases here.</span>
+<a name="l00217"></a>00217     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unreachable!"</span>);
+<a name="l00218"></a>00218   }
+<a name="l00219"></a>00219   
+<a name="l00220"></a>00220   Res->takeName(I);
+<a name="l00221"></a>00221   <span class="keywordflow">return</span> InsertNewInstWith(Res, *I);
+<a name="l00222"></a>00222 }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224 <span class="comment"></span>
+<a name="l00225"></a>00225 <span class="comment">/// This function is a wrapper around CastInst::isEliminableCastPair. It</span>
+<a name="l00226"></a>00226 <span class="comment">/// simply extracts arguments and returns what that function returns.</span>
+<a name="l00227"></a>00227 <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> 
+<a name="l00228"></a><a class="code" href="InstCombineCasts_8cpp.html#a33121ab9b3810edb043d2c6c144cc4aa">00228</a> <a class="code" href="InstCombineCasts_8cpp.html#a33121ab9b3810edb043d2c6c144cc4aa">isEliminableCastPair</a>(
+<a name="l00229"></a>00229   <span class="keyword">const</span> <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CI, <span class="comment">///< The first cast instruction</span>
+<a name="l00230"></a>00230 <span class="comment"></span>  <span class="keywordtype">unsigned</span> opcode,       <span class="comment">///< The opcode of the second cast instruction</span>
+<a name="l00231"></a>00231 <span class="comment"></span>  <a class="code" href="classllvm_1_1Type.html">Type</a> *DstTy,     <span class="comment">///< The target type for the second cast instruction</span>
+<a name="l00232"></a>00232 <span class="comment"></span>  <a class="code" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD         <span class="comment">///< The target data for pointer size</span>
+<a name="l00233"></a>00233 <span class="comment"></span>) {
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235   <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcTy = CI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();   <span class="comment">// A from above</span>
+<a name="l00236"></a>00236   <a class="code" href="classllvm_1_1Type.html">Type</a> *MidTy = CI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();                  <span class="comment">// B from above</span>
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238   <span class="comment">// Get the opcodes of the two Cast instructions</span>
+<a name="l00239"></a>00239   <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> firstOp = <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a>(CI-><a class="code" href="classllvm_1_1CastInst.html#adc3489e61d5f37a0e4c5589859fbccc2" title="Return the opcode of this CastInst.">getOpcode</a>());
+<a name="l00240"></a>00240   <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> secondOp = <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a>(opcode);
+<a name="l00241"></a>00241   <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcIntPtrTy = TD && SrcTy-><a class="code" href="classllvm_1_1Type.html#ac830a02a025d9d5a5dc53c444cf625ee">isPtrOrPtrVectorTy</a>() ?
+<a name="l00242"></a>00242     TD-><a class="code" href="classllvm_1_1DataLayout.html#ae84bb2408dfffa4e8b5fe2ce0714a3bd">getIntPtrType</a>(SrcTy) : 0;
+<a name="l00243"></a>00243   <a class="code" href="classllvm_1_1Type.html">Type</a> *MidIntPtrTy = TD && MidTy-><a class="code" href="classllvm_1_1Type.html#ac830a02a025d9d5a5dc53c444cf625ee">isPtrOrPtrVectorTy</a>() ?
+<a name="l00244"></a>00244     TD-><a class="code" href="classllvm_1_1DataLayout.html#ae84bb2408dfffa4e8b5fe2ce0714a3bd">getIntPtrType</a>(MidTy) : 0;
+<a name="l00245"></a>00245   <a class="code" href="classllvm_1_1Type.html">Type</a> *DstIntPtrTy = TD && DstTy-><a class="code" href="classllvm_1_1Type.html#ac830a02a025d9d5a5dc53c444cf625ee">isPtrOrPtrVectorTy</a>() ?
+<a name="l00246"></a>00246     TD-><a class="code" href="classllvm_1_1DataLayout.html#ae84bb2408dfffa4e8b5fe2ce0714a3bd">getIntPtrType</a>(DstTy) : 0;
+<a name="l00247"></a>00247   <span class="keywordtype">unsigned</span> Res = <a class="code" href="InstCombineCasts_8cpp.html#a33121ab9b3810edb043d2c6c144cc4aa">CastInst::isEliminableCastPair</a>(firstOp, secondOp, SrcTy, MidTy,
+<a name="l00248"></a>00248                                                 DstTy, SrcIntPtrTy, MidIntPtrTy,
+<a name="l00249"></a>00249                                                 DstIntPtrTy);
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251   <span class="comment">// We don't want to form an inttoptr or ptrtoint that converts to an integer</span>
+<a name="l00252"></a>00252   <span class="comment">// type that differs from the pointer size.</span>
+<a name="l00253"></a>00253   <span class="keywordflow">if</span> ((Res == <a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">Instruction::IntToPtr</a> && SrcTy != DstIntPtrTy) ||
+<a name="l00254"></a>00254       (Res == Instruction::PtrToInt && DstTy != SrcIntPtrTy))
+<a name="l00255"></a>00255     Res = 0;
+<a name="l00256"></a>00256   
+<a name="l00257"></a>00257   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a>(Res);
+<a name="l00258"></a>00258 }
+<a name="l00259"></a>00259 <span class="comment"></span>
+<a name="l00260"></a>00260 <span class="comment">/// ShouldOptimizeCast - Return true if the cast from "V to Ty" actually</span>
+<a name="l00261"></a>00261 <span class="comment">/// results in any code being generated and is interesting to optimize out. If</span>
+<a name="l00262"></a>00262 <span class="comment">/// the cast can be eliminated by some other simple transformation, we prefer</span>
+<a name="l00263"></a>00263 <span class="comment">/// to do the simplification first.</span>
+<a name="l00264"></a>00264 <span class="comment"></span><span class="keywordtype">bool</span> InstCombiner::ShouldOptimizeCast(<a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> opc, <span class="keyword">const</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V,
+<a name="l00265"></a>00265                                       <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l00266"></a>00266   <span class="comment">// Noop casts and casts of constants should be eliminated trivially.</span>
+<a name="l00267"></a>00267   <span class="keywordflow">if</span> (V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty || isa<Constant>(V)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00268"></a>00268   
+<a name="l00269"></a>00269   <span class="comment">// If this is another cast that can be eliminated, we prefer to have it</span>
+<a name="l00270"></a>00270   <span class="comment">// eliminated.</span>
+<a name="l00271"></a>00271   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CI = dyn_cast<CastInst>(V))
+<a name="l00272"></a>00272     <span class="keywordflow">if</span> (<a class="code" href="InstCombineCasts_8cpp.html#a33121ab9b3810edb043d2c6c144cc4aa">isEliminableCastPair</a>(CI, opc, Ty, TD))
+<a name="l00273"></a>00273       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00274"></a>00274   
+<a name="l00275"></a>00275   <span class="comment">// If this is a vector sext from a compare, then we don't want to break the</span>
+<a name="l00276"></a>00276   <span class="comment">// idiom where each element of the extended vector is either zero or all ones.</span>
+<a name="l00277"></a>00277   <span class="keywordflow">if</span> (opc == <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a> && isa<CmpInst>(V) && Ty-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>())
+<a name="l00278"></a>00278     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00279"></a>00279   
+<a name="l00280"></a>00280   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00281"></a>00281 }
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283 <span class="comment"></span>
+<a name="l00284"></a>00284 <span class="comment">/// @brief Implement the transforms common to all CastInst visitors.</span>
+<a name="l00285"></a><a class="code" href="classllvm_1_1InstCombiner.html#a2c93f6e9c56faa4bf4f18cdca680c9ff">00285</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a2c93f6e9c56faa4bf4f18cdca680c9ff" title="Implement the transforms common to all CastInst visitors.">InstCombiner::commonCastTransforms</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> &CI) {
+<a name="l00286"></a>00286   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288   <span class="comment">// Many cases of "cast of a cast" are eliminable. If it's eliminable we just</span>
+<a name="l00289"></a>00289   <span class="comment">// eliminate it now.</span>
+<a name="l00290"></a>00290   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *CSrc = dyn_cast<CastInst>(Src)) {   <span class="comment">// A->B->C cast</span>
+<a name="l00291"></a>00291     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html#afa0b2fa29ba074f2b6ec9ac11163f2d9">Instruction::CastOps</a> opc = 
+<a name="l00292"></a>00292         <a class="code" href="InstCombineCasts_8cpp.html#a33121ab9b3810edb043d2c6c144cc4aa">isEliminableCastPair</a>(CSrc, CI.<a class="code" href="classllvm_1_1CastInst.html#adc3489e61d5f37a0e4c5589859fbccc2" title="Return the opcode of this CastInst.">getOpcode</a>(), CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), TD)) {
+<a name="l00293"></a>00293       <span class="comment">// The first cast (CSrc) is eliminable so we need to fix up or replace</span>
+<a name="l00294"></a>00294       <span class="comment">// the second cast (CI). CSrc will then have a good chance of being dead.</span>
+<a name="l00295"></a>00295       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1CastInst.html#a0f7dea9550778374905e12da6d6ba8a8" title="Construct any of the CastInst subclasses.">CastInst::Create</a>(opc, CSrc->getOperand(0), CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00296"></a>00296     }
+<a name="l00297"></a>00297   }
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299   <span class="comment">// If we are casting a select then fold the cast into the select</span>
+<a name="l00300"></a>00300   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = dyn_cast<SelectInst>(Src))
+<a name="l00301"></a>00301     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoSelect(CI, SI))
+<a name="l00302"></a>00302       <span class="keywordflow">return</span> NV;
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304   <span class="comment">// If we are casting a PHI then fold the cast into the PHI</span>
+<a name="l00305"></a>00305   <span class="keywordflow">if</span> (isa<PHINode>(Src)) {
+<a name="l00306"></a>00306     <span class="comment">// We don't do this if this would create a PHI node with an illegal type if</span>
+<a name="l00307"></a>00307     <span class="comment">// it is currently legal.</span>
+<a name="l00308"></a>00308     <span class="keywordflow">if</span> (!Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00309"></a>00309         !CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() ||
+<a name="l00310"></a>00310         ShouldChangeType(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()))
+<a name="l00311"></a>00311       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoPhi(CI))
+<a name="l00312"></a>00312         <span class="keywordflow">return</span> NV;
+<a name="l00313"></a>00313   }
+<a name="l00314"></a>00314   
+<a name="l00315"></a>00315   <span class="keywordflow">return</span> 0;
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 <span class="comment"></span>
+<a name="l00318"></a>00318 <span class="comment">/// CanEvaluateTruncated - Return true if we can evaluate the specified</span>
+<a name="l00319"></a>00319 <span class="comment">/// expression tree as type Ty instead of its larger type, and arrive with the</span>
+<a name="l00320"></a>00320 <span class="comment">/// same value.  This is used by code that tries to eliminate truncates.</span>
+<a name="l00321"></a>00321 <span class="comment">///</span>
+<a name="l00322"></a>00322 <span class="comment">/// Ty will always be a type smaller than V.  We should return true if trunc(V)</span>
+<a name="l00323"></a>00323 <span class="comment">/// can be computed by computing V in the smaller type.  If V is an instruction,</span>
+<a name="l00324"></a>00324 <span class="comment">/// then trunc(inst(x,y)) can be computed as inst(trunc(x),trunc(y)), which only</span>
+<a name="l00325"></a>00325 <span class="comment">/// makes sense if x and y can be efficiently truncated.</span>
+<a name="l00326"></a>00326 <span class="comment">///</span>
+<a name="l00327"></a>00327 <span class="comment">/// This function works on both vectors and scalars.</span>
+<a name="l00328"></a>00328 <span class="comment">///</span>
+<a name="l00329"></a><a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">00329</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l00330"></a>00330   <span class="comment">// We can always evaluate constants in another type.</span>
+<a name="l00331"></a>00331   <span class="keywordflow">if</span> (isa<Constant>(V))
+<a name="l00332"></a>00332     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00333"></a>00333   
+<a name="l00334"></a>00334   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(V);
+<a name="l00335"></a>00335   <span class="keywordflow">if</span> (!I) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00336"></a>00336   
+<a name="l00337"></a>00337   <a class="code" href="classllvm_1_1Type.html">Type</a> *OrigTy = V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00338"></a>00338   
+<a name="l00339"></a>00339   <span class="comment">// If this is an extension from the dest type, we can eliminate it, even if it</span>
+<a name="l00340"></a>00340   <span class="comment">// has multiple uses.</span>
+<a name="l00341"></a>00341   <span class="keywordflow">if</span> ((isa<ZExtInst>(I) || isa<SExtInst>(I)) && 
+<a name="l00342"></a>00342       I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00343"></a>00343     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345   <span class="comment">// We can't extend or shrink something that has multiple uses: doing so would</span>
+<a name="l00346"></a>00346   <span class="comment">// require duplicating the instruction in general, which isn't profitable.</span>
+<a name="l00347"></a>00347   <span class="keywordflow">if</span> (!I-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349   <span class="keywordtype">unsigned</span> Opc = 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="l00350"></a>00350   <span class="keywordflow">switch</span> (Opc) {
+<a name="l00351"></a>00351   <span class="keywordflow">case</span> Instruction::Add:
+<a name="l00352"></a>00352   <span class="keywordflow">case</span> Instruction::Sub:
+<a name="l00353"></a>00353   <span class="keywordflow">case</span> Instruction::Mul:
+<a name="l00354"></a>00354   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a>:
+<a name="l00355"></a>00355   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>:
+<a name="l00356"></a>00356   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>:
+<a name="l00357"></a>00357     <span class="comment">// These operators can all arbitrarily be extended or truncated.</span>
+<a name="l00358"></a>00358     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty) &&
+<a name="l00359"></a>00359            <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty);
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361   <span class="keywordflow">case</span> Instruction::UDiv:
+<a name="l00362"></a>00362   <span class="keywordflow">case</span> Instruction::URem: {
+<a name="l00363"></a>00363     <span class="comment">// UDiv and URem can be truncated if all the truncated bits are zero.</span>
+<a name="l00364"></a>00364     uint32_t OrigBitWidth = OrigTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00365"></a>00365     uint32_t BitWidth = Ty-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00366"></a>00366     <span class="keywordflow">if</span> (BitWidth < OrigBitWidth) {
+<a name="l00367"></a>00367       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Mask = <a class="code" href="classllvm_1_1APInt.html#adcb96bd09d7c75c7669fa5f9d1190899" title="Get a value with high bits set.">APInt::getHighBitsSet</a>(OrigBitWidth, OrigBitWidth-BitWidth);
+<a name="l00368"></a>00368       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Mask) &&
+<a name="l00369"></a>00369           <a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Mask)) {
+<a name="l00370"></a>00370         <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty) &&
+<a name="l00371"></a>00371                <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty);
+<a name="l00372"></a>00372       }
+<a name="l00373"></a>00373     }
+<a name="l00374"></a>00374     <span class="keywordflow">break</span>;
+<a name="l00375"></a>00375   }
+<a name="l00376"></a>00376   <span class="keywordflow">case</span> Instruction::Shl:
+<a name="l00377"></a>00377     <span class="comment">// If we are truncating the result of this SHL, and if it's a shift of a</span>
+<a name="l00378"></a>00378     <span class="comment">// constant amount, we can always perform a SHL in a smaller type.</span>
+<a name="l00379"></a>00379     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = dyn_cast<ConstantInt>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1))) {
+<a name="l00380"></a>00380       uint32_t BitWidth = Ty-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00381"></a>00381       <span class="keywordflow">if</span> (CI->getLimitedValue(BitWidth) < BitWidth)
+<a name="l00382"></a>00382         <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty);
+<a name="l00383"></a>00383     }
+<a name="l00384"></a>00384     <span class="keywordflow">break</span>;
+<a name="l00385"></a>00385   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>:
+<a name="l00386"></a>00386     <span class="comment">// If this is a truncate of a logical shr, we can truncate it to a smaller</span>
+<a name="l00387"></a>00387     <span class="comment">// lshr iff we know that the bits we would otherwise be shifting in are</span>
+<a name="l00388"></a>00388     <span class="comment">// already zeros.</span>
+<a name="l00389"></a>00389     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = dyn_cast<ConstantInt>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1))) {
+<a name="l00390"></a>00390       uint32_t OrigBitWidth = OrigTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00391"></a>00391       uint32_t BitWidth = Ty-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00392"></a>00392       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l00393"></a>00393             <a class="code" href="classllvm_1_1APInt.html#adcb96bd09d7c75c7669fa5f9d1190899" title="Get a value with high bits set.">APInt::getHighBitsSet</a>(OrigBitWidth, OrigBitWidth-BitWidth)) &&
+<a name="l00394"></a>00394           CI->getLimitedValue(BitWidth) < BitWidth) {
+<a name="l00395"></a>00395         <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty);
+<a name="l00396"></a>00396       }
+<a name="l00397"></a>00397     }
+<a name="l00398"></a>00398     <span class="keywordflow">break</span>;
+<a name="l00399"></a>00399   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Instruction::Trunc</a>:
+<a name="l00400"></a>00400     <span class="comment">// trunc(trunc(x)) -> trunc(x)</span>
+<a name="l00401"></a>00401     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00402"></a>00402   <span class="keywordflow">case</span> Instruction::ZExt:
+<a name="l00403"></a>00403   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>:
+<a name="l00404"></a>00404     <span class="comment">// trunc(ext(x)) -> ext(x) if the source type is smaller than the new dest</span>
+<a name="l00405"></a>00405     <span class="comment">// trunc(ext(x)) -> trunc(x) if the source type is larger than the new dest</span>
+<a name="l00406"></a>00406     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00407"></a>00407   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MCID.html#accb16fffd544529ed4d816a45e40f425a32dbd2c72a98eaee90e3ad5ef7b5af16">Instruction::Select</a>: {
+<a name="l00408"></a>00408     <a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = cast<SelectInst>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00409"></a>00409     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(SI-><a class="code" href="classllvm_1_1SelectInst.html#a67bf091383cd61e1225445e78b61d9f9">getTrueValue</a>(), Ty) &&
+<a name="l00410"></a>00410            <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(SI-><a class="code" href="classllvm_1_1SelectInst.html#a29a16f32075ee4f23cd769701463952c">getFalseValue</a>(), Ty);
+<a name="l00411"></a>00411   }
+<a name="l00412"></a>00412   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">Instruction::PHI</a>: {
+<a name="l00413"></a>00413     <span class="comment">// We can change a phi if we can change all operands.  Note that we never</span>
+<a name="l00414"></a>00414     <span class="comment">// get into trouble with cyclic PHIs here because we only consider</span>
+<a name="l00415"></a>00415     <span class="comment">// instructions with a single use.</span>
+<a name="l00416"></a>00416     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00417"></a>00417     <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="l00418"></a>00418       <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i), Ty))
+<a name="l00419"></a>00419         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00420"></a>00420     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00421"></a>00421   }
+<a name="l00422"></a>00422   <span class="keywordflow">default</span>:
+<a name="l00423"></a>00423     <span class="comment">// TODO: Can handle more cases here.</span>
+<a name="l00424"></a>00424     <span class="keywordflow">break</span>;
+<a name="l00425"></a>00425   }
+<a name="l00426"></a>00426   
+<a name="l00427"></a>00427   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429 
+<a name="l00430"></a><a class="code" href="classllvm_1_1InstCombiner.html#a7d92fd2831240f33fba5b54ec91df58d">00430</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a7d92fd2831240f33fba5b54ec91df58d">InstCombiner::visitTrunc</a>(<a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a> &CI) {
+<a name="l00431"></a>00431   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Result = commonCastTransforms(CI))
+<a name="l00432"></a>00432     <span class="keywordflow">return</span> Result;
+<a name="l00433"></a>00433   
+<a name="l00434"></a>00434   <span class="comment">// See if we can simplify any instructions used by the input whose sole </span>
+<a name="l00435"></a>00435   <span class="comment">// purpose is to compute bits we don't care about.</span>
+<a name="l00436"></a>00436   <span class="keywordflow">if</span> (SimplifyDemandedInstructionBits(CI))
+<a name="l00437"></a>00437     <span class="keywordflow">return</span> &CI;
+<a name="l00438"></a>00438   
+<a name="l00439"></a>00439   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00440"></a>00440   <a class="code" href="classllvm_1_1Type.html">Type</a> *DestTy = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), *SrcTy = Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00441"></a>00441   
+<a name="l00442"></a>00442   <span class="comment">// Attempt to truncate the entire input expression tree to the destination</span>
+<a name="l00443"></a>00443   <span class="comment">// type.   Only do this if the dest type is a simple type, don't convert the</span>
+<a name="l00444"></a>00444   <span class="comment">// expression tree to something weird like i93 unless the source is also</span>
+<a name="l00445"></a>00445   <span class="comment">// strange.</span>
+<a name="l00446"></a>00446   <span class="keywordflow">if</span> ((DestTy-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>() || ShouldChangeType(SrcTy, DestTy)) &&
+<a name="l00447"></a>00447       <a class="code" href="InstCombineCasts_8cpp.html#a6fd17099ed520f179e5b481db961e0e1">CanEvaluateTruncated</a>(Src, DestTy)) {
+<a name="l00448"></a>00448       
+<a name="l00449"></a>00449     <span class="comment">// If this cast is a truncate, evaluting in a different type always</span>
+<a name="l00450"></a>00450     <span class="comment">// eliminates the cast, so it is always a win.</span>
+<a name="l00451"></a>00451     <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">"ICE: EvaluateInDifferentType converting expression type"</span>
+<a name="l00452"></a>00452           <span class="stringliteral">" to avoid cast: "</span> << CI << <span class="charliteral">'\n'</span>);
+<a name="l00453"></a>00453     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = EvaluateInDifferentType(Src, DestTy, <span class="keyword">false</span>);
+<a name="l00454"></a>00454     assert(Res-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == DestTy);
+<a name="l00455"></a>00455     <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Res);
+<a name="l00456"></a>00456   }
+<a name="l00457"></a>00457 
+<a name="l00458"></a>00458   <span class="comment">// Canonicalize trunc x to i1 -> (icmp ne (and x, 1), 0), likewise for vector.</span>
+<a name="l00459"></a>00459   <span class="keywordflow">if</span> (DestTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() == 1) {
+<a name="l00460"></a>00460     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *One = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1);
+<a name="l00461"></a>00461     Src = Builder->CreateAnd(Src, One);
+<a name="l00462"></a>00462     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Zero = <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(Src->getType());
+<a name="l00463"></a>00463     <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a>(<a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05ac17897ebf2f6a6986280fc3bdf28a30a" title="not equal">ICmpInst::ICMP_NE</a>, Src, Zero);
+<a name="l00464"></a>00464   }
+<a name="l00465"></a>00465   
+<a name="l00466"></a>00466   <span class="comment">// Transform trunc(lshr (zext A), Cst) to eliminate one type conversion.</span>
+<a name="l00467"></a>00467   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = 0; <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *Cst = 0;
+<a name="l00468"></a>00468   <span class="keywordflow">if</span> (Src-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l00469"></a>00469       <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Src, <a class="code" href="namespacellvm_1_1PatternMatch.html#aa08fee11e8a5ec10c0cc2a7abbbd799a">m_LShr</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a2cbdca7c8267aac6914d674f8e81841b" title="m_ZExt">m_ZExt</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(A)), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(Cst)))) {
+<a name="l00470"></a>00470     <span class="comment">// We have three types to worry about here, the type of A, the source of</span>
+<a name="l00471"></a>00471     <span class="comment">// the truncate (MidSize), and the destination of the truncate. We know that</span>
+<a name="l00472"></a>00472     <span class="comment">// ASize < MidSize   and MidSize > ResultSize, but don't know the relation</span>
+<a name="l00473"></a>00473     <span class="comment">// between ASize and ResultSize.</span>
+<a name="l00474"></a>00474     <span class="keywordtype">unsigned</span> ASize = A-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l00475"></a>00475     
+<a name="l00476"></a>00476     <span class="comment">// If the shift amount is larger than the size of A, then the result is</span>
+<a name="l00477"></a>00477     <span class="comment">// known to be zero because all the input bits got shifted out.</span>
+<a name="l00478"></a>00478     <span class="keywordflow">if</span> (Cst-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>() >= ASize)
+<a name="l00479"></a>00479       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00480"></a>00480 
+<a name="l00481"></a>00481     <span class="comment">// Since we're doing an lshr and a zero extend, and know that the shift</span>
+<a name="l00482"></a>00482     <span class="comment">// amount is smaller than ASize, it is always safe to do the shift in A's</span>
+<a name="l00483"></a>00483     <span class="comment">// type, then zero extend or truncate to the result.</span>
+<a name="l00484"></a>00484     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Shift = Builder->CreateLShr(A, Cst-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>());
+<a name="l00485"></a>00485     Shift-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(Src);
+<a name="l00486"></a>00486     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1CastInst.html#ae96aa53c0b7c0eb9ec680db6a43abaa7" title="Create a ZExt, BitCast, or Trunc for int -> int casts.">CastInst::CreateIntegerCast</a>(Shift, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">false</span>);
+<a name="l00487"></a>00487   }
+<a name="l00488"></a>00488   
+<a name="l00489"></a>00489   <span class="comment">// Transform "trunc (and X, cst)" -> "and (trunc X), cst" so long as the dest</span>
+<a name="l00490"></a>00490   <span class="comment">// type isn't non-native.</span>
+<a name="l00491"></a>00491   <span class="keywordflow">if</span> (Src-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && isa<IntegerType>(Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) &&
+<a name="l00492"></a>00492       ShouldChangeType(Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) &&
+<a name="l00493"></a>00493       <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Src, <a class="code" href="namespacellvm_1_1PatternMatch.html#a427435d4da769ae680a8e77ef89520aa">m_And</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(A), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(Cst)))) {
+<a name="l00494"></a>00494     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewTrunc = Builder->CreateTrunc(A, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), A-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".tr"</span>);
+<a name="l00495"></a>00495     <span class="keywordflow">return</span> BinaryOperator::CreateAnd(NewTrunc,
+<a name="l00496"></a>00496                                      <a class="code" href="classllvm_1_1ConstantExpr.html#aca5cab6b8d2be24d0c857cc4a831feec">ConstantExpr::getTrunc</a>(Cst, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00497"></a>00497   }
+<a name="l00498"></a>00498 
+<a name="l00499"></a>00499   <span class="keywordflow">return</span> 0;
+<a name="l00500"></a>00500 }
+<a name="l00501"></a>00501 <span class="comment"></span>
+<a name="l00502"></a>00502 <span class="comment">/// transformZExtICmp - Transform (zext icmp) to bitwise / integer operations</span>
+<a name="l00503"></a>00503 <span class="comment">/// in order to eliminate the icmp.</span>
+<a name="l00504"></a>00504 <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::transformZExtICmp(<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICI, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> &CI,
+<a name="l00505"></a>00505                                              <span class="keywordtype">bool</span> DoXform) {
+<a name="l00506"></a>00506   <span class="comment">// If we are just checking for a icmp eq of a single bit and zext'ing it</span>
+<a name="l00507"></a>00507   <span class="comment">// to an integer, then shift the bit to the appropriate place and then</span>
+<a name="l00508"></a>00508   <span class="comment">// cast to integer to avoid the comparison.</span>
+<a name="l00509"></a>00509   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *Op1C = dyn_cast<ConstantInt>(ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1))) {
+<a name="l00510"></a>00510     <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &Op1CV = Op1C->getValue();
+<a name="l00511"></a>00511       
+<a name="l00512"></a>00512     <span class="comment">// zext (x <s  0) to i32 --> x>>u31      true if signbit set.</span>
+<a name="l00513"></a>00513     <span class="comment">// zext (x >s -1) to i32 --> (x>>u31)^1  true if signbit clear.</span>
+<a name="l00514"></a>00514     <span class="keywordflow">if</span> ((ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>() == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a15ae464950ac676919c2f0c7aafc706c" title="signed less than">ICmpInst::ICMP_SLT</a> && Op1CV == 0) ||
+<a name="l00515"></a>00515         (ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>() == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a720a42e85f7e981afd61e28473b0000a" title="signed greater than">ICmpInst::ICMP_SGT</a> &&Op1CV.isAllOnesValue())) {
+<a name="l00516"></a>00516       <span class="keywordflow">if</span> (!DoXform) <span class="keywordflow">return</span> ICI;
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5a5fa7b4069ef3bd1ceb9f2caa315cf5ac">In</a> = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00519"></a>00519       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sh = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00520"></a>00520                                    In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>()-1);
+<a name="l00521"></a>00521       In = Builder->CreateLShr(In, Sh, In-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".lobit"</span>);
+<a name="l00522"></a>00522       <span class="keywordflow">if</span> (In->getType() != CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l00523"></a>00523         In = Builder->CreateIntCast(In, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">false</span><span class="comment">/*ZExt*/</span>);
+<a name="l00524"></a>00524 
+<a name="l00525"></a>00525       <span class="keywordflow">if</span> (ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>() == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a720a42e85f7e981afd61e28473b0000a" title="signed greater than">ICmpInst::ICMP_SGT</a>) {
+<a name="l00526"></a>00526         <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *One = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In->getType(), 1);
+<a name="l00527"></a>00527         In = Builder->CreateXor(In, One, In-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".not"</span>);
+<a name="l00528"></a>00528       }
+<a name="l00529"></a>00529 
+<a name="l00530"></a>00530       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, In);
+<a name="l00531"></a>00531     }
+<a name="l00532"></a>00532 
+<a name="l00533"></a>00533     <span class="comment">// zext (X == 0) to i32 --> X^1      iff X has only the low bit set.</span>
+<a name="l00534"></a>00534     <span class="comment">// zext (X == 0) to i32 --> (X>>1)^1 iff X has only the 2nd bit set.</span>
+<a name="l00535"></a>00535     <span class="comment">// zext (X == 1) to i32 --> X        iff X has only the low bit set.</span>
+<a name="l00536"></a>00536     <span class="comment">// zext (X == 2) to i32 --> X>>1     iff X has only the 2nd bit set.</span>
+<a name="l00537"></a>00537     <span class="comment">// zext (X != 0) to i32 --> X        iff X has only the low bit set.</span>
+<a name="l00538"></a>00538     <span class="comment">// zext (X != 0) to i32 --> X>>1     iff X has only the 2nd bit set.</span>
+<a name="l00539"></a>00539     <span class="comment">// zext (X != 1) to i32 --> X^1      iff X has only the low bit set.</span>
+<a name="l00540"></a>00540     <span class="comment">// zext (X != 2) to i32 --> (X>>1)^1 iff X has only the 2nd bit set.</span>
+<a name="l00541"></a>00541     <span class="keywordflow">if</span> ((Op1CV == 0 || Op1CV.isPowerOf2()) && 
+<a name="l00542"></a>00542         <span class="comment">// This only works for EQ and NE</span>
+<a name="l00543"></a>00543         ICI-><a class="code" href="classllvm_1_1ICmpInst.html#abe8988eef2e6fc2baba032cb22afedd7">isEquality</a>()) {
+<a name="l00544"></a>00544       <span class="comment">// If Op1C some other power of two, convert:</span>
+<a name="l00545"></a>00545       uint32_t BitWidth = Op1C->getType()->getBitWidth();
+<a name="l00546"></a>00546       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
+<a name="l00547"></a>00547       <a class="code" href="namespacellvm.html#a7985318bedfe5c2040025ef13db9c57b">ComputeMaskedBits</a>(ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), KnownZero, KnownOne);
+<a name="l00548"></a>00548         
+<a name="l00549"></a>00549       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZeroMask(~KnownZero);
+<a name="l00550"></a>00550       <span class="keywordflow">if</span> (KnownZeroMask.isPowerOf2()) { <span class="comment">// Exactly 1 possible 1?</span>
+<a name="l00551"></a>00551         <span class="keywordflow">if</span> (!DoXform) <span class="keywordflow">return</span> ICI;
+<a name="l00552"></a>00552 
+<a name="l00553"></a>00553         <span class="keywordtype">bool</span> isNE = ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>() == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05ac17897ebf2f6a6986280fc3bdf28a30a" title="not equal">ICmpInst::ICMP_NE</a>;
+<a name="l00554"></a>00554         <span class="keywordflow">if</span> (Op1CV != 0 && (Op1CV != KnownZeroMask)) {
+<a name="l00555"></a>00555           <span class="comment">// (X&4) == 2 --> false</span>
+<a name="l00556"></a>00556           <span class="comment">// (X&4) != 2 --> true</span>
+<a name="l00557"></a>00557           <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *Res = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(<a class="code" href="classllvm_1_1Type.html#aa75984a442f2379de0c66018201fa628">Type::getInt1Ty</a>(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()),
+<a name="l00558"></a>00558                                            isNE);
+<a name="l00559"></a>00559           Res = <a class="code" href="classllvm_1_1ConstantExpr.html#a80e82791d4d7f4d1d23d68ca0a2b1f64">ConstantExpr::getZExt</a>(Res, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00560"></a>00560           <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Res);
+<a name="l00561"></a>00561         }
+<a name="l00562"></a>00562           
+<a name="l00563"></a>00563         uint32_t ShiftAmt = KnownZeroMask.logBase2();
+<a name="l00564"></a>00564         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *In = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00565"></a>00565         <span class="keywordflow">if</span> (ShiftAmt) {
+<a name="l00566"></a>00566           <span class="comment">// Perform a logical shr by shiftamt.</span>
+<a name="l00567"></a>00567           <span class="comment">// Insert the shift to put the result in the low bit.</span>
+<a name="l00568"></a>00568           In = Builder->CreateLShr(In, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),ShiftAmt),
+<a name="l00569"></a>00569                                    In-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".lobit"</span>);
+<a name="l00570"></a>00570         }
+<a name="l00571"></a>00571           
+<a name="l00572"></a>00572         <span class="keywordflow">if</span> ((Op1CV != 0) == isNE) { <span class="comment">// Toggle the low bit.</span>
+<a name="l00573"></a>00573           <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *One = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1);
+<a name="l00574"></a>00574           In = Builder->CreateXor(In, One);
+<a name="l00575"></a>00575         }
+<a name="l00576"></a>00576           
+<a name="l00577"></a>00577         <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == In->getType())
+<a name="l00578"></a>00578           <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, In);
+<a name="l00579"></a>00579         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1CastInst.html#ae96aa53c0b7c0eb9ec680db6a43abaa7" title="Create a ZExt, BitCast, or Trunc for int -> int casts.">CastInst::CreateIntegerCast</a>(In, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">false</span><span class="comment">/*ZExt*/</span>);
+<a name="l00580"></a>00580       }
+<a name="l00581"></a>00581     }
+<a name="l00582"></a>00582   }
+<a name="l00583"></a>00583 
+<a name="l00584"></a>00584   <span class="comment">// icmp ne A, B is equal to xor A, B when A and B only really have one bit.</span>
+<a name="l00585"></a>00585   <span class="comment">// It is also profitable to transform icmp eq into not(xor(A, B)) because that</span>
+<a name="l00586"></a>00586   <span class="comment">// may lead to additional simplifications.</span>
+<a name="l00587"></a>00587   <span class="keywordflow">if</span> (ICI-><a class="code" href="classllvm_1_1ICmpInst.html#abe8988eef2e6fc2baba032cb22afedd7">isEquality</a>() && CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l00588"></a>00588     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1IntegerType.html" title="Integer representation type.">IntegerType</a> *ITy = dyn_cast<IntegerType>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())) {
+<a name="l00589"></a>00589       uint32_t BitWidth = ITy->getBitWidth();
+<a name="l00590"></a>00590       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00591"></a>00591       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00592"></a>00592 
+<a name="l00593"></a>00593       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZeroLHS(BitWidth, 0), KnownOneLHS(BitWidth, 0);
+<a name="l00594"></a>00594       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZeroRHS(BitWidth, 0), KnownOneRHS(BitWidth, 0);
+<a name="l00595"></a>00595       <a class="code" href="namespacellvm.html#a7985318bedfe5c2040025ef13db9c57b">ComputeMaskedBits</a>(LHS, KnownZeroLHS, KnownOneLHS);
+<a name="l00596"></a>00596       <a class="code" href="namespacellvm.html#a7985318bedfe5c2040025ef13db9c57b">ComputeMaskedBits</a>(RHS, KnownZeroRHS, KnownOneRHS);
+<a name="l00597"></a>00597 
+<a name="l00598"></a>00598       <span class="keywordflow">if</span> (KnownZeroLHS == KnownZeroRHS && KnownOneLHS == KnownOneRHS) {
+<a name="l00599"></a>00599         <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownBits = KnownZeroLHS | KnownOneLHS;
+<a name="l00600"></a>00600         <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> UnknownBit = ~KnownBits;
+<a name="l00601"></a>00601         <span class="keywordflow">if</span> (UnknownBit.<a class="code" href="classllvm_1_1APInt.html#ac9d5eb700dcdf604653d12d8caf4a0fb" title="Count the number of bits set.">countPopulation</a>() == 1) {
+<a name="l00602"></a>00602           <span class="keywordflow">if</span> (!DoXform) <span class="keywordflow">return</span> ICI;
+<a name="l00603"></a>00603 
+<a name="l00604"></a>00604           <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Result = Builder->CreateXor(LHS, RHS);
+<a name="l00605"></a>00605 
+<a name="l00606"></a>00606           <span class="comment">// Mask off any bits that are set and won't be shifted away.</span>
+<a name="l00607"></a>00607           <span class="keywordflow">if</span> (KnownOneLHS.uge(UnknownBit))
+<a name="l00608"></a>00608             Result = Builder->CreateAnd(Result,
+<a name="l00609"></a>00609                                         <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(ITy, UnknownBit));
+<a name="l00610"></a>00610 
+<a name="l00611"></a>00611           <span class="comment">// Shift the bit we're testing down to the lsb.</span>
+<a name="l00612"></a>00612           Result = Builder->CreateLShr(
+<a name="l00613"></a>00613                Result, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(ITy, UnknownBit.<a class="code" href="classllvm_1_1APInt.html#aac277496191547e487eea07f09dffd4b" title="Count the number of trailing zero bits.">countTrailingZeros</a>()));
+<a name="l00614"></a>00614 
+<a name="l00615"></a>00615           <span class="keywordflow">if</span> (ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>() == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05aa719225e2de4059f93fd3209e1f48218" title="equal">ICmpInst::ICMP_EQ</a>)
+<a name="l00616"></a>00616             Result = Builder->CreateXor(Result, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(ITy, 1));
+<a name="l00617"></a>00617           Result-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(ICI);
+<a name="l00618"></a>00618           <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Result);
+<a name="l00619"></a>00619         }
+<a name="l00620"></a>00620       }
+<a name="l00621"></a>00621     }
+<a name="l00622"></a>00622   }
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624   <span class="keywordflow">return</span> 0;
+<a name="l00625"></a>00625 }
+<a name="l00626"></a>00626 <span class="comment"></span>
+<a name="l00627"></a>00627 <span class="comment">/// CanEvaluateZExtd - Determine if the specified value can be computed in the</span>
+<a name="l00628"></a>00628 <span class="comment">/// specified wider type and produce the same low bits.  If not, return false.</span>
+<a name="l00629"></a>00629 <span class="comment">///</span>
+<a name="l00630"></a>00630 <span class="comment">/// If this function returns true, it can also return a non-zero number of bits</span>
+<a name="l00631"></a>00631 <span class="comment">/// (in BitsToClear) which indicates that the value it computes is correct for</span>
+<a name="l00632"></a>00632 <span class="comment">/// the zero extend, but that the additional BitsToClear bits need to be zero'd</span>
+<a name="l00633"></a>00633 <span class="comment">/// out.  For example, to promote something like:</span>
+<a name="l00634"></a>00634 <span class="comment">///</span>
+<a name="l00635"></a>00635 <span class="comment">///   %B = trunc i64 %A to i32</span>
+<a name="l00636"></a>00636 <span class="comment">///   %C = lshr i32 %B, 8</span>
+<a name="l00637"></a>00637 <span class="comment">///   %E = zext i32 %C to i64</span>
+<a name="l00638"></a>00638 <span class="comment">///</span>
+<a name="l00639"></a>00639 <span class="comment">/// CanEvaluateZExtd for the 'lshr' will return true, and BitsToClear will be</span>
+<a name="l00640"></a>00640 <span class="comment">/// set to 8 to indicate that the promoted value needs to have bits 24-31</span>
+<a name="l00641"></a>00641 <span class="comment">/// cleared in addition to bits 32-63.  Since an 'and' will be generated to</span>
+<a name="l00642"></a>00642 <span class="comment">/// clear the top bits anyway, doing this has no extra cost.</span>
+<a name="l00643"></a>00643 <span class="comment">///</span>
+<a name="l00644"></a>00644 <span class="comment">/// This function works on both vectors and scalars.</span>
+<a name="l00645"></a><a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">00645</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty, <span class="keywordtype">unsigned</span> &BitsToClear) {
+<a name="l00646"></a>00646   BitsToClear = 0;
+<a name="l00647"></a>00647   <span class="keywordflow">if</span> (isa<Constant>(V))
+<a name="l00648"></a>00648     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00649"></a>00649   
+<a name="l00650"></a>00650   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(V);
+<a name="l00651"></a>00651   <span class="keywordflow">if</span> (!I) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00652"></a>00652   
+<a name="l00653"></a>00653   <span class="comment">// If the input is a truncate from the destination type, we can trivially</span>
+<a name="l00654"></a>00654   <span class="comment">// eliminate it.</span>
+<a name="l00655"></a>00655   <span class="keywordflow">if</span> (isa<TruncInst>(I) && I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00656"></a>00656     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00657"></a>00657   
+<a name="l00658"></a>00658   <span class="comment">// We can't extend or shrink something that has multiple uses: doing so would</span>
+<a name="l00659"></a>00659   <span class="comment">// require duplicating the instruction in general, which isn't profitable.</span>
+<a name="l00660"></a>00660   <span class="keywordflow">if</span> (!I-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00661"></a>00661   
+<a name="l00662"></a>00662   <span class="keywordtype">unsigned</span> Opc = 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>(), Tmp;
+<a name="l00663"></a>00663   <span class="keywordflow">switch</span> (Opc) {
+<a name="l00664"></a>00664   <span class="keywordflow">case</span> Instruction::ZExt:  <span class="comment">// zext(zext(x)) -> zext(x).</span>
+<a name="l00665"></a>00665   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>:  <span class="comment">// zext(sext(x)) -> sext(x).</span>
+<a name="l00666"></a>00666   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Instruction::Trunc</a>: <span class="comment">// zext(trunc(x)) -> trunc(x) or zext(x)</span>
+<a name="l00667"></a>00667     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00668"></a>00668   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a>:
+<a name="l00669"></a>00669   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>:
+<a name="l00670"></a>00670   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>:
+<a name="l00671"></a>00671   <span class="keywordflow">case</span> Instruction::Add:
+<a name="l00672"></a>00672   <span class="keywordflow">case</span> Instruction::Sub:
+<a name="l00673"></a>00673   <span class="keywordflow">case</span> Instruction::Mul:
+<a name="l00674"></a>00674   <span class="keywordflow">case</span> Instruction::Shl:
+<a name="l00675"></a>00675     <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty, BitsToClear) ||
+<a name="l00676"></a>00676         !<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty, Tmp))
+<a name="l00677"></a>00677       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00678"></a>00678     <span class="comment">// These can all be promoted if neither operand has 'bits to clear'.</span>
+<a name="l00679"></a>00679     <span class="keywordflow">if</span> (BitsToClear == 0 && Tmp == 0)
+<a name="l00680"></a>00680       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00681"></a>00681       
+<a name="l00682"></a>00682     <span class="comment">// If the operation is an AND/OR/XOR and the bits to clear are zero in the</span>
+<a name="l00683"></a>00683     <span class="comment">// other side, BitsToClear is ok.</span>
+<a name="l00684"></a>00684     <span class="keywordflow">if</span> (Tmp == 0 &&
+<a name="l00685"></a>00685         (Opc == <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a> || Opc == <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a> ||
+<a name="l00686"></a>00686          Opc == <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>)) {
+<a name="l00687"></a>00687       <span class="comment">// We use MaskedValueIsZero here for generality, but the case we care</span>
+<a name="l00688"></a>00688       <span class="comment">// about the most is constant RHS.</span>
+<a name="l00689"></a>00689       <span class="keywordtype">unsigned</span> VSize = V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00690"></a>00690       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1),
+<a name="l00691"></a>00691                             <a class="code" href="classllvm_1_1APInt.html#adcb96bd09d7c75c7669fa5f9d1190899" title="Get a value with high bits set.">APInt::getHighBitsSet</a>(VSize, BitsToClear)))
+<a name="l00692"></a>00692         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00693"></a>00693     }
+<a name="l00694"></a>00694       
+<a name="l00695"></a>00695     <span class="comment">// Otherwise, we don't know how to analyze this BitsToClear case yet.</span>
+<a name="l00696"></a>00696     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00697"></a>00697       
+<a name="l00698"></a>00698   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a>:
+<a name="l00699"></a>00699     <span class="comment">// We can promote lshr(x, cst) if we can promote x.  This requires the</span>
+<a name="l00700"></a>00700     <span class="comment">// ultimate 'and' to clear out the high zero bits we're clearing out though.</span>
+<a name="l00701"></a>00701     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *Amt = dyn_cast<ConstantInt>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1))) {
+<a name="l00702"></a>00702       <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty, BitsToClear))
+<a name="l00703"></a>00703         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00704"></a>00704       BitsToClear += Amt->getZExtValue();
+<a name="l00705"></a>00705       <span class="keywordflow">if</span> (BitsToClear > V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>())
+<a name="l00706"></a>00706         BitsToClear = V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00707"></a>00707       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00708"></a>00708     }
+<a name="l00709"></a>00709     <span class="comment">// Cannot promote variable LSHR.</span>
+<a name="l00710"></a>00710     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00711"></a>00711   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MCID.html#accb16fffd544529ed4d816a45e40f425a32dbd2c72a98eaee90e3ad5ef7b5af16">Instruction::Select</a>:
+<a name="l00712"></a>00712     <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty, Tmp) ||
+<a name="l00713"></a>00713         !<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(2), Ty, BitsToClear) ||
+<a name="l00714"></a>00714         <span class="comment">// TODO: If important, we could handle the case when the BitsToClear are</span>
+<a name="l00715"></a>00715         <span class="comment">// known zero in the disagreeing side.</span>
+<a name="l00716"></a>00716         Tmp != BitsToClear)
+<a name="l00717"></a>00717       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00718"></a>00718     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00719"></a>00719       
+<a name="l00720"></a>00720   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">Instruction::PHI</a>: {
+<a name="l00721"></a>00721     <span class="comment">// We can change a phi if we can change all operands.  Note that we never</span>
+<a name="l00722"></a>00722     <span class="comment">// get into trouble with cyclic PHIs here because we only consider</span>
+<a name="l00723"></a>00723     <span class="comment">// instructions with a single use.</span>
+<a name="l00724"></a>00724     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00725"></a>00725     <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0), Ty, BitsToClear))
+<a name="l00726"></a>00726       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00727"></a>00727     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i)
+<a name="l00728"></a>00728       <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i), Ty, Tmp) ||
+<a name="l00729"></a>00729           <span class="comment">// TODO: If important, we could handle the case when the BitsToClear</span>
+<a name="l00730"></a>00730           <span class="comment">// are known zero in the disagreeing input.</span>
+<a name="l00731"></a>00731           Tmp != BitsToClear)
+<a name="l00732"></a>00732         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00733"></a>00733     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00734"></a>00734   }
+<a name="l00735"></a>00735   <span class="keywordflow">default</span>:
+<a name="l00736"></a>00736     <span class="comment">// TODO: Can handle more cases here.</span>
+<a name="l00737"></a>00737     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00738"></a>00738   }
+<a name="l00739"></a>00739 }
+<a name="l00740"></a>00740 
+<a name="l00741"></a><a class="code" href="classllvm_1_1InstCombiner.html#acab69d70075956abdfb5ccbdbdbb9e15">00741</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#acab69d70075956abdfb5ccbdbdbb9e15">InstCombiner::visitZExt</a>(<a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a> &CI) {
+<a name="l00742"></a>00742   <span class="comment">// If this zero extend is only used by a truncate, let the truncate by</span>
+<a name="l00743"></a>00743   <span class="comment">// eliminated before we try to optimize this zext.</span>
+<a name="l00744"></a>00744   <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && isa<TruncInst>(CI.<a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>()))
+<a name="l00745"></a>00745     <span class="keywordflow">return</span> 0;
+<a name="l00746"></a>00746   
+<a name="l00747"></a>00747   <span class="comment">// If one of the common conversion will work, do it.</span>
+<a name="l00748"></a>00748   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Result = commonCastTransforms(CI))
+<a name="l00749"></a>00749     <span class="keywordflow">return</span> Result;
+<a name="l00750"></a>00750 
+<a name="l00751"></a>00751   <span class="comment">// See if we can simplify any instructions used by the input whose sole </span>
+<a name="l00752"></a>00752   <span class="comment">// purpose is to compute bits we don't care about.</span>
+<a name="l00753"></a>00753   <span class="keywordflow">if</span> (SimplifyDemandedInstructionBits(CI))
+<a name="l00754"></a>00754     <span class="keywordflow">return</span> &CI;
+<a name="l00755"></a>00755   
+<a name="l00756"></a>00756   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00757"></a>00757   <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcTy = Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), *DestTy = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00758"></a>00758   
+<a name="l00759"></a>00759   <span class="comment">// Attempt to extend the entire input expression tree to the destination</span>
+<a name="l00760"></a>00760   <span class="comment">// type.   Only do this if the dest type is a simple type, don't convert the</span>
+<a name="l00761"></a>00761   <span class="comment">// expression tree to something weird like i93 unless the source is also</span>
+<a name="l00762"></a>00762   <span class="comment">// strange.</span>
+<a name="l00763"></a>00763   <span class="keywordtype">unsigned</span> BitsToClear;
+<a name="l00764"></a>00764   <span class="keywordflow">if</span> ((DestTy->isVectorTy() || ShouldChangeType(SrcTy, DestTy)) &&
+<a name="l00765"></a>00765       <a class="code" href="InstCombineCasts_8cpp.html#a39b384f8e288556dc7732b655b848692">CanEvaluateZExtd</a>(Src, DestTy, BitsToClear)) { 
+<a name="l00766"></a>00766     assert(BitsToClear < SrcTy->getScalarSizeInBits() &&
+<a name="l00767"></a>00767            <span class="stringliteral">"Unreasonable BitsToClear"</span>);
+<a name="l00768"></a>00768     
+<a name="l00769"></a>00769     <span class="comment">// Okay, we can transform this!  Insert the new expression now.</span>
+<a name="l00770"></a>00770     <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">"ICE: EvaluateInDifferentType converting expression type"</span>
+<a name="l00771"></a>00771           <span class="stringliteral">" to avoid zero extend: "</span> << CI);
+<a name="l00772"></a>00772     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = EvaluateInDifferentType(Src, DestTy, <span class="keyword">false</span>);
+<a name="l00773"></a>00773     assert(Res-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == DestTy);
+<a name="l00774"></a>00774     
+<a name="l00775"></a>00775     uint32_t SrcBitsKept = SrcTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>()-BitsToClear;
+<a name="l00776"></a>00776     uint32_t DestBitSize = DestTy->getScalarSizeInBits();
+<a name="l00777"></a>00777     
+<a name="l00778"></a>00778     <span class="comment">// If the high bits are already filled with zeros, just replace this</span>
+<a name="l00779"></a>00779     <span class="comment">// cast with the result.</span>
+<a name="l00780"></a>00780     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Res, <a class="code" href="classllvm_1_1APInt.html#adcb96bd09d7c75c7669fa5f9d1190899" title="Get a value with high bits set.">APInt::getHighBitsSet</a>(DestBitSize,
+<a name="l00781"></a>00781                                                      DestBitSize-SrcBitsKept)))
+<a name="l00782"></a>00782       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Res);
+<a name="l00783"></a>00783     
+<a name="l00784"></a>00784     <span class="comment">// We need to emit an AND to clear the high bits.</span>
+<a name="l00785"></a>00785     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Res-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00786"></a>00786                                <a class="code" href="classllvm_1_1APInt.html#ad960e1ff48d25c382b6d28e7961f074e" title="Get a value with low bits set.">APInt::getLowBitsSet</a>(DestBitSize, SrcBitsKept));
+<a name="l00787"></a>00787     <span class="keywordflow">return</span> BinaryOperator::CreateAnd(Res, C);
+<a name="l00788"></a>00788   }
+<a name="l00789"></a>00789 
+<a name="l00790"></a>00790   <span class="comment">// If this is a TRUNC followed by a ZEXT then we are dealing with integral</span>
+<a name="l00791"></a>00791   <span class="comment">// types and if the sizes are just right we can convert this into a logical</span>
+<a name="l00792"></a>00792   <span class="comment">// 'and' which will be much cheaper than the pair of casts.</span>
+<a name="l00793"></a>00793   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a> *CSrc = dyn_cast<TruncInst>(Src)) {   <span class="comment">// A->B->C cast</span>
+<a name="l00794"></a>00794     <span class="comment">// TODO: Subsume this into EvaluateInDifferentType.</span>
+<a name="l00795"></a>00795     
+<a name="l00796"></a>00796     <span class="comment">// Get the sizes of the types involved.  We know that the intermediate type</span>
+<a name="l00797"></a>00797     <span class="comment">// will be smaller than A or C, but don't know the relation between A and C.</span>
+<a name="l00798"></a>00798     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = CSrc->getOperand(0);
+<a name="l00799"></a>00799     <span class="keywordtype">unsigned</span> SrcSize = A-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00800"></a>00800     <span class="keywordtype">unsigned</span> MidSize = CSrc->getType()->getScalarSizeInBits();
+<a name="l00801"></a>00801     <span class="keywordtype">unsigned</span> DstSize = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l00802"></a>00802     <span class="comment">// If we're actually extending zero bits, then if</span>
+<a name="l00803"></a>00803     <span class="comment">// SrcSize <  DstSize: zext(a & mask)</span>
+<a name="l00804"></a>00804     <span class="comment">// SrcSize == DstSize: a & mask</span>
+<a name="l00805"></a>00805     <span class="comment">// SrcSize  > DstSize: trunc(a) & mask</span>
+<a name="l00806"></a>00806     <span class="keywordflow">if</span> (SrcSize < DstSize) {
+<a name="l00807"></a>00807       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> AndValue(<a class="code" href="classllvm_1_1APInt.html#ad960e1ff48d25c382b6d28e7961f074e" title="Get a value with low bits set.">APInt::getLowBitsSet</a>(SrcSize, MidSize));
+<a name="l00808"></a>00808       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *AndConst = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(A-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), AndValue);
+<a name="l00809"></a>00809       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a> = Builder->CreateAnd(A, AndConst, CSrc-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".mask"</span>);
+<a name="l00810"></a>00810       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a>(And, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00811"></a>00811     }
+<a name="l00812"></a>00812     
+<a name="l00813"></a>00813     <span class="keywordflow">if</span> (SrcSize == DstSize) {
+<a name="l00814"></a>00814       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> AndValue(<a class="code" href="classllvm_1_1APInt.html#ad960e1ff48d25c382b6d28e7961f074e" title="Get a value with low bits set.">APInt::getLowBitsSet</a>(SrcSize, MidSize));
+<a name="l00815"></a>00815       <span class="keywordflow">return</span> BinaryOperator::CreateAnd(A, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(A-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00816"></a>00816                                                            AndValue));
+<a name="l00817"></a>00817     }
+<a name="l00818"></a>00818     <span class="keywordflow">if</span> (SrcSize > DstSize) {
+<a name="l00819"></a>00819       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Trunc</a> = Builder->CreateTrunc(A, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00820"></a>00820       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> AndValue(<a class="code" href="classllvm_1_1APInt.html#ad960e1ff48d25c382b6d28e7961f074e" title="Get a value with low bits set.">APInt::getLowBitsSet</a>(DstSize, MidSize));
+<a name="l00821"></a>00821       <span class="keywordflow">return</span> BinaryOperator::CreateAnd(Trunc, 
+<a name="l00822"></a>00822                                        <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Trunc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00823"></a>00823                                                         AndValue));
+<a name="l00824"></a>00824     }
+<a name="l00825"></a>00825   }
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICI = dyn_cast<ICmpInst>(Src))
+<a name="l00828"></a>00828     <span class="keywordflow">return</span> transformZExtICmp(ICI, CI);
+<a name="l00829"></a>00829 
+<a name="l00830"></a>00830   <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *SrcI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a>>(Src);
+<a name="l00831"></a>00831   <span class="keywordflow">if</span> (SrcI && SrcI-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>() == <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>) {
+<a name="l00832"></a>00832     <span class="comment">// zext (or icmp, icmp) --> or (zext icmp), (zext icmp) if at least one</span>
+<a name="l00833"></a>00833     <span class="comment">// of the (zext icmp) will be transformed.</span>
+<a name="l00834"></a>00834     <a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *LHS = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a>>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l00835"></a>00835     <a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *RHS = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a>>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00836"></a>00836     <span class="keywordflow">if</span> (LHS && RHS && LHS-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && RHS->hasOneUse() &&
+<a name="l00837"></a>00837         (transformZExtICmp(LHS, CI, <span class="keyword">false</span>) ||
+<a name="l00838"></a>00838          transformZExtICmp(RHS, CI, <span class="keyword">false</span>))) {
+<a name="l00839"></a>00839       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LCast = Builder->CreateZExt(LHS, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), LHS-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00840"></a>00840       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RCast = Builder->CreateZExt(RHS, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), RHS->getName());
+<a name="l00841"></a>00841       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(<a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>, LCast, RCast);
+<a name="l00842"></a>00842     }
+<a name="l00843"></a>00843   }
+<a name="l00844"></a>00844 
+<a name="l00845"></a>00845   <span class="comment">// zext(trunc(t) & C) -> (t & zext(C)).</span>
+<a name="l00846"></a>00846   <span class="keywordflow">if</span> (SrcI && SrcI-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>() == <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a> && SrcI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00847"></a>00847     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<ConstantInt>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00848"></a>00848       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a> *TI = dyn_cast<TruncInst>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0))) {
+<a name="l00849"></a>00849         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *TI0 = TI->getOperand(0);
+<a name="l00850"></a>00850         <span class="keywordflow">if</span> (TI0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l00851"></a>00851           <span class="keywordflow">return</span>
+<a name="l00852"></a>00852             BinaryOperator::CreateAnd(TI0,
+<a name="l00853"></a>00853                                 <a class="code" href="classllvm_1_1ConstantExpr.html#a80e82791d4d7f4d1d23d68ca0a2b1f64">ConstantExpr::getZExt</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00854"></a>00854       }
+<a name="l00855"></a>00855 
+<a name="l00856"></a>00856   <span class="comment">// zext((trunc(t) & C) ^ C) -> ((t & zext(C)) ^ zext(C)).</span>
+<a name="l00857"></a>00857   <span class="keywordflow">if</span> (SrcI && SrcI-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>() == <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a> && SrcI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00858"></a>00858     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<ConstantInt>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00859"></a>00859       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *<a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a> = dyn_cast<BinaryOperator>(SrcI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)))
+<a name="l00860"></a>00860         <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a>->getOpcode() == <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a> && <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a>->hasOneUse() &&
+<a name="l00861"></a>00861             <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a>->getOperand(1) == <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>)
+<a name="l00862"></a>00862           <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a> *TI = dyn_cast<TruncInst>(<a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">And</a>->getOperand(0))) {
+<a name="l00863"></a>00863             <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *TI0 = TI->getOperand(0);
+<a name="l00864"></a>00864             <span class="keywordflow">if</span> (TI0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l00865"></a>00865               <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *ZC = <a class="code" href="classllvm_1_1ConstantExpr.html#a80e82791d4d7f4d1d23d68ca0a2b1f64">ConstantExpr::getZExt</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00866"></a>00866               <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewAnd = Builder->CreateAnd(TI0, ZC);
+<a name="l00867"></a>00867               <span class="keywordflow">return</span> BinaryOperator::CreateXor(NewAnd, ZC);
+<a name="l00868"></a>00868             }
+<a name="l00869"></a>00869           }
+<a name="l00870"></a>00870 
+<a name="l00871"></a>00871   <span class="comment">// zext (xor i1 X, true) to i32  --> xor (zext i1 X to i32), 1</span>
+<a name="l00872"></a>00872   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>;
+<a name="l00873"></a>00873   <span class="keywordflow">if</span> (SrcI && SrcI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && SrcI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(1) &&
+<a name="l00874"></a>00874       <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(SrcI, <a class="code" href="namespacellvm_1_1PatternMatch.html#a4cfd328368353696e64a4d1b15a7cbfa">m_Not</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(X))) &&
+<a name="l00875"></a>00875       (!X-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() || !isa<CmpInst>(<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>))) {
+<a name="l00876"></a>00876     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *New = Builder->CreateZExt(X, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00877"></a>00877     <span class="keywordflow">return</span> BinaryOperator::CreateXor(New, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1));
+<a name="l00878"></a>00878   }
+<a name="l00879"></a>00879   
+<a name="l00880"></a>00880   <span class="keywordflow">return</span> 0;
+<a name="l00881"></a>00881 }
+<a name="l00882"></a>00882 <span class="comment"></span>
+<a name="l00883"></a>00883 <span class="comment">/// transformSExtICmp - Transform (sext icmp) to bitwise / integer operations</span>
+<a name="l00884"></a>00884 <span class="comment">/// in order to eliminate the icmp.</span>
+<a name="l00885"></a>00885 <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::transformSExtICmp(<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICI, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> &CI) {
+<a name="l00886"></a>00886   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00887"></a>00887   <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05">ICmpInst::Predicate</a> Pred = ICI-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>();
+<a name="l00888"></a>00888 
+<a name="l00889"></a>00889   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *Op1C = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00890"></a>00890     <span class="comment">// (x <s  0) ? -1 : 0 -> ashr x, 31        -> all ones if negative</span>
+<a name="l00891"></a>00891     <span class="comment">// (x >s -1) ? -1 : 0 -> not (ashr x, 31)  -> all ones if positive</span>
+<a name="l00892"></a>00892     <span class="keywordflow">if</span> ((Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a15ae464950ac676919c2f0c7aafc706c" title="signed less than">ICmpInst::ICMP_SLT</a> && Op1C->isZero()) ||
+<a name="l00893"></a>00893         (Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a720a42e85f7e981afd61e28473b0000a" title="signed greater than">ICmpInst::ICMP_SGT</a> && Op1C->isAllOnesValue())) {
+<a name="l00894"></a>00894 
+<a name="l00895"></a>00895       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sh = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Op0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00896"></a>00896                                    Op0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>()-1);
+<a name="l00897"></a>00897       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *In = Builder->CreateAShr(Op0, Sh, Op0-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".lobit"</span>);
+<a name="l00898"></a>00898       <span class="keywordflow">if</span> (In->getType() != CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l00899"></a>00899         In = Builder->CreateIntCast(In, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span><span class="comment">/*SExt*/</span>);
+<a name="l00900"></a>00900 
+<a name="l00901"></a>00901       <span class="keywordflow">if</span> (Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a720a42e85f7e981afd61e28473b0000a" title="signed greater than">ICmpInst::ICMP_SGT</a>)
+<a name="l00902"></a>00902         In = Builder->CreateNot(In, In->getName()+<span class="stringliteral">".not"</span>);
+<a name="l00903"></a>00903       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, In);
+<a name="l00904"></a>00904     }
+<a name="l00905"></a>00905 
+<a name="l00906"></a>00906     <span class="comment">// If we know that only one bit of the LHS of the icmp can be set and we</span>
+<a name="l00907"></a>00907     <span class="comment">// have an equality comparison with zero or a power of 2, we can transform</span>
+<a name="l00908"></a>00908     <span class="comment">// the icmp and sext into bitwise/integer operations.</span>
+<a name="l00909"></a>00909     <span class="keywordflow">if</span> (ICI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l00910"></a>00910         ICI-><a class="code" href="classllvm_1_1ICmpInst.html#abe8988eef2e6fc2baba032cb22afedd7">isEquality</a>() && (Op1C->isZero() || Op1C->getValue().isPowerOf2())){
+<a name="l00911"></a>00911       <span class="keywordtype">unsigned</span> BitWidth = Op1C->getType()->getBitWidth();
+<a name="l00912"></a>00912       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
+<a name="l00913"></a>00913       <a class="code" href="namespacellvm.html#a7985318bedfe5c2040025ef13db9c57b">ComputeMaskedBits</a>(Op0, KnownZero, KnownOne);
+<a name="l00914"></a>00914 
+<a name="l00915"></a>00915       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> KnownZeroMask(~KnownZero);
+<a name="l00916"></a>00916       <span class="keywordflow">if</span> (KnownZeroMask.isPowerOf2()) {
+<a name="l00917"></a>00917         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *In = ICI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00918"></a>00918 
+<a name="l00919"></a>00919         <span class="comment">// If the icmp tests for a known zero bit we can constant fold it.</span>
+<a name="l00920"></a>00920         <span class="keywordflow">if</span> (!Op1C->isZero() && Op1C->getValue() != KnownZeroMask) {
+<a name="l00921"></a>00921           <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05ac17897ebf2f6a6986280fc3bdf28a30a" title="not equal">ICmpInst::ICMP_NE</a> ?
+<a name="l00922"></a>00922                        <a class="code" href="classllvm_1_1Constant.html#a4d51384de6e1798bb6aa875aebeea9f0" title="Get the all ones value.">ConstantInt::getAllOnesValue</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) :
+<a name="l00923"></a>00923                        <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">ConstantInt::getNullValue</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00924"></a>00924           <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, V);
+<a name="l00925"></a>00925         }
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927         <span class="keywordflow">if</span> (!Op1C->isZero() == (Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05ac17897ebf2f6a6986280fc3bdf28a30a" title="not equal">ICmpInst::ICMP_NE</a>)) {
+<a name="l00928"></a>00928           <span class="comment">// sext ((x & 2^n) == 0)   -> (x >> n) - 1</span>
+<a name="l00929"></a>00929           <span class="comment">// sext ((x & 2^n) != 2^n) -> (x >> n) - 1</span>
+<a name="l00930"></a>00930           <span class="keywordtype">unsigned</span> ShiftAmt = KnownZeroMask.countTrailingZeros();
+<a name="l00931"></a>00931           <span class="comment">// Perform a right shift to place the desired bit in the LSB.</span>
+<a name="l00932"></a>00932           <span class="keywordflow">if</span> (ShiftAmt)
+<a name="l00933"></a>00933             In = Builder->CreateLShr(In,
+<a name="l00934"></a>00934                                      <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), ShiftAmt));
+<a name="l00935"></a>00935 
+<a name="l00936"></a>00936           <span class="comment">// At this point "In" is either 1 or 0. Subtract 1 to turn</span>
+<a name="l00937"></a>00937           <span class="comment">// {1, 0} -> {0, -1}.</span>
+<a name="l00938"></a>00938           In = Builder->CreateAdd(In,
+<a name="l00939"></a>00939                                   <a class="code" href="classllvm_1_1Constant.html#a4d51384de6e1798bb6aa875aebeea9f0" title="Get the all ones value.">ConstantInt::getAllOnesValue</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()),
+<a name="l00940"></a>00940                                   <span class="stringliteral">"sext"</span>);
+<a name="l00941"></a>00941         } <span class="keywordflow">else</span> {
+<a name="l00942"></a>00942           <span class="comment">// sext ((x & 2^n) != 0)   -> (x << bitwidth-n) a>> bitwidth-1</span>
+<a name="l00943"></a>00943           <span class="comment">// sext ((x & 2^n) == 2^n) -> (x << bitwidth-n) a>> bitwidth-1</span>
+<a name="l00944"></a>00944           <span class="keywordtype">unsigned</span> ShiftAmt = KnownZeroMask.countLeadingZeros();
+<a name="l00945"></a>00945           <span class="comment">// Perform a left shift to place the desired bit in the MSB.</span>
+<a name="l00946"></a>00946           <span class="keywordflow">if</span> (ShiftAmt)
+<a name="l00947"></a>00947             In = Builder->CreateShl(In,
+<a name="l00948"></a>00948                                     <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), ShiftAmt));
+<a name="l00949"></a>00949 
+<a name="l00950"></a>00950           <span class="comment">// Distribute the bit over the whole bit width.</span>
+<a name="l00951"></a>00951           In = Builder->CreateAShr(In, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00952"></a>00952                                                         BitWidth - 1), <span class="stringliteral">"sext"</span>);
+<a name="l00953"></a>00953         }
+<a name="l00954"></a>00954 
+<a name="l00955"></a>00955         <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == In-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l00956"></a>00956           <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, In);
+<a name="l00957"></a>00957         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1CastInst.html#ae96aa53c0b7c0eb9ec680db6a43abaa7" title="Create a ZExt, BitCast, or Trunc for int -> int casts.">CastInst::CreateIntegerCast</a>(In, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), <span class="keyword">true</span><span class="comment">/*SExt*/</span>);
+<a name="l00958"></a>00958       }
+<a name="l00959"></a>00959     }
+<a name="l00960"></a>00960   }
+<a name="l00961"></a>00961 
+<a name="l00962"></a>00962   <span class="comment">// vector (x <s 0) ? -1 : 0 -> ashr x, 31   -> all ones if signed.</span>
+<a name="l00963"></a>00963   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *VTy = dyn_cast<VectorType>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())) {
+<a name="l00964"></a>00964     <span class="keywordflow">if</span> (Pred == <a class="code" href="classllvm_1_1CmpInst.html#a283f9a5d4d843d20c40bb4d3e364bb05a15ae464950ac676919c2f0c7aafc706c" title="signed less than">ICmpInst::ICMP_SLT</a> && <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#ab3b5beca3a0dedd21adac813123a2ae6">m_Zero</a>()) &&
+<a name="l00965"></a>00965         Op0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l00966"></a>00966       <a class="code" href="classllvm_1_1Type.html">Type</a> *EltTy = VTy->getElementType();
+<a name="l00967"></a>00967 
+<a name="l00968"></a>00968       <span class="comment">// splat the shift constant to a constant vector.</span>
+<a name="l00969"></a>00969       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *VSh = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(VTy, EltTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>()-1);
+<a name="l00970"></a>00970       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *In = Builder->CreateAShr(Op0, VSh, Op0-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".lobit"</span>);
+<a name="l00971"></a>00971       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, In);
+<a name="l00972"></a>00972     }
+<a name="l00973"></a>00973   }
+<a name="l00974"></a>00974 
+<a name="l00975"></a>00975   <span class="keywordflow">return</span> 0;
+<a name="l00976"></a>00976 }
+<a name="l00977"></a>00977 <span class="comment"></span>
+<a name="l00978"></a>00978 <span class="comment">/// CanEvaluateSExtd - Return true if we can take the specified value</span>
+<a name="l00979"></a>00979 <span class="comment">/// and return it as type Ty without inserting any new casts and without</span>
+<a name="l00980"></a>00980 <span class="comment">/// changing the value of the common low bits.  This is used by code that tries</span>
+<a name="l00981"></a>00981 <span class="comment">/// to promote integer operations to a wider types will allow us to eliminate</span>
+<a name="l00982"></a>00982 <span class="comment">/// the extension.</span>
+<a name="l00983"></a>00983 <span class="comment">///</span>
+<a name="l00984"></a>00984 <span class="comment">/// This function works on both vectors and scalars.</span>
+<a name="l00985"></a>00985 <span class="comment">///</span>
+<a name="l00986"></a><a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">00986</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l00987"></a>00987   assert(V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() < Ty-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() &&
+<a name="l00988"></a>00988          <span class="stringliteral">"Can't sign extend type to a smaller type"</span>);
+<a name="l00989"></a>00989   <span class="comment">// If this is a constant, it can be trivially promoted.</span>
+<a name="l00990"></a>00990   <span class="keywordflow">if</span> (isa<Constant>(V))
+<a name="l00991"></a>00991     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00992"></a>00992   
+<a name="l00993"></a>00993   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(V);
+<a name="l00994"></a>00994   <span class="keywordflow">if</span> (!I) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00995"></a>00995   
+<a name="l00996"></a>00996   <span class="comment">// If this is a truncate from the dest type, we can trivially eliminate it.</span>
+<a name="l00997"></a>00997   <span class="keywordflow">if</span> (isa<TruncInst>(I) && I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == Ty)
+<a name="l00998"></a>00998     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00999"></a>00999   
+<a name="l01000"></a>01000   <span class="comment">// We can't extend or shrink something that has multiple uses: doing so would</span>
+<a name="l01001"></a>01001   <span class="comment">// require duplicating the instruction in general, which isn't profitable.</span>
+<a name="l01002"></a>01002   <span class="keywordflow">if</span> (!I-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01003"></a>01003 
+<a name="l01004"></a>01004   <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="l01005"></a>01005   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">Instruction::SExt</a>:  <span class="comment">// sext(sext(x)) -> sext(x)</span>
+<a name="l01006"></a>01006   <span class="keywordflow">case</span> Instruction::ZExt:  <span class="comment">// sext(zext(x)) -> zext(x)</span>
+<a name="l01007"></a>01007   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">Instruction::Trunc</a>: <span class="comment">// sext(trunc(x)) -> trunc(x) or sext(x)</span>
+<a name="l01008"></a>01008     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01009"></a>01009   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25" title="Bitwise AND function for APInt.">Instruction::And</a>:
+<a name="l01010"></a>01010   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>:
+<a name="l01011"></a>01011   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55" title="Bitwise XOR function for APInt.">Instruction::Xor</a>:
+<a name="l01012"></a>01012   <span class="keywordflow">case</span> Instruction::Add:
+<a name="l01013"></a>01013   <span class="keywordflow">case</span> Instruction::Sub:
+<a name="l01014"></a>01014   <span class="keywordflow">case</span> Instruction::Mul:
+<a name="l01015"></a>01015     <span class="comment">// These operators can all arbitrarily be extended if their inputs can.</span>
+<a name="l01016"></a>01016     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), Ty) &&
+<a name="l01017"></a>01017            <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty);
+<a name="l01018"></a>01018       
+<a name="l01019"></a>01019   <span class="comment">//case Instruction::Shl:   TODO</span>
+<a name="l01020"></a>01020   <span class="comment">//case Instruction::LShr:  TODO</span>
+<a name="l01021"></a>01021       
+<a name="l01022"></a>01022   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1MCID.html#accb16fffd544529ed4d816a45e40f425a32dbd2c72a98eaee90e3ad5ef7b5af16">Instruction::Select</a>:
+<a name="l01023"></a>01023     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), Ty) &&
+<a name="l01024"></a>01024            <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(2), Ty);
+<a name="l01025"></a>01025       
+<a name="l01026"></a>01026   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">Instruction::PHI</a>: {
+<a name="l01027"></a>01027     <span class="comment">// We can change a phi if we can change all operands.  Note that we never</span>
+<a name="l01028"></a>01028     <span class="comment">// get into trouble with cyclic PHIs here because we only consider</span>
+<a name="l01029"></a>01029     <span class="comment">// instructions with a single use.</span>
+<a name="l01030"></a>01030     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = cast<PHINode>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l01031"></a>01031     <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="l01032"></a>01032       <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i), Ty)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01033"></a>01033     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01034"></a>01034   }
+<a name="l01035"></a>01035   <span class="keywordflow">default</span>:
+<a name="l01036"></a>01036     <span class="comment">// TODO: Can handle more cases here.</span>
+<a name="l01037"></a>01037     <span class="keywordflow">break</span>;
+<a name="l01038"></a>01038   }
+<a name="l01039"></a>01039   
+<a name="l01040"></a>01040   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01041"></a>01041 }
+<a name="l01042"></a>01042 
+<a name="l01043"></a><a class="code" href="classllvm_1_1InstCombiner.html#a5ea211ef2e2bd3fb26510e2e76ada538">01043</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a5ea211ef2e2bd3fb26510e2e76ada538">InstCombiner::visitSExt</a>(<a class="code" href="classllvm_1_1SExtInst.html" title="This class represents a sign extension of integer types.">SExtInst</a> &CI) {
+<a name="l01044"></a>01044   <span class="comment">// If this sign extend is only used by a truncate, let the truncate by</span>
+<a name="l01045"></a>01045   <span class="comment">// eliminated before we try to optimize this zext.</span>
+<a name="l01046"></a>01046   <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() && isa<TruncInst>(CI.<a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>()))
+<a name="l01047"></a>01047     <span class="keywordflow">return</span> 0;
+<a name="l01048"></a>01048   
+<a name="l01049"></a>01049   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = commonCastTransforms(CI))
+<a name="l01050"></a>01050     <span class="keywordflow">return</span> I;
+<a name="l01051"></a>01051   
+<a name="l01052"></a>01052   <span class="comment">// See if we can simplify any instructions used by the input whose sole </span>
+<a name="l01053"></a>01053   <span class="comment">// purpose is to compute bits we don't care about.</span>
+<a name="l01054"></a>01054   <span class="keywordflow">if</span> (SimplifyDemandedInstructionBits(CI))
+<a name="l01055"></a>01055     <span class="keywordflow">return</span> &CI;
+<a name="l01056"></a>01056   
+<a name="l01057"></a>01057   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l01058"></a>01058   <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcTy = Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), *DestTy = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01059"></a>01059 
+<a name="l01060"></a>01060   <span class="comment">// Attempt to extend the entire input expression tree to the destination</span>
+<a name="l01061"></a>01061   <span class="comment">// type.   Only do this if the dest type is a simple type, don't convert the</span>
+<a name="l01062"></a>01062   <span class="comment">// expression tree to something weird like i93 unless the source is also</span>
+<a name="l01063"></a>01063   <span class="comment">// strange.</span>
+<a name="l01064"></a>01064   <span class="keywordflow">if</span> ((DestTy->isVectorTy() || ShouldChangeType(SrcTy, DestTy)) &&
+<a name="l01065"></a>01065       <a class="code" href="InstCombineCasts_8cpp.html#a0001ad4269d3a92e51c5f8371b38364e">CanEvaluateSExtd</a>(Src, DestTy)) {
+<a name="l01066"></a>01066     <span class="comment">// Okay, we can transform this!  Insert the new expression now.</span>
+<a name="l01067"></a>01067     <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">"ICE: EvaluateInDifferentType converting expression type"</span>
+<a name="l01068"></a>01068           <span class="stringliteral">" to avoid sign extend: "</span> << CI);
+<a name="l01069"></a>01069     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = EvaluateInDifferentType(Src, DestTy, <span class="keyword">true</span>);
+<a name="l01070"></a>01070     assert(Res-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == DestTy);
+<a name="l01071"></a>01071 
+<a name="l01072"></a>01072     uint32_t SrcBitSize = SrcTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l01073"></a>01073     uint32_t DestBitSize = DestTy->getScalarSizeInBits();
+<a name="l01074"></a>01074 
+<a name="l01075"></a>01075     <span class="comment">// If the high bits are already filled with sign bit, just replace this</span>
+<a name="l01076"></a>01076     <span class="comment">// cast with the result.</span>
+<a name="l01077"></a>01077     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a26072ee56129fc3220771cda9f053ecb">ComputeNumSignBits</a>(Res) > DestBitSize - SrcBitSize)
+<a name="l01078"></a>01078       <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Res);
+<a name="l01079"></a>01079     
+<a name="l01080"></a>01080     <span class="comment">// We need to emit a shl + ashr to do the sign extend.</span>
+<a name="l01081"></a>01081     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ShAmt = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(DestTy, DestBitSize-SrcBitSize);
+<a name="l01082"></a>01082     <span class="keywordflow">return</span> BinaryOperator::CreateAShr(Builder->CreateShl(Res, ShAmt, <span class="stringliteral">"sext"</span>),
+<a name="l01083"></a>01083                                       ShAmt);
+<a name="l01084"></a>01084   }
+<a name="l01085"></a>01085 
+<a name="l01086"></a>01086   <span class="comment">// If this input is a trunc from our destination, then turn sext(trunc(x))</span>
+<a name="l01087"></a>01087   <span class="comment">// into shifts.</span>
+<a name="l01088"></a>01088   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a> *TI = dyn_cast<TruncInst>(Src))
+<a name="l01089"></a>01089     <span class="keywordflow">if</span> (TI->hasOneUse() && TI->getOperand(0)->getType() == DestTy) {
+<a name="l01090"></a>01090       uint32_t SrcBitSize = SrcTy-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l01091"></a>01091       uint32_t DestBitSize = DestTy->getScalarSizeInBits();
+<a name="l01092"></a>01092       
+<a name="l01093"></a>01093       <span class="comment">// We need to emit a shl + ashr to do the sign extend.</span>
+<a name="l01094"></a>01094       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ShAmt = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(DestTy, DestBitSize-SrcBitSize);
+<a name="l01095"></a>01095       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = Builder->CreateShl(TI->getOperand(0), ShAmt, <span class="stringliteral">"sext"</span>);
+<a name="l01096"></a>01096       <span class="keywordflow">return</span> BinaryOperator::CreateAShr(Res, ShAmt);
+<a name="l01097"></a>01097     }
+<a name="l01098"></a>01098 
+<a name="l01099"></a>01099   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> *ICI = dyn_cast<ICmpInst>(Src))
+<a name="l01100"></a>01100     <span class="keywordflow">return</span> transformSExtICmp(ICI, CI);
+<a name="l01101"></a>01101 
+<a name="l01102"></a>01102   <span class="comment">// If the input is a shl/ashr pair of a same constant, then this is a sign</span>
+<a name="l01103"></a>01103   <span class="comment">// extension from a smaller value.  If we could trust arbitrary bitwidth</span>
+<a name="l01104"></a>01104   <span class="comment">// integers, we could turn this into a truncate to the smaller bit and then</span>
+<a name="l01105"></a>01105   <span class="comment">// use a sext for the whole extension.  Since we don't, look deeper and check</span>
+<a name="l01106"></a>01106   <span class="comment">// for a truncate.  If the source and dest are the same type, eliminate the</span>
+<a name="l01107"></a>01107   <span class="comment">// trunc and extend and just do shifts.  For example, turn:</span>
+<a name="l01108"></a>01108   <span class="comment">//   %a = trunc i32 %i to i8</span>
+<a name="l01109"></a>01109   <span class="comment">//   %b = shl i8 %a, 6</span>
+<a name="l01110"></a>01110   <span class="comment">//   %c = ashr i8 %b, 6</span>
+<a name="l01111"></a>01111   <span class="comment">//   %d = sext i8 %c to i32</span>
+<a name="l01112"></a>01112   <span class="comment">// into:</span>
+<a name="l01113"></a>01113   <span class="comment">//   %a = shl i32 %i, 30</span>
+<a name="l01114"></a>01114   <span class="comment">//   %d = ashr i32 %a, 30</span>
+<a name="l01115"></a>01115   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = 0;
+<a name="l01116"></a>01116   <span class="comment">// TODO: Eventually this could be subsumed by EvaluateInDifferentType.</span>
+<a name="l01117"></a>01117   <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *BA = 0, *CA = 0;
+<a name="l01118"></a>01118   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Src, <a class="code" href="namespacellvm_1_1PatternMatch.html#a64153676e101a130bbbaaf91635d253a">m_AShr</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a5b844aada27c4c6fdb87146ac458c0d8" title="m_Trunc">m_Trunc</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(A)), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(BA)),
+<a name="l01119"></a>01119                         <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(CA))) &&
+<a name="l01120"></a>01120       BA == CA && A-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()) {
+<a name="l01121"></a>01121     <span class="keywordtype">unsigned</span> MidSize = Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l01122"></a>01122     <span class="keywordtype">unsigned</span> SrcDstSize = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l01123"></a>01123     <span class="keywordtype">unsigned</span> ShAmt = CA->getZExtValue()+SrcDstSize-MidSize;
+<a name="l01124"></a>01124     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *ShAmtV = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), ShAmt);
+<a name="l01125"></a>01125     A = Builder->CreateShl(A, ShAmtV, CI.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l01126"></a>01126     <span class="keywordflow">return</span> BinaryOperator::CreateAShr(A, ShAmtV);
+<a name="l01127"></a>01127   }
+<a name="l01128"></a>01128   
+<a name="l01129"></a>01129   <span class="keywordflow">return</span> 0;
+<a name="l01130"></a>01130 }
+<a name="l01131"></a>01131 
+<a name="l01132"></a>01132 <span class="comment"></span>
+<a name="l01133"></a>01133 <span class="comment">/// FitsInFPType - Return a Constant* for the specified FP constant if it fits</span>
+<a name="l01134"></a>01134 <span class="comment">/// in the specified FP type without changing its value.</span>
+<a name="l01135"></a><a class="code" href="InstCombineCasts_8cpp.html#ad7805b3730b5c1e081569451763e93ae">01135</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="InstCombineCasts_8cpp.html#ad7805b3730b5c1e081569451763e93ae">FitsInFPType</a>(<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *CFP, <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &Sem) {
+<a name="l01136"></a>01136   <span class="keywordtype">bool</span> losesInfo;
+<a name="l01137"></a>01137   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> <a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = CFP-><a class="code" href="classllvm_1_1ConstantFP.html#a0f839f7633a4709c1d89e128f49b3d43">getValueAPF</a>();
+<a name="l01138"></a>01138   (void)F.<a class="code" href="classllvm_1_1APFloat.html#a4fa2f1464bb4f645082d8aa0e0a9bc0e">convert</a>(Sem, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">APFloat::rmNearestTiesToEven</a>, &losesInfo);
+<a name="l01139"></a>01139   <span class="keywordflow">if</span> (!losesInfo)
+<a name="l01140"></a>01140     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantFP.html#a5eb8f7a5d3cfdd127ad9db2e425e14eb">ConstantFP::get</a>(CFP-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>(), <a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>);
+<a name="l01141"></a>01141   <span class="keywordflow">return</span> 0;
+<a name="l01142"></a>01142 }
+<a name="l01143"></a>01143 <span class="comment"></span>
+<a name="l01144"></a>01144 <span class="comment">/// LookThroughFPExtensions - If this is an fp extension instruction, look</span>
+<a name="l01145"></a>01145 <span class="comment">/// through it until we get the source value.</span>
+<a name="l01146"></a><a class="code" href="InstCombineCasts_8cpp.html#add636d783011465334249e1e4c64d09b">01146</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="InstCombineCasts_8cpp.html#add636d783011465334249e1e4c64d09b">LookThroughFPExtensions</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V) {
+<a name="l01147"></a>01147   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = dyn_cast<Instruction>(V))
+<a name="l01148"></a>01148     <span class="keywordflow">if</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 class="code" href="namespacellvm.html#a24e13352d9c828e3de6682f4baae88fd">Instruction::FPExt</a>)
+<a name="l01149"></a>01149       <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#add636d783011465334249e1e4c64d09b">LookThroughFPExtensions</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01150"></a>01150   
+<a name="l01151"></a>01151   <span class="comment">// If this value is a constant, return the constant in the smallest FP type</span>
+<a name="l01152"></a>01152   <span class="comment">// that can accurately represent it.  This allows us to turn</span>
+<a name="l01153"></a>01153   <span class="comment">// (float)((double)X+2.0) into x+2.0f.</span>
+<a name="l01154"></a>01154   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *CFP = dyn_cast<ConstantFP>(V)) {
+<a name="l01155"></a>01155     <span class="keywordflow">if</span> (CFP->getType() == <a class="code" href="classllvm_1_1Type.html#a489d14cb1d049f4bcc5e3e9cdaf9c54d">Type::getPPC_FP128Ty</a>(V-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()))
+<a name="l01156"></a>01156       <span class="keywordflow">return</span> V;  <span class="comment">// No constant folding of this.</span>
+<a name="l01157"></a>01157     <span class="comment">// See if the value can be truncated to half and then reextended.</span>
+<a name="l01158"></a>01158     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineCasts_8cpp.html#ad7805b3730b5c1e081569451763e93ae">FitsInFPType</a>(CFP, <a class="code" href="classllvm_1_1APFloat.html#acd77961b2028e148c829b18ceaef81c4">APFloat::IEEEhalf</a>))
+<a name="l01159"></a>01159       <span class="keywordflow">return</span> V;
+<a name="l01160"></a>01160     <span class="comment">// See if the value can be truncated to float and then reextended.</span>
+<a name="l01161"></a>01161     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineCasts_8cpp.html#ad7805b3730b5c1e081569451763e93ae">FitsInFPType</a>(CFP, <a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">APFloat::IEEEsingle</a>))
+<a name="l01162"></a>01162       <span class="keywordflow">return</span> V;
+<a name="l01163"></a>01163     <span class="keywordflow">if</span> (CFP->getType()->isDoubleTy())
+<a name="l01164"></a>01164       <span class="keywordflow">return</span> V;  <span class="comment">// Won't shrink.</span>
+<a name="l01165"></a>01165     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineCasts_8cpp.html#ad7805b3730b5c1e081569451763e93ae">FitsInFPType</a>(CFP, <a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">APFloat::IEEEdouble</a>))
+<a name="l01166"></a>01166       <span class="keywordflow">return</span> V;
+<a name="l01167"></a>01167     <span class="comment">// Don't try to shrink to various long double types.</span>
+<a name="l01168"></a>01168   }
+<a name="l01169"></a>01169   
+<a name="l01170"></a>01170   <span class="keywordflow">return</span> V;
+<a name="l01171"></a>01171 }
+<a name="l01172"></a>01172 
+<a name="l01173"></a><a class="code" href="classllvm_1_1InstCombiner.html#aa27131edaba17609df527a66357c31ee">01173</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#aa27131edaba17609df527a66357c31ee">InstCombiner::visitFPTrunc</a>(<a class="code" href="classllvm_1_1FPTruncInst.html" title="This class represents a truncation of floating point types.">FPTruncInst</a> &CI) {
+<a name="l01174"></a>01174   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = commonCastTransforms(CI))
+<a name="l01175"></a>01175     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l01176"></a>01176   
+<a name="l01177"></a>01177   <span class="comment">// If we have fptrunc(fadd (fpextend x), (fpextend y)), where x and y are</span>
+<a name="l01178"></a>01178   <span class="comment">// smaller than the destination type, we can eliminate the truncate by doing</span>
+<a name="l01179"></a>01179   <span class="comment">// the add as the smaller type.  This applies to fadd/fsub/fmul/fdiv as well</span>
+<a name="l01180"></a>01180   <span class="comment">// as many builtins (sqrt, etc).</span>
+<a name="l01181"></a>01181   <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *OpI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a>>(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01182"></a>01182   <span class="keywordflow">if</span> (OpI && OpI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) {
+<a name="l01183"></a>01183     <span class="keywordflow">switch</span> (OpI-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>()) {
+<a name="l01184"></a>01184     <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;
+<a name="l01185"></a>01185     <span class="keywordflow">case</span> Instruction::FAdd:
+<a name="l01186"></a>01186     <span class="keywordflow">case</span> Instruction::FSub:
+<a name="l01187"></a>01187     <span class="keywordflow">case</span> Instruction::FMul:
+<a name="l01188"></a>01188     <span class="keywordflow">case</span> Instruction::FDiv:
+<a name="l01189"></a>01189     <span class="keywordflow">case</span> Instruction::FRem:
+<a name="l01190"></a>01190       <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcTy = OpI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01191"></a>01191       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHSTrunc = <a class="code" href="InstCombineCasts_8cpp.html#add636d783011465334249e1e4c64d09b">LookThroughFPExtensions</a>(OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01192"></a>01192       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHSTrunc = <a class="code" href="InstCombineCasts_8cpp.html#add636d783011465334249e1e4c64d09b">LookThroughFPExtensions</a>(OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l01193"></a>01193       <span class="keywordflow">if</span> (LHSTrunc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != SrcTy && 
+<a name="l01194"></a>01194           RHSTrunc->getType() != SrcTy) {
+<a name="l01195"></a>01195         <span class="keywordtype">unsigned</span> DstSize = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>();
+<a name="l01196"></a>01196         <span class="comment">// If the source types were both smaller than the destination type of</span>
+<a name="l01197"></a>01197         <span class="comment">// the cast, do this xform.</span>
+<a name="l01198"></a>01198         <span class="keywordflow">if</span> (LHSTrunc-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() <= DstSize &&
+<a name="l01199"></a>01199             RHSTrunc->getType()->getScalarSizeInBits() <= DstSize) {
+<a name="l01200"></a>01200           LHSTrunc = Builder->CreateFPExt(LHSTrunc, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01201"></a>01201           RHSTrunc = Builder->CreateFPExt(RHSTrunc, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01202"></a>01202           <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(OpI-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>(), LHSTrunc, RHSTrunc);
+<a name="l01203"></a>01203         }
+<a name="l01204"></a>01204       }
+<a name="l01205"></a>01205       <span class="keywordflow">break</span>;  
+<a name="l01206"></a>01206     }
+<a name="l01207"></a>01207   }
+<a name="l01208"></a>01208   
+<a name="l01209"></a>01209   <span class="comment">// Fold (fptrunc (sqrt (fpext x))) -> (sqrtf x)</span>
+<a name="l01210"></a>01210   <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *<a class="code" href="namespacellvm.html#af6d6a791770bad2303c4399986979e3eae411369b2f0d8f484fec62c3291b1b51">Call</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1CallInst.html">CallInst</a>>(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01211"></a>01211   <span class="keywordflow">if</span> (Call && Call-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>() && TLI->has(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa5fe293a4388b5441e4c698d9ce6b0fdf" title="float sqrtf(float x);">LibFunc::sqrtf</a>) &&
+<a name="l01212"></a>01212       Call-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>()-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() == TLI->getName(<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fac68935baf041f4139079dbd9ddc76698" title="double sqrt(double x);">LibFunc::sqrt</a>) &&
+<a name="l01213"></a>01213       Call-><a class="code" href="classllvm_1_1CallInst.html#ac88b95273e6c753188f6a54d65548579">getNumArgOperands</a>() == 1 &&
+<a name="l01214"></a>01214       Call-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) {
+<a name="l01215"></a>01215     <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *Arg = <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>>(Call-><a class="code" href="classllvm_1_1CallInst.html#a150b33ecedbc8c7803c2db8040fbe3f8">getArgOperand</a>(0));
+<a name="l01216"></a>01216     <span class="keywordflow">if</span> (Arg && Arg-><a class="code" href="classllvm_1_1CastInst.html#adc3489e61d5f37a0e4c5589859fbccc2" title="Return the opcode of this CastInst.">getOpcode</a>() == <a class="code" href="namespacellvm.html#a24e13352d9c828e3de6682f4baae88fd">Instruction::FPExt</a> &&
+<a name="l01217"></a>01217         CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>() &&
+<a name="l01218"></a>01218         Call-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>() &&
+<a name="l01219"></a>01219         Arg-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>() &&
+<a name="l01220"></a>01220         Arg-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>()) {
+<a name="l01221"></a>01221       <a class="code" href="classllvm_1_1Function.html">Function</a> *Callee = Call-><a class="code" href="classllvm_1_1CallInst.html#a0bcd4131e1a1d92215f5385b4e16cd2e">getCalledFunction</a>();
+<a name="l01222"></a>01222       <a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> *M = CI.<a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#aca229503e4f5c83a187a6a921c625fa8">getParent</a>()-><a class="code" href="classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac">getParent</a>();
+<a name="l01223"></a>01223       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *SqrtfFunc = M-><a class="code" href="classllvm_1_1Module.html#a0d07fe352b962089c0b190e438cd4ae2">getOrInsertFunction</a>(<span class="stringliteral">"sqrtf"</span>, 
+<a name="l01224"></a>01224                                                    Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>(),
+<a name="l01225"></a>01225                                                    Builder->getFloatTy(),
+<a name="l01226"></a>01226                                                    Builder->getFloatTy(),
+<a name="l01227"></a>01227                                                    NULL);
+<a name="l01228"></a>01228       <a class="code" href="classllvm_1_1CallInst.html">CallInst</a> *ret = <a class="code" href="classllvm_1_1CallInst.html#a861226dd056dd2438da26760b8e7a9a0">CallInst::Create</a>(SqrtfFunc, Arg-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l01229"></a>01229                                        <span class="stringliteral">"sqrtfcall"</span>);
+<a name="l01230"></a>01230       ret-><a class="code" href="classllvm_1_1CallInst.html#acb0b320e58e372aa804b365393f79b9b">setAttributes</a>(Callee-><a class="code" href="classllvm_1_1Function.html#a04b883953d9706a93075c90c09fe1059">getAttributes</a>());
+<a name="l01231"></a>01231       
+<a name="l01232"></a>01232       
+<a name="l01233"></a>01233       <span class="comment">// Remove the old Call.  With -fmath-errno, it won't get marked readnone.</span>
+<a name="l01234"></a>01234       ReplaceInstUsesWith(*Call, <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(Call-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l01235"></a>01235       EraseInstFromFunction(*Call);
+<a name="l01236"></a>01236       <span class="keywordflow">return</span> ret;
+<a name="l01237"></a>01237     }
+<a name="l01238"></a>01238   }
+<a name="l01239"></a>01239   
+<a name="l01240"></a>01240   <span class="keywordflow">return</span> 0;
+<a name="l01241"></a>01241 }
+<a name="l01242"></a>01242 
+<a name="l01243"></a><a class="code" href="classllvm_1_1InstCombiner.html#ae52ecb2fe536b5b853902e15db3c8062">01243</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#ae52ecb2fe536b5b853902e15db3c8062">InstCombiner::visitFPExt</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> &CI) {
+<a name="l01244"></a>01244   <span class="keywordflow">return</span> commonCastTransforms(CI);
+<a name="l01245"></a>01245 }
+<a name="l01246"></a>01246 
+<a name="l01247"></a><a class="code" href="classllvm_1_1InstCombiner.html#af1fe6944d91c157469e8f5529e835b17">01247</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#af1fe6944d91c157469e8f5529e835b17">InstCombiner::visitFPToUI</a>(<a class="code" href="classllvm_1_1FPToUIInst.html" title="This class represents a cast from floating point to unsigned integer.">FPToUIInst</a> &FI) {
+<a name="l01248"></a>01248   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OpI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(FI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01249"></a>01249   <span class="keywordflow">if</span> (OpI == 0)
+<a name="l01250"></a>01250     <span class="keywordflow">return</span> commonCastTransforms(FI);
+<a name="l01251"></a>01251 
+<a name="l01252"></a>01252   <span class="comment">// fptoui(uitofp(X)) --> X</span>
+<a name="l01253"></a>01253   <span class="comment">// fptoui(sitofp(X)) --> X</span>
+<a name="l01254"></a>01254   <span class="comment">// This is safe if the intermediate type has enough bits in its mantissa to</span>
+<a name="l01255"></a>01255   <span class="comment">// accurately represent all values of X.  For example, do not do this with</span>
+<a name="l01256"></a>01256   <span class="comment">// i64->float->i64.  This is also safe for sitofp case, because any negative</span>
+<a name="l01257"></a>01257   <span class="comment">// 'X' value would cause an undefined result for the fptoui. </span>
+<a name="l01258"></a>01258   <span class="keywordflow">if</span> ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
+<a name="l01259"></a>01259       OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == FI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() &&
+<a name="l01260"></a>01260       (int)FI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() < <span class="comment">/*extra bit for sign */</span>
+<a name="l01261"></a>01261                     OpI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#afd69a04ba20c2085dec90d69fb9abe64">getFPMantissaWidth</a>())
+<a name="l01262"></a>01262     <span class="keywordflow">return</span> ReplaceInstUsesWith(FI, OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01263"></a>01263 
+<a name="l01264"></a>01264   <span class="keywordflow">return</span> commonCastTransforms(FI);
+<a name="l01265"></a>01265 }
+<a name="l01266"></a>01266 
+<a name="l01267"></a><a class="code" href="classllvm_1_1InstCombiner.html#a7c7b701b8d17f33120903f28cde461bb">01267</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a7c7b701b8d17f33120903f28cde461bb">InstCombiner::visitFPToSI</a>(<a class="code" href="classllvm_1_1FPToSIInst.html" title="This class represents a cast from floating point to signed integer.">FPToSIInst</a> &FI) {
+<a name="l01268"></a>01268   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *OpI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(FI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01269"></a>01269   <span class="keywordflow">if</span> (OpI == 0)
+<a name="l01270"></a>01270     <span class="keywordflow">return</span> commonCastTransforms(FI);
+<a name="l01271"></a>01271   
+<a name="l01272"></a>01272   <span class="comment">// fptosi(sitofp(X)) --> X</span>
+<a name="l01273"></a>01273   <span class="comment">// fptosi(uitofp(X)) --> X</span>
+<a name="l01274"></a>01274   <span class="comment">// This is safe if the intermediate type has enough bits in its mantissa to</span>
+<a name="l01275"></a>01275   <span class="comment">// accurately represent all values of X.  For example, do not do this with</span>
+<a name="l01276"></a>01276   <span class="comment">// i64->float->i64.  This is also safe for sitofp case, because any negative</span>
+<a name="l01277"></a>01277   <span class="comment">// 'X' value would cause an undefined result for the fptoui. </span>
+<a name="l01278"></a>01278   <span class="keywordflow">if</span> ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
+<a name="l01279"></a>01279       OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == FI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() &&
+<a name="l01280"></a>01280       (int)FI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() <=
+<a name="l01281"></a>01281                     OpI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#afd69a04ba20c2085dec90d69fb9abe64">getFPMantissaWidth</a>())
+<a name="l01282"></a>01282     <span class="keywordflow">return</span> ReplaceInstUsesWith(FI, OpI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0));
+<a name="l01283"></a>01283   
+<a name="l01284"></a>01284   <span class="keywordflow">return</span> commonCastTransforms(FI);
+<a name="l01285"></a>01285 }
+<a name="l01286"></a>01286 
+<a name="l01287"></a><a class="code" href="classllvm_1_1InstCombiner.html#a72c98985ea3821c7d288bc79717cfeb6">01287</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a72c98985ea3821c7d288bc79717cfeb6">InstCombiner::visitUIToFP</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> &CI) {
+<a name="l01288"></a>01288   <span class="keywordflow">return</span> commonCastTransforms(CI);
+<a name="l01289"></a>01289 }
+<a name="l01290"></a>01290 
+<a name="l01291"></a><a class="code" href="classllvm_1_1InstCombiner.html#a1a9b04d6f6ffde1d4e58e48848d4178a">01291</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a1a9b04d6f6ffde1d4e58e48848d4178a">InstCombiner::visitSIToFP</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> &CI) {
+<a name="l01292"></a>01292   <span class="keywordflow">return</span> commonCastTransforms(CI);
+<a name="l01293"></a>01293 }
+<a name="l01294"></a>01294 
+<a name="l01295"></a><a class="code" href="classllvm_1_1InstCombiner.html#a0a4568129d1dec583a22775432df4717">01295</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a0a4568129d1dec583a22775432df4717">InstCombiner::visitIntToPtr</a>(<a class="code" href="classllvm_1_1IntToPtrInst.html" title="This class represents a cast from an integer to a pointer.">IntToPtrInst</a> &CI) {
+<a name="l01296"></a>01296   <span class="comment">// If the source integer type is not the intptr_t type for this target, do a</span>
+<a name="l01297"></a>01297   <span class="comment">// trunc or zext to the intptr_t type, then inttoptr of it.  This allows the</span>
+<a name="l01298"></a>01298   <span class="comment">// cast to be exposed to other transforms.</span>
+<a name="l01299"></a>01299   <span class="keywordflow">if</span> (TD) {
+<a name="l01300"></a>01300     <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() >
+<a name="l01301"></a>01301         TD->getPointerSizeInBits()) {
+<a name="l01302"></a>01302       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *P = Builder->CreateTrunc(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l01303"></a>01303                                       TD->getIntPtrType(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l01304"></a>01304       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1IntToPtrInst.html" title="This class represents a cast from an integer to a pointer.">IntToPtrInst</a>(P, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01305"></a>01305     }
+<a name="l01306"></a>01306     <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() <
+<a name="l01307"></a>01307         TD->getPointerSizeInBits()) {
+<a name="l01308"></a>01308       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *P = Builder->CreateZExt(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l01309"></a>01309                                      TD->getIntPtrType(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l01310"></a>01310       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1IntToPtrInst.html" title="This class represents a cast from an integer to a pointer.">IntToPtrInst</a>(P, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01311"></a>01311     }
+<a name="l01312"></a>01312   }
+<a name="l01313"></a>01313   
+<a name="l01314"></a>01314   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = commonCastTransforms(CI))
+<a name="l01315"></a>01315     <span class="keywordflow">return</span> I;
+<a name="l01316"></a>01316 
+<a name="l01317"></a>01317   <span class="keywordflow">return</span> 0;
+<a name="l01318"></a>01318 }
+<a name="l01319"></a>01319 <span class="comment"></span>
+<a name="l01320"></a>01320 <span class="comment">/// @brief Implement the transforms for cast of pointer (bitcast/ptrtoint)</span>
+<a name="l01321"></a><a class="code" href="classllvm_1_1InstCombiner.html#a659f4270ad408664d68e699bd1e603e3">01321</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a659f4270ad408664d68e699bd1e603e3" title="Implement the transforms for cast of pointer (bitcast/ptrtoint)">InstCombiner::commonPointerCastTransforms</a>(<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> &CI) {
+<a name="l01322"></a>01322   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l01323"></a>01323   
+<a name="l01324"></a>01324   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *GEP = dyn_cast<GetElementPtrInst>(Src)) {
+<a name="l01325"></a>01325     <span class="comment">// If casting the result of a getelementptr instruction with no offset, turn</span>
+<a name="l01326"></a>01326     <span class="comment">// this into a cast of the original pointer!</span>
+<a name="l01327"></a>01327     <span class="keywordflow">if</span> (GEP->hasAllZeroIndices()) {
+<a name="l01328"></a>01328       <span class="comment">// Changing the cast operand is usually not a good idea but it is safe</span>
+<a name="l01329"></a>01329       <span class="comment">// here because the pointer operand is being replaced with another </span>
+<a name="l01330"></a>01330       <span class="comment">// pointer operand so the opcode doesn't need to change.</span>
+<a name="l01331"></a>01331       Worklist.Add(GEP);
+<a name="l01332"></a>01332       CI.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(0, GEP->getOperand(0));
+<a name="l01333"></a>01333       <span class="keywordflow">return</span> &CI;
+<a name="l01334"></a>01334     }
+<a name="l01335"></a>01335     
+<a name="l01336"></a>01336     <span class="comment">// If the GEP has a single use, and the base pointer is a bitcast, and the</span>
+<a name="l01337"></a>01337     <span class="comment">// GEP computes a constant offset, see if we can convert these three</span>
+<a name="l01338"></a>01338     <span class="comment">// instructions into fewer.  This typically happens with unions and other</span>
+<a name="l01339"></a>01339     <span class="comment">// non-type-safe code.</span>
+<a name="l01340"></a>01340     <span class="keywordflow">if</span> (TD && GEP->hasOneUse() && isa<BitCastInst>(GEP->getOperand(0)) &&
+<a name="l01341"></a>01341         GEP->hasAllConstantIndices()) {
+<a name="l01342"></a>01342       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value*, 8></a> Ops(GEP->idx_begin(), GEP->idx_end());
+<a name="l01343"></a>01343       <a class="code" href="classint64__t.html">int64_t</a> Offset = TD->getIndexedOffset(GEP->getPointerOperandType(), Ops);
+<a name="l01344"></a>01344 
+<a name="l01345"></a>01345       <span class="comment">// Get the base pointer input of the bitcast, and the type it points to.</span>
+<a name="l01346"></a>01346       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OrigBase = cast<BitCastInst>(GEP->getOperand(0))->getOperand(0);
+<a name="l01347"></a>01347       <a class="code" href="classllvm_1_1Type.html">Type</a> *GEPIdxTy =
+<a name="l01348"></a>01348       cast<PointerType>(OrigBase-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())->getElementType();
+<a name="l01349"></a>01349       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value*, 8></a> NewIndices;
+<a name="l01350"></a>01350       <span class="keywordflow">if</span> (FindElementAtOffset(GEPIdxTy, Offset, NewIndices)) {
+<a name="l01351"></a>01351         <span class="comment">// If we were able to index down into an element, create the GEP</span>
+<a name="l01352"></a>01352         <span class="comment">// and bitcast the result.  This eliminates one bitcast, potentially</span>
+<a name="l01353"></a>01353         <span class="comment">// two.</span>
+<a name="l01354"></a>01354         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NGEP = cast<GEPOperator>(GEP)->isInBounds() ?
+<a name="l01355"></a>01355         Builder->CreateInBoundsGEP(OrigBase, NewIndices) :
+<a name="l01356"></a>01356         Builder->CreateGEP(OrigBase, NewIndices);
+<a name="l01357"></a>01357         NGEP-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(GEP);
+<a name="l01358"></a>01358         
+<a name="l01359"></a>01359         <span class="keywordflow">if</span> (isa<BitCastInst>(CI))
+<a name="l01360"></a>01360           <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a>(NGEP, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01361"></a>01361         assert(isa<PtrToIntInst>(CI));
+<a name="l01362"></a>01362         <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1PtrToIntInst.html" title="This class represents a cast from a pointer to an integer.">PtrToIntInst</a>(NGEP, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01363"></a>01363       }      
+<a name="l01364"></a>01364     }
+<a name="l01365"></a>01365   }
+<a name="l01366"></a>01366   
+<a name="l01367"></a>01367   <span class="keywordflow">return</span> commonCastTransforms(CI);
+<a name="l01368"></a>01368 }
+<a name="l01369"></a>01369 
+<a name="l01370"></a><a class="code" href="classllvm_1_1InstCombiner.html#adaa3691a486fa468bbbacc7882b8e9dd">01370</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#adaa3691a486fa468bbbacc7882b8e9dd">InstCombiner::visitPtrToInt</a>(<a class="code" href="classllvm_1_1PtrToIntInst.html" title="This class represents a cast from a pointer to an integer.">PtrToIntInst</a> &CI) {
+<a name="l01371"></a>01371   <span class="comment">// If the destination integer type is not the intptr_t type for this target,</span>
+<a name="l01372"></a>01372   <span class="comment">// do a ptrtoint to intptr_t then do a trunc or zext.  This allows the cast</span>
+<a name="l01373"></a>01373   <span class="comment">// to be exposed to other transforms.</span>
+<a name="l01374"></a>01374   <span class="keywordflow">if</span> (TD) {
+<a name="l01375"></a>01375     <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() < TD->getPointerSizeInBits()) {
+<a name="l01376"></a>01376       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *P = Builder->CreatePtrToInt(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l01377"></a>01377                                          TD->getIntPtrType(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l01378"></a>01378       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1TruncInst.html" title="This class represents a truncation of integer types.">TruncInst</a>(P, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01379"></a>01379     }
+<a name="l01380"></a>01380     <span class="keywordflow">if</span> (CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad979b3c1bc975ee23810e3018ffe951b">getScalarSizeInBits</a>() > TD->getPointerSizeInBits()) {
+<a name="l01381"></a>01381       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *P = Builder->CreatePtrToInt(CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0),
+<a name="l01382"></a>01382                                          TD->getIntPtrType(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l01383"></a>01383       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a>(P, CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01384"></a>01384     }
+<a name="l01385"></a>01385   }
+<a name="l01386"></a>01386   
+<a name="l01387"></a>01387   <span class="keywordflow">return</span> commonPointerCastTransforms(CI);
+<a name="l01388"></a>01388 }
+<a name="l01389"></a>01389 <span class="comment"></span>
+<a name="l01390"></a>01390 <span class="comment">/// OptimizeVectorResize - This input value (which is known to have vector type)</span>
+<a name="l01391"></a>01391 <span class="comment">/// is being zero extended or truncated to the specified vector type.  Try to</span>
+<a name="l01392"></a>01392 <span class="comment">/// replace it with a shuffle (and vector/vector bitcast) if possible.</span>
+<a name="l01393"></a>01393 <span class="comment">///</span>
+<a name="l01394"></a>01394 <span class="comment">/// The source and destination vector types may have different element types.</span>
+<a name="l01395"></a><a class="code" href="InstCombineCasts_8cpp.html#acb5a7eff32dd4405f0e795ba98bdbc4e">01395</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="InstCombineCasts_8cpp.html#acb5a7eff32dd4405f0e795ba98bdbc4e">OptimizeVectorResize</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InVal, <a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *DestTy,
+<a name="l01396"></a>01396                                          <a class="code" href="classllvm_1_1InstCombiner.html" title="InstCombiner - The -instcombine pass.">InstCombiner</a> &IC) {
+<a name="l01397"></a>01397   <span class="comment">// We can only do this optimization if the output is a multiple of the input</span>
+<a name="l01398"></a>01398   <span class="comment">// element size, or the input is a multiple of the output element size.</span>
+<a name="l01399"></a>01399   <span class="comment">// Convert the input type to have the same element type as the output.</span>
+<a name="l01400"></a>01400   <a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *SrcTy = cast<VectorType>(InVal-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01401"></a>01401   
+<a name="l01402"></a>01402   <span class="keywordflow">if</span> (SrcTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>() != DestTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>()) {
+<a name="l01403"></a>01403     <span class="comment">// The input types don't need to be identical, but for now they must be the</span>
+<a name="l01404"></a>01404     <span class="comment">// same size.  There is no specific reason we couldn't handle things like</span>
+<a name="l01405"></a>01405     <span class="comment">// <4 x i16> -> <4 x i32> by bitcasting to <2 x i32> but haven't gotten</span>
+<a name="l01406"></a>01406     <span class="comment">// there yet. </span>
+<a name="l01407"></a>01407     <span class="keywordflow">if</span> (SrcTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() !=
+<a name="l01408"></a>01408         DestTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>())
+<a name="l01409"></a>01409       <span class="keywordflow">return</span> 0;
+<a name="l01410"></a>01410     
+<a name="l01411"></a>01411     SrcTy = <a class="code" href="classllvm_1_1VectorType.html#ab43657ed1abe2e2ed3a6a394f233ebd0">VectorType::get</a>(DestTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>(), SrcTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>());
+<a name="l01412"></a>01412     InVal = IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a87b363b9dad9f5040ea7e29ea9e60ff5">CreateBitCast</a>(InVal, SrcTy);
+<a name="l01413"></a>01413   }
+<a name="l01414"></a>01414   
+<a name="l01415"></a>01415   <span class="comment">// Now that the element types match, get the shuffle mask and RHS of the</span>
+<a name="l01416"></a>01416   <span class="comment">// shuffle to use, which depends on whether we're increasing or decreasing the</span>
+<a name="l01417"></a>01417   <span class="comment">// size of the input.</span>
+<a name="l01418"></a>01418   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<uint32_t, 16></a> ShuffleMask;
+<a name="l01419"></a>01419   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>;
+<a name="l01420"></a>01420   
+<a name="l01421"></a>01421   <span class="keywordflow">if</span> (SrcTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>() > DestTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>()) {
+<a name="l01422"></a>01422     <span class="comment">// If we're shrinking the number of elements, just shuffle in the low</span>
+<a name="l01423"></a>01423     <span class="comment">// elements from the input and use undef as the second shuffle input.</span>
+<a name="l01424"></a>01424     V2 = <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(SrcTy);
+<a name="l01425"></a>01425     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = DestTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>(); i != e; ++i)
+<a name="l01426"></a>01426       ShuffleMask.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(i);
+<a name="l01427"></a>01427     
+<a name="l01428"></a>01428   } <span class="keywordflow">else</span> {
+<a name="l01429"></a>01429     <span class="comment">// If we're increasing the number of elements, shuffle in all of the</span>
+<a name="l01430"></a>01430     <span class="comment">// elements from InVal and fill the rest of the result elements with zeros</span>
+<a name="l01431"></a>01431     <span class="comment">// from a constant zero.</span>
+<a name="l01432"></a>01432     V2 = <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(SrcTy);
+<a name="l01433"></a>01433     <span class="keywordtype">unsigned</span> SrcElts = SrcTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>();
+<a name="l01434"></a>01434     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = SrcElts; i != e; ++i)
+<a name="l01435"></a>01435       ShuffleMask.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(i);
+<a name="l01436"></a>01436 
+<a name="l01437"></a>01437     <span class="comment">// The excess elements reference the first element of the zero input.</span>
+<a name="l01438"></a>01438     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = DestTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>()-SrcElts; i != e; ++i)
+<a name="l01439"></a>01439       ShuffleMask.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(SrcElts);
+<a name="l01440"></a>01440   }
+<a name="l01441"></a>01441   
+<a name="l01442"></a>01442   <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ShuffleVectorInst.html">ShuffleVectorInst</a>(InVal, V2,
+<a name="l01443"></a>01443                                <a class="code" href="classllvm_1_1ConstantDataVector.html#ab8b693ee2fbb4c4173fa2725c110021b">ConstantDataVector::get</a>(V2-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>(),
+<a name="l01444"></a>01444                                                        ShuffleMask));
+<a name="l01445"></a>01445 }
+<a name="l01446"></a>01446 
+<a name="l01447"></a><a class="code" href="InstCombineCasts_8cpp.html#a8efab72b40fc7836709221d3e97139c6">01447</a> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineCasts_8cpp.html#a8efab72b40fc7836709221d3e97139c6">isMultipleOfTypeSize</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l01448"></a>01448   <span class="keywordflow">return</span> Value % Ty-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() == 0;
+<a name="l01449"></a>01449 }
+<a name="l01450"></a>01450 
+<a name="l01451"></a><a class="code" href="InstCombineCasts_8cpp.html#ac8947451998676abcce5452a1a8f5848">01451</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="InstCombineCasts_8cpp.html#ac8947451998676abcce5452a1a8f5848">getTypeSizeIndex</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l01452"></a>01452   <span class="keywordflow">return</span> Value / Ty-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l01453"></a>01453 }
+<a name="l01454"></a>01454 <span class="comment"></span>
+<a name="l01455"></a>01455 <span class="comment">/// CollectInsertionElements - V is a value which is inserted into a vector of</span>
+<a name="l01456"></a>01456 <span class="comment">/// VecEltTy.  Look through the value to see if we can decompose it into</span>
+<a name="l01457"></a>01457 <span class="comment">/// insertions into the vector.  See the example in the comment for</span>
+<a name="l01458"></a>01458 <span class="comment">/// OptimizeIntegerToVectorInsertions for the pattern this handles.</span>
+<a name="l01459"></a>01459 <span class="comment">/// The type of V is always a non-zero multiple of VecEltTy's size.</span>
+<a name="l01460"></a>01460 <span class="comment">///</span>
+<a name="l01461"></a>01461 <span class="comment">/// This returns false if the pattern can't be matched or true if it can,</span>
+<a name="l01462"></a>01462 <span class="comment">/// filling in Elements with the elements found here.</span>
+<a name="l01463"></a><a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">01463</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <span class="keywordtype">unsigned</span> ElementIndex,
+<a name="l01464"></a>01464                                      <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Value*></a> &Elements,
+<a name="l01465"></a>01465                                      <a class="code" href="classllvm_1_1Type.html">Type</a> *VecEltTy) {
+<a name="l01466"></a>01466   <span class="comment">// Undef values never contribute useful bits to the result.</span>
+<a name="l01467"></a>01467   <span class="keywordflow">if</span> (isa<UndefValue>(V)) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01468"></a>01468   
+<a name="l01469"></a>01469   <span class="comment">// If we got down to a value of the right type, we win, try inserting into the</span>
+<a name="l01470"></a>01470   <span class="comment">// right element.</span>
+<a name="l01471"></a>01471   <span class="keywordflow">if</span> (V-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == VecEltTy) {
+<a name="l01472"></a>01472     <span class="comment">// Inserting null doesn't actually insert any elements.</span>
+<a name="l01473"></a>01473     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<Constant>(V))
+<a name="l01474"></a>01474       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->isNullValue())
+<a name="l01475"></a>01475         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01476"></a>01476     
+<a name="l01477"></a>01477     <span class="comment">// Fail if multiple elements are inserted into this slot.</span>
+<a name="l01478"></a>01478     <span class="keywordflow">if</span> (ElementIndex >= Elements.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>() || Elements[ElementIndex] != 0)
+<a name="l01479"></a>01479       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01480"></a>01480     
+<a name="l01481"></a>01481     Elements[ElementIndex] = V;
+<a name="l01482"></a>01482     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01483"></a>01483   }
+<a name="l01484"></a>01484   
+<a name="l01485"></a>01485   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<Constant>(V)) {
+<a name="l01486"></a>01486     <span class="comment">// Figure out the # elements this provides, and bitcast it or slice it up</span>
+<a name="l01487"></a>01487     <span class="comment">// as required.</span>
+<a name="l01488"></a>01488     <span class="keywordtype">unsigned</span> NumElts = <a class="code" href="InstCombineCasts_8cpp.html#ac8947451998676abcce5452a1a8f5848">getTypeSizeIndex</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getType()->getPrimitiveSizeInBits(),
+<a name="l01489"></a>01489                                         VecEltTy);
+<a name="l01490"></a>01490     <span class="comment">// If the constant is the size of a vector element, we just need to bitcast</span>
+<a name="l01491"></a>01491     <span class="comment">// it to the right type so it gets properly inserted.</span>
+<a name="l01492"></a>01492     <span class="keywordflow">if</span> (NumElts == 1)
+<a name="l01493"></a>01493       <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(<a class="code" href="classllvm_1_1ConstantExpr.html#aba93ec4079f8d709a1d5b4745310782e">ConstantExpr::getBitCast</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, VecEltTy),
+<a name="l01494"></a>01494                                       ElementIndex, Elements, VecEltTy);
+<a name="l01495"></a>01495     
+<a name="l01496"></a>01496     <span class="comment">// Okay, this is a constant that covers multiple elements.  Slice it up into</span>
+<a name="l01497"></a>01497     <span class="comment">// pieces and insert each element-sized piece into the vector.</span>
+<a name="l01498"></a>01498     <span class="keywordflow">if</span> (!isa<IntegerType>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getType()))
+<a name="l01499"></a>01499       <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = <a class="code" href="classllvm_1_1ConstantExpr.html#aba93ec4079f8d709a1d5b4745310782e">ConstantExpr::getBitCast</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, <a class="code" href="classllvm_1_1IntegerType.html#a14f7b4f1aed38192fb6b7772eb506bdb" title="Get or create an IntegerType instance.">IntegerType::get</a>(V-><a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>(),
+<a name="l01500"></a>01500                                        <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getType()->getPrimitiveSizeInBits()));
+<a name="l01501"></a>01501     <span class="keywordtype">unsigned</span> ElementSize = VecEltTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l01502"></a>01502     <a class="code" href="classllvm_1_1Type.html">Type</a> *ElementIntTy = <a class="code" href="classllvm_1_1IntegerType.html#a14f7b4f1aed38192fb6b7772eb506bdb" title="Get or create an IntegerType instance.">IntegerType::get</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getContext(), ElementSize);
+<a name="l01503"></a>01503     
+<a name="l01504"></a>01504     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumElts; ++i) {
+<a name="l01505"></a>01505       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *Piece = <a class="code" href="classllvm_1_1ConstantExpr.html#aab1f107496b17acc1bc5fdcdb2903b38">ConstantExpr::getLShr</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getType(),
+<a name="l01506"></a>01506                                                                i*ElementSize));
+<a name="l01507"></a>01507       Piece = <a class="code" href="classllvm_1_1ConstantExpr.html#aca5cab6b8d2be24d0c857cc4a831feec">ConstantExpr::getTrunc</a>(Piece, ElementIntTy);
+<a name="l01508"></a>01508       <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(Piece, ElementIndex+i, Elements, VecEltTy))
+<a name="l01509"></a>01509         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01510"></a>01510     }
+<a name="l01511"></a>01511     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01512"></a>01512   }
+<a name="l01513"></a>01513   
+<a name="l01514"></a>01514   <span class="keywordflow">if</span> (!V-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01515"></a>01515   
+<a name="l01516"></a>01516   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(V);
+<a name="l01517"></a>01517   <span class="keywordflow">if</span> (I == 0) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01518"></a>01518   <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="l01519"></a>01519   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Unhandled case.</span>
+<a name="l01520"></a>01520   <span class="keywordflow">case</span> Instruction::BitCast:
+<a name="l01521"></a>01521     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), ElementIndex,
+<a name="l01522"></a>01522                                     Elements, VecEltTy);  
+<a name="l01523"></a>01523   <span class="keywordflow">case</span> Instruction::ZExt:
+<a name="l01524"></a>01524     <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a8efab72b40fc7836709221d3e97139c6">isMultipleOfTypeSize</a>(
+<a name="l01525"></a>01525                           I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>(),
+<a name="l01526"></a>01526                               VecEltTy))
+<a name="l01527"></a>01527       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01528"></a>01528     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), ElementIndex,
+<a name="l01529"></a>01529                                     Elements, VecEltTy);  
+<a name="l01530"></a>01530   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39" title="Bitwise OR function for APInt.">Instruction::Or</a>:
+<a name="l01531"></a>01531     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), ElementIndex,
+<a name="l01532"></a>01532                                     Elements, VecEltTy) &&
+<a name="l01533"></a>01533            <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), ElementIndex,
+<a name="l01534"></a>01534                                     Elements, VecEltTy);
+<a name="l01535"></a>01535   <span class="keywordflow">case</span> Instruction::Shl: {
+<a name="l01536"></a>01536     <span class="comment">// Must be shifting by a constant that is a multiple of the element size.</span>
+<a name="l01537"></a>01537     <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a>>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l01538"></a>01538     <span class="keywordflow">if</span> (CI == 0) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01539"></a>01539     <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a8efab72b40fc7836709221d3e97139c6">isMultipleOfTypeSize</a>(CI-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>(), VecEltTy)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01540"></a>01540     <span class="keywordtype">unsigned</span> IndexShift = <a class="code" href="InstCombineCasts_8cpp.html#ac8947451998676abcce5452a1a8f5848">getTypeSizeIndex</a>(CI-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>(), VecEltTy);
+<a name="l01541"></a>01541     
+<a name="l01542"></a>01542     <span class="keywordflow">return</span> <a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), ElementIndex+IndexShift,
+<a name="l01543"></a>01543                                     Elements, VecEltTy);
+<a name="l01544"></a>01544   }
+<a name="l01545"></a>01545       
+<a name="l01546"></a>01546   }
+<a name="l01547"></a>01547 }
+<a name="l01548"></a>01548 
+<a name="l01549"></a>01549 <span class="comment"></span>
+<a name="l01550"></a>01550 <span class="comment">/// OptimizeIntegerToVectorInsertions - If the input is an 'or' instruction, we</span>
+<a name="l01551"></a>01551 <span class="comment">/// may be doing shifts and ors to assemble the elements of the vector manually.</span>
+<a name="l01552"></a>01552 <span class="comment">/// Try to rip the code out and replace it with insertelements.  This is to</span>
+<a name="l01553"></a>01553 <span class="comment">/// optimize code like this:</span>
+<a name="l01554"></a>01554 <span class="comment">///</span>
+<a name="l01555"></a>01555 <span class="comment">///    %tmp37 = bitcast float %inc to i32</span>
+<a name="l01556"></a>01556 <span class="comment">///    %tmp38 = zext i32 %tmp37 to i64</span>
+<a name="l01557"></a>01557 <span class="comment">///    %tmp31 = bitcast float %inc5 to i32</span>
+<a name="l01558"></a>01558 <span class="comment">///    %tmp32 = zext i32 %tmp31 to i64</span>
+<a name="l01559"></a>01559 <span class="comment">///    %tmp33 = shl i64 %tmp32, 32</span>
+<a name="l01560"></a>01560 <span class="comment">///    %ins35 = or i64 %tmp33, %tmp38</span>
+<a name="l01561"></a>01561 <span class="comment">///    %tmp43 = bitcast i64 %ins35 to <2 x float></span>
+<a name="l01562"></a>01562 <span class="comment">///</span>
+<a name="l01563"></a>01563 <span class="comment">/// Into two insertelements that do "buildvector{%inc, %inc5}".</span>
+<a name="l01564"></a><a class="code" href="InstCombineCasts_8cpp.html#a534902f6fff593cf4b50232cc58c580a">01564</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="InstCombineCasts_8cpp.html#a534902f6fff593cf4b50232cc58c580a">OptimizeIntegerToVectorInsertions</a>(<a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> &CI,
+<a name="l01565"></a>01565                                                 <a class="code" href="classllvm_1_1InstCombiner.html" title="InstCombiner - The -instcombine pass.">InstCombiner</a> &IC) {
+<a name="l01566"></a>01566   <a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *DestVecTy = cast<VectorType>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01567"></a>01567   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IntInput = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l01568"></a>01568 
+<a name="l01569"></a>01569   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value*, 8></a> Elements(DestVecTy-><a class="code" href="classllvm_1_1VectorType.html#a580510fa692dccfb26d0e967d8f164e7" title="Return the number of elements in the Vector type.">getNumElements</a>());
+<a name="l01570"></a>01570   <span class="keywordflow">if</span> (!<a class="code" href="InstCombineCasts_8cpp.html#a1b1a61e6398c8150ec8e3427216bd943">CollectInsertionElements</a>(IntInput, 0, Elements,
+<a name="l01571"></a>01571                                 DestVecTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>()))
+<a name="l01572"></a>01572     <span class="keywordflow">return</span> 0;
+<a name="l01573"></a>01573 
+<a name="l01574"></a>01574   <span class="comment">// If we succeeded, we know that all of the element are specified by Elements</span>
+<a name="l01575"></a>01575   <span class="comment">// or are zero if Elements has a null entry.  Recast this as a set of</span>
+<a name="l01576"></a>01576   <span class="comment">// insertions.</span>
+<a name="l01577"></a>01577   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Result = <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01578"></a>01578   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Elements.size(); i != e; ++i) {
+<a name="l01579"></a>01579     <span class="keywordflow">if</span> (Elements[i] == 0) <span class="keywordflow">continue</span>;  <span class="comment">// Unset element.</span>
+<a name="l01580"></a>01580     
+<a name="l01581"></a>01581     Result = IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a40e48df9196b3c092096138cd9af8465">CreateInsertElement</a>(Result, Elements[i],
+<a name="l01582"></a>01582                                              IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(i));
+<a name="l01583"></a>01583   }
+<a name="l01584"></a>01584   
+<a name="l01585"></a>01585   <span class="keywordflow">return</span> Result;
+<a name="l01586"></a>01586 }
+<a name="l01587"></a>01587 
+<a name="l01588"></a>01588 <span class="comment"></span>
+<a name="l01589"></a>01589 <span class="comment">/// OptimizeIntToFloatBitCast - See if we can optimize an integer->float/double</span>
+<a name="l01590"></a>01590 <span class="comment">/// bitcast.  The various long double bitcasts can't get in here.</span>
+<a name="l01591"></a><a class="code" href="InstCombineCasts_8cpp.html#ac50270ed32cec6a5d8ec24e524846b13">01591</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="InstCombineCasts_8cpp.html#ac50270ed32cec6a5d8ec24e524846b13">OptimizeIntToFloatBitCast</a>(<a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> &CI,<a class="code" href="classllvm_1_1InstCombiner.html" title="InstCombiner - The -instcombine pass.">InstCombiner</a> &IC){
+<a name="l01592"></a>01592   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l01593"></a>01593   <a class="code" href="classllvm_1_1Type.html">Type</a> *DestTy = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01594"></a>01594 
+<a name="l01595"></a>01595   <span class="comment">// If this is a bitcast from int to float, check to see if the int is an</span>
+<a name="l01596"></a>01596   <span class="comment">// extraction from a vector.</span>
+<a name="l01597"></a>01597   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *VecInput = 0;
+<a name="l01598"></a>01598   <span class="comment">// bitcast(trunc(bitcast(somevector)))</span>
+<a name="l01599"></a>01599   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Src, <a class="code" href="namespacellvm_1_1PatternMatch.html#a5b844aada27c4c6fdb87146ac458c0d8" title="m_Trunc">m_Trunc</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ac0467ca7fad871738b10db95feb40dad" title="m_BitCast">m_BitCast</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(VecInput)))) &&
+<a name="l01600"></a>01600       isa<VectorType>(VecInput-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())) {
+<a name="l01601"></a>01601     <a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *VecTy = cast<VectorType>(VecInput-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01602"></a>01602     <span class="keywordtype">unsigned</span> DestWidth = DestTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l01603"></a>01603 
+<a name="l01604"></a>01604     <span class="keywordflow">if</span> (VecTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() % DestWidth == 0) {
+<a name="l01605"></a>01605       <span class="comment">// If the element type of the vector doesn't match the result type,</span>
+<a name="l01606"></a>01606       <span class="comment">// bitcast it to be a vector type we can extract from.</span>
+<a name="l01607"></a>01607       <span class="keywordflow">if</span> (VecTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>() != DestTy) {
+<a name="l01608"></a>01608         VecTy = <a class="code" href="classllvm_1_1VectorType.html#ab43657ed1abe2e2ed3a6a394f233ebd0">VectorType::get</a>(DestTy,
+<a name="l01609"></a>01609                                 VecTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() / DestWidth);
+<a name="l01610"></a>01610         VecInput = IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a87b363b9dad9f5040ea7e29ea9e60ff5">CreateBitCast</a>(VecInput, VecTy);
+<a name="l01611"></a>01611       }
+<a name="l01612"></a>01612     
+<a name="l01613"></a>01613       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ExtractElementInst.html#a671ded0c51dd6de0eaf145cde783d81e">ExtractElementInst::Create</a>(VecInput, IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(0));
+<a name="l01614"></a>01614     }
+<a name="l01615"></a>01615   }
+<a name="l01616"></a>01616   
+<a name="l01617"></a>01617   <span class="comment">// bitcast(trunc(lshr(bitcast(somevector), cst))</span>
+<a name="l01618"></a>01618   <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *ShAmt = 0;
+<a name="l01619"></a>01619   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Src, <a class="code" href="namespacellvm_1_1PatternMatch.html#a5b844aada27c4c6fdb87146ac458c0d8" title="m_Trunc">m_Trunc</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#aa08fee11e8a5ec10c0cc2a7abbbd799a">m_LShr</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ac0467ca7fad871738b10db95feb40dad" title="m_BitCast">m_BitCast</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(VecInput)),
+<a name="l01620"></a>01620                                 <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(ShAmt)))) &&
+<a name="l01621"></a>01621       isa<VectorType>(VecInput-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())) {
+<a name="l01622"></a>01622     <a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *VecTy = cast<VectorType>(VecInput-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l01623"></a>01623     <span class="keywordtype">unsigned</span> DestWidth = DestTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>();
+<a name="l01624"></a>01624     <span class="keywordflow">if</span> (VecTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() % DestWidth == 0 &&
+<a name="l01625"></a>01625         ShAmt-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>() % DestWidth == 0) {
+<a name="l01626"></a>01626       <span class="comment">// If the element type of the vector doesn't match the result type,</span>
+<a name="l01627"></a>01627       <span class="comment">// bitcast it to be a vector type we can extract from.</span>
+<a name="l01628"></a>01628       <span class="keywordflow">if</span> (VecTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>() != DestTy) {
+<a name="l01629"></a>01629         VecTy = <a class="code" href="classllvm_1_1VectorType.html#ab43657ed1abe2e2ed3a6a394f233ebd0">VectorType::get</a>(DestTy,
+<a name="l01630"></a>01630                                 VecTy-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>() / DestWidth);
+<a name="l01631"></a>01631         VecInput = IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a87b363b9dad9f5040ea7e29ea9e60ff5">CreateBitCast</a>(VecInput, VecTy);
+<a name="l01632"></a>01632       }
+<a name="l01633"></a>01633       
+<a name="l01634"></a>01634       <span class="keywordtype">unsigned</span> Elt = ShAmt-><a class="code" href="classllvm_1_1ConstantInt.html#a6edd823ba5e4e1effc8280ca8a1194ef" title="Return the zero extended value.">getZExtValue</a>() / DestWidth;
+<a name="l01635"></a>01635       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ExtractElementInst.html#a671ded0c51dd6de0eaf145cde783d81e">ExtractElementInst::Create</a>(VecInput, IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilderBase.html#ac0e8c554bf1c1e117a74d51df89c137d" title="getInt32 - Get a constant 32-bit value.">getInt32</a>(Elt));
+<a name="l01636"></a>01636     }
+<a name="l01637"></a>01637   }
+<a name="l01638"></a>01638   <span class="keywordflow">return</span> 0;
+<a name="l01639"></a>01639 }
+<a name="l01640"></a>01640 
+<a name="l01641"></a><a class="code" href="classllvm_1_1InstCombiner.html#a5015196ad0cd2548ebeed53069c557fc">01641</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a5015196ad0cd2548ebeed53069c557fc">InstCombiner::visitBitCast</a>(<a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> &CI) {
+<a name="l01642"></a>01642   <span class="comment">// If the operands are integer typed then apply the integer transforms,</span>
+<a name="l01643"></a>01643   <span class="comment">// otherwise just apply the common ones.</span>
+<a name="l01644"></a>01644   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Src = CI.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l01645"></a>01645   <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcTy = Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01646"></a>01646   <a class="code" href="classllvm_1_1Type.html">Type</a> *DestTy = CI.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l01647"></a>01647 
+<a name="l01648"></a>01648   <span class="comment">// Get rid of casts from one type to the same type. These are useless and can</span>
+<a name="l01649"></a>01649   <span class="comment">// be replaced by the operand.</span>
+<a name="l01650"></a>01650   <span class="keywordflow">if</span> (DestTy == Src-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l01651"></a>01651     <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, Src);
+<a name="l01652"></a>01652 
+<a name="l01653"></a>01653   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *DstPTy = dyn_cast<PointerType>(DestTy)) {
+<a name="l01654"></a>01654     <a class="code" href="classllvm_1_1PointerType.html">PointerType</a> *SrcPTy = cast<PointerType>(SrcTy);
+<a name="l01655"></a>01655     <a class="code" href="classllvm_1_1Type.html">Type</a> *DstElTy = DstPTy->getElementType();
+<a name="l01656"></a>01656     <a class="code" href="classllvm_1_1Type.html">Type</a> *SrcElTy = SrcPTy-><a class="code" href="classllvm_1_1SequentialType.html#a39f2c3a62f293faf11ac28b15bc53359">getElementType</a>();
+<a name="l01657"></a>01657     
+<a name="l01658"></a>01658     <span class="comment">// If the address spaces don't match, don't eliminate the bitcast, which is</span>
+<a name="l01659"></a>01659     <span class="comment">// required for changing types.</span>
+<a name="l01660"></a>01660     <span class="keywordflow">if</span> (SrcPTy-><a class="code" href="classllvm_1_1PointerType.html#a921061a57ec3cfbaf6422f09f7d79fc3" title="Return the address space of the Pointer type.">getAddressSpace</a>() != DstPTy->getAddressSpace())
+<a name="l01661"></a>01661       <span class="keywordflow">return</span> 0;
+<a name="l01662"></a>01662     
+<a name="l01663"></a>01663     <span class="comment">// If we are casting a alloca to a pointer to a type of the same</span>
+<a name="l01664"></a>01664     <span class="comment">// size, rewrite the allocation instruction to allocate the "right" type.</span>
+<a name="l01665"></a>01665     <span class="comment">// There is no need to modify malloc calls because it is their bitcast that</span>
+<a name="l01666"></a>01666     <span class="comment">// needs to be cleaned up.</span>
+<a name="l01667"></a>01667     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> *AI = dyn_cast<AllocaInst>(Src))
+<a name="l01668"></a>01668       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *V = PromoteCastOfAllocation(CI, *AI))
+<a name="l01669"></a>01669         <span class="keywordflow">return</span> V;
+<a name="l01670"></a>01670     
+<a name="l01671"></a>01671     <span class="comment">// If the source and destination are pointers, and this cast is equivalent</span>
+<a name="l01672"></a>01672     <span class="comment">// to a getelementptr X, 0, 0, 0...  turn it into the appropriate gep.</span>
+<a name="l01673"></a>01673     <span class="comment">// This can enhance SROA and other transforms that want type-safe pointers.</span>
+<a name="l01674"></a>01674     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *ZeroUInt =
+<a name="l01675"></a>01675       <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>()));
+<a name="l01676"></a>01676     <span class="keywordtype">unsigned</span> NumZeros = 0;
+<a name="l01677"></a>01677     <span class="keywordflow">while</span> (SrcElTy != DstElTy && 
+<a name="l01678"></a>01678            isa<CompositeType>(SrcElTy) && !SrcElTy-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>() &&
+<a name="l01679"></a>01679            SrcElTy-><a class="code" href="classllvm_1_1Type.html#ad083201ba4e1f8217bdc1f1ab05bd83d">getNumContainedTypes</a>() <span class="comment">/* not "{}" */</span>) {
+<a name="l01680"></a>01680       SrcElTy = cast<CompositeType>(SrcElTy)->getTypeAtIndex(ZeroUInt);
+<a name="l01681"></a>01681       ++NumZeros;
+<a name="l01682"></a>01682     }
+<a name="l01683"></a>01683 
+<a name="l01684"></a>01684     <span class="comment">// If we found a path from the src to dest, create the getelementptr now.</span>
+<a name="l01685"></a>01685     <span class="keywordflow">if</span> (SrcElTy == DstElTy) {
+<a name="l01686"></a>01686       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value*, 8></a> Idxs(NumZeros+1, ZeroUInt);
+<a name="l01687"></a>01687       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1GetElementPtrInst.html#a3e10b4db1ded36654416d3aed2bc56ba">GetElementPtrInst::CreateInBounds</a>(Src, Idxs);
+<a name="l01688"></a>01688     }
+<a name="l01689"></a>01689   }
+<a name="l01690"></a>01690   
+<a name="l01691"></a>01691   <span class="comment">// Try to optimize int -> float bitcasts.</span>
+<a name="l01692"></a>01692   <span class="keywordflow">if</span> ((DestTy-><a class="code" href="classllvm_1_1Type.html#aeb06cf0f813f643b62d8dd98db0bc249" title="isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type.">isFloatTy</a>() || DestTy-><a class="code" href="classllvm_1_1Type.html#ac67ad08d36c989a872a887caa72803c6" title="isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type.">isDoubleTy</a>()) && isa<IntegerType>(SrcTy))
+<a name="l01693"></a>01693     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="InstCombineCasts_8cpp.html#ac50270ed32cec6a5d8ec24e524846b13">OptimizeIntToFloatBitCast</a>(CI, *<span class="keyword">this</span>))
+<a name="l01694"></a>01694       <span class="keywordflow">return</span> I;
+<a name="l01695"></a>01695 
+<a name="l01696"></a>01696   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *DestVTy = dyn_cast<VectorType>(DestTy)) {
+<a name="l01697"></a>01697     <span class="keywordflow">if</span> (DestVTy->getNumElements() == 1 && !SrcTy-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>()) {
+<a name="l01698"></a>01698       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Elem = Builder->CreateBitCast(Src, DestVTy->getElementType());
+<a name="l01699"></a>01699       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InsertElementInst.html#a968cd6a1853b174636da54c36ae25425">InsertElementInst::Create</a>(<a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(DestTy), Elem,
+<a name="l01700"></a>01700                      <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>())));
+<a name="l01701"></a>01701       <span class="comment">// FIXME: Canonicalize bitcast(insertelement) -> insertelement(bitcast)</span>
+<a name="l01702"></a>01702     }
+<a name="l01703"></a>01703     
+<a name="l01704"></a>01704     <span class="keywordflow">if</span> (isa<IntegerType>(SrcTy)) {
+<a name="l01705"></a>01705       <span class="comment">// If this is a cast from an integer to vector, check to see if the input</span>
+<a name="l01706"></a>01706       <span class="comment">// is a trunc or zext of a bitcast from vector.  If so, we can replace all</span>
+<a name="l01707"></a>01707       <span class="comment">// the casts with a shuffle and (potentially) a bitcast.</span>
+<a name="l01708"></a>01708       <span class="keywordflow">if</span> (isa<TruncInst>(Src) || isa<ZExtInst>(Src)) {
+<a name="l01709"></a>01709         <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *SrcCast = cast<CastInst>(Src);
+<a name="l01710"></a>01710         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> *BCIn = dyn_cast<BitCastInst>(SrcCast-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)))
+<a name="l01711"></a>01711           <span class="keywordflow">if</span> (isa<VectorType>(BCIn->getOperand(0)->getType()))
+<a name="l01712"></a>01712             <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="InstCombineCasts_8cpp.html#acb5a7eff32dd4405f0e795ba98bdbc4e">OptimizeVectorResize</a>(BCIn->getOperand(0),
+<a name="l01713"></a>01713                                                cast<VectorType>(DestTy), *<span class="keyword">this</span>))
+<a name="l01714"></a>01714               <span class="keywordflow">return</span> I;
+<a name="l01715"></a>01715       }
+<a name="l01716"></a>01716       
+<a name="l01717"></a>01717       <span class="comment">// If the input is an 'or' instruction, we may be doing shifts and ors to</span>
+<a name="l01718"></a>01718       <span class="comment">// assemble the elements of the vector manually.  Try to rip the code out</span>
+<a name="l01719"></a>01719       <span class="comment">// and replace it with insertelements.</span>
+<a name="l01720"></a>01720       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineCasts_8cpp.html#a534902f6fff593cf4b50232cc58c580a">OptimizeIntegerToVectorInsertions</a>(CI, *<span class="keyword">this</span>))
+<a name="l01721"></a>01721         <span class="keywordflow">return</span> ReplaceInstUsesWith(CI, V);
+<a name="l01722"></a>01722     }
+<a name="l01723"></a>01723   }
+<a name="l01724"></a>01724 
+<a name="l01725"></a>01725   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1VectorType.html">VectorType</a> *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
+<a name="l01726"></a>01726     <span class="keywordflow">if</span> (SrcVTy->getNumElements() == 1 && !DestTy-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>()) {
+<a name="l01727"></a>01727       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Elem = 
+<a name="l01728"></a>01728         Builder->CreateExtractElement(Src,
+<a name="l01729"></a>01729                    <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(CI.<a class="code" href="classllvm_1_1Value.html#af85a4828b6b5a8de7fc0a55cc0e5b52f" title="All values hold a context through their type.">getContext</a>())));
+<a name="l01730"></a>01730       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1CastInst.html#a0f7dea9550778374905e12da6d6ba8a8" title="Construct any of the CastInst subclasses.">CastInst::Create</a>(Instruction::BitCast, Elem, DestTy);
+<a name="l01731"></a>01731     }
+<a name="l01732"></a>01732   }
+<a name="l01733"></a>01733 
+<a name="l01734"></a>01734   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ShuffleVectorInst.html">ShuffleVectorInst</a> *SVI = dyn_cast<ShuffleVectorInst>(Src)) {
+<a name="l01735"></a>01735     <span class="comment">// Okay, we have (bitcast (shuffle ..)).  Check to see if this is</span>
+<a name="l01736"></a>01736     <span class="comment">// a bitcast to a vector with the same # elts.</span>
+<a name="l01737"></a>01737     <span class="keywordflow">if</span> (SVI->hasOneUse() && DestTy-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>() && 
+<a name="l01738"></a>01738         cast<VectorType>(DestTy)->getNumElements() ==
+<a name="l01739"></a>01739               SVI->getType()->getNumElements() &&
+<a name="l01740"></a>01740         SVI->getType()->getNumElements() ==
+<a name="l01741"></a>01741           cast<VectorType>(SVI->getOperand(0)->getType())->getNumElements()) {
+<a name="l01742"></a>01742       <a class="code" href="classllvm_1_1BitCastInst.html" title="This class represents a no-op cast from one type to another.">BitCastInst</a> *Tmp;
+<a name="l01743"></a>01743       <span class="comment">// If either of the operands is a cast from CI.getType(), then</span>
+<a name="l01744"></a>01744       <span class="comment">// evaluating the shuffle in the casted destination's type will allow</span>
+<a name="l01745"></a>01745       <span class="comment">// us to eliminate at least one cast.</span>
+<a name="l01746"></a>01746       <span class="keywordflow">if</span> (((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(0))) && 
+<a name="l01747"></a>01747            Tmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == DestTy) ||
+<a name="l01748"></a>01748           ((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(1))) && 
+<a name="l01749"></a>01749            Tmp-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() == DestTy)) {
+<a name="l01750"></a>01750         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHS = Builder->CreateBitCast(SVI->getOperand(0), DestTy);
+<a name="l01751"></a>01751         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHS = Builder->CreateBitCast(SVI->getOperand(1), DestTy);
+<a name="l01752"></a>01752         <span class="comment">// Return a new shuffle vector.  Use the same element ID's, as we</span>
+<a name="l01753"></a>01753         <span class="comment">// know the vector types match #elts.</span>
+<a name="l01754"></a>01754         <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ShuffleVectorInst.html">ShuffleVectorInst</a>(LHS, RHS, SVI->getOperand(2));
+<a name="l01755"></a>01755       }
+<a name="l01756"></a>01756     }
+<a name="l01757"></a>01757   }
+<a name="l01758"></a>01758   
+<a name="l01759"></a>01759   <span class="keywordflow">if</span> (SrcTy-><a class="code" href="classllvm_1_1Type.html#a2eba483f5cc876e824aa6c085736086b">isPointerTy</a>())
+<a name="l01760"></a>01760     <span class="keywordflow">return</span> commonPointerCastTransforms(CI);
+<a name="l01761"></a>01761   <span class="keywordflow">return</span> commonCastTransforms(CI);
+<a name="l01762"></a>01762 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/InstCombineCompares_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineCompares_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineCompares_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineCompares_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,711 @@
+<!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: InstCombineCompares.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">InstCombineCompares.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="InstCombine_8h_source.html">InstCombine.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="ConstantFolding_8h_source.html">llvm/Analysis/ConstantFolding.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="MemoryBuiltins_8h_source.html">llvm/Analysis/MemoryBuiltins.h</a>"</code><br/>
+<code>#include "<a class="el" href="DataLayout_8h_source.html">llvm/DataLayout.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetLibraryInfo_8h_source.html">llvm/Target/TargetLibraryInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="ConstantRange_8h_source.html">llvm/Support/ConstantRange.h</a>"</code><br/>
+<code>#include "<a class="el" href="GetElementPtrTypeIterator_8h_source.html">llvm/Support/GetElementPtrTypeIterator.h</a>"</code><br/>
+<code>#include "<a class="el" href="PatternMatch_8h_source.html">llvm/Support/PatternMatch.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstCombineCompares.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstCombineCompares_8cpp__incl.png" border="0" usemap="#InstCombineCompares_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="InstCombineCompares_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#a0772d720f01c3de131e8f60fba99b706">getOne</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="InstCombineCompares_8cpp.html#af7717df543a545f000bf7e2367e17925">AddOne</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *C)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">AddOne - Add one to a ConstantInt.  <a href="#af7717df543a545f000bf7e2367e17925"></a><br/></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="InstCombineCompares_8cpp.html#a3ec930e681ab860bfd9ee4f7dbb0bba7">SubOne</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *C)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SubOne - Subtract one from a ConstantInt.  <a href="#a3ec930e681ab860bfd9ee4f7dbb0bba7"></a><br/></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="InstCombineCompares_8cpp.html#aa5ab8c7b55d8bc7cab66be444daa70a1">ExtractElement</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *V, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *Idx)</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="InstCombineCompares_8cpp.html#ac731f43b6d70551357cc1960dcd22173">HasAddOverflow</a> (<a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *Result, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *In1, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *In2, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> IsSigned)</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="InstCombineCompares_8cpp.html#a942bcf899495377b3c460b8df9fb1c81">AddWithOverflow</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *&Result, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *In1, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *In2, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> IsSigned=<a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</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="InstCombineCompares_8cpp.html#a63610224f160a6f88abce922a7e99ba8">HasSubOverflow</a> (<a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *Result, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *In1, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *In2, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> IsSigned)</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="InstCombineCompares_8cpp.html#a70e9984c4d8f47168e6e840fc816ce91">SubWithOverflow</a> (<a class="el" href="classllvm_1_1Constant.html">Constant</a> *&Result, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *In1, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *In2, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> IsSigned=<a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</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="InstCombineCompares_8cpp.html#aab9d1b39f9f6b722e3b89b9650d6051d">isSignBitCheck</a> (ICmpInst::Predicate pred, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *RHS, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> &TrueIfSigned)</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="InstCombineCompares_8cpp.html#a3768a0dde13dc5f3ebeb41cb700d4976">isHighOnes</a> (const <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *CI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#a2c8af3f0435c2f2777b08be28da284fb">ComputeSignedMinMaxValuesFromKnownBits</a> (const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &KnownZero, const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &KnownOne, <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Min, <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Max)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#ada48609926c51e52629a815158919f39">ComputeUnsignedMinMaxValuesFromKnownBits</a> (const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &KnownZero, const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &KnownOne, <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Min, <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Max)</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="InstCombineCompares_8cpp.html#ad6a042fcb94fa8bd65efea3003580f43">EvaluateGEPOffsetExpression</a> (<a class="el" href="classllvm_1_1User.html">User</a> *GEP, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#a0d991c3d5a987e28b2ae44852b1756b5">ProcessUGT_ADDCST_ADD</a> (<a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> &I, <a class="el" href="classllvm_1_1Value.html">Value</a> *A, <a class="el" href="classllvm_1_1Value.html">Value</a> *B, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *CI2, <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> *CI1, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#a7186564b18aee592f242128da5aa21db">ProcessUAddIdiom</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> &I, <a class="el" href="classllvm_1_1Value.html">Value</a> *OrigAddV, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1APInt.html">APInt</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineCompares_8cpp.html#aa8df8b9877663703056c1d9e7ffffc3a">DemandedBitsLHSMask</a> (<a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> &I, <a class="el" href="classunsigned.html">unsigned</a> BitWidth, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isSignCheck)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af7717df543a545f000bf7e2367e17925"></a><!-- doxytag: member="InstCombineCompares.cpp::AddOne" ref="af7717df543a545f000bf7e2367e17925" args="(Constant *C)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* AddOne </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>AddOne - Add one to a ConstantInt. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00032">32</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Constants_8cpp_source.html#l01949">llvm::ConstantExpr::getAdd()</a>, and <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00773">llvm::InstCombiner::FoldICmpDivCst()</a>, and <a class="el" href="InstCombineCompares_8cpp_source.html#l01020">llvm::InstCombiner::visitICmpInstWithInstAndIntCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a942bcf899495377b3c460b8df9fb1c81"></a><!-- doxytag: member="InstCombineCompares.cpp::AddWithOverflow" ref="a942bcf899495377b3c460b8df9fb1c81" args="(Constant *&Result, Constant *In1, Constant *In2, bool IsSigned=false)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> AddWithOverflow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> *& </td>
+          <td class="paramname"><em>Result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>In1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>In2</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>IsSigned</em> = <code><a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a></code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>AddWithOverflow - Compute Result = In1+In2, returning true if the result overflowed for this type. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00057">57</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="InstVisitor_8h_source.html#l00170">llvm::ExtractElement</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Constants_8cpp_source.html#l01949">llvm::ConstantExpr::getAdd()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Type_8cpp_source.html#l00240">llvm::Type::getInt32Ty()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, and <a class="el" href="InstCombineCompares_8cpp_source.html#l00044">HasAddOverflow()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00773">llvm::InstCombiner::FoldICmpDivCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c8af3f0435c2f2777b08be28da284fb"></a><!-- doxytag: member="InstCombineCompares.cpp::ComputeSignedMinMaxValuesFromKnownBits" ref="a2c8af3f0435c2f2777b08be28da284fb" args="(const APInt &KnownZero, const APInt &KnownOne, APInt &Min, APInt &Max)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void ComputeSignedMinMaxValuesFromKnownBits </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>KnownZero</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>KnownOne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>Min</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>Max</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>ComputeSignedMinMaxValuesFromKnownBits - Given a signed integer type and a set of known zero and one bits, compute the maximum and minimum values that could have the specified known zero and known one bits, returning them in min/max. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00152">152</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8cpp_source.html#l00592">llvm::APInt::clearBit()</a>, <a class="el" href="APInt_8h_source.html#l01163">llvm::APInt::getBitWidth()</a>, and <a class="el" href="APInt_8cpp_source.html#l00583">llvm::APInt::setBit()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada48609926c51e52629a815158919f39"></a><!-- doxytag: member="InstCombineCompares.cpp::ComputeUnsignedMinMaxValuesFromKnownBits" ref="ada48609926c51e52629a815158919f39" args="(const APInt &KnownZero, const APInt &KnownOne, APInt &Min, APInt &Max)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void ComputeUnsignedMinMaxValuesFromKnownBits </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>KnownZero</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>KnownOne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>Min</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1APInt.html">APInt</a> & </td>
+          <td class="paramname"><em>Max</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="InstCombineCompares_8cpp_source.html#l00176">176</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01163">llvm::APInt::getBitWidth()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8df8b9877663703056c1d9e7ffffc3a"></a><!-- doxytag: member="InstCombineCompares.cpp::DemandedBitsLHSMask" ref="aa8df8b9877663703056c1d9e7ffffc3a" args="(ICmpInst &I, unsigned BitWidth, bool isSignCheck)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1APInt.html">APInt</a> DemandedBitsLHSMask </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> & </td>
+          <td class="paramname"><em>I</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>BitWidth</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>isSignCheck</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="InstCombineCompares_8cpp_source.html#l01775">1775</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01282">llvm::APInt::countTrailingOnes()</a>, <a class="el" href="APInt_8cpp_source.html#l00736">llvm::APInt::countTrailingZeros()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="APInt_8h_source.html#l00429">llvm::APInt::getAllOnesValue()</a>, <a class="el" href="APInt_8h_source.html#l00495">llvm::APInt::getLowBitsSet()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="InstrTypes_8h_source.html#l00708">llvm::CmpInst::getPredicate()</a>, <a class="el" href="APInt_8h_source.html#l00423">llvm::APInt::getSignBit()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="InstrTypes_8h_source.html#l00668">llvm::CmpInst::ICMP_UGT</a>, and <a class="el" href="InstrTypes_8h_source.html#l00670">llvm::CmpInst::ICMP_ULT</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad6a042fcb94fa8bd65efea3003580f43"></a><!-- doxytag: member="InstCombineCompares.cpp::EvaluateGEPOffsetExpression" ref="ad6a042fcb94fa8bd65efea3003580f43" args="(User *GEP, InstCombiner &IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Value.html">Value</a>* EvaluateGEPOffsetExpression </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1User.html">User</a> * </td>
+          <td class="paramname"><em>GEP</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>EvaluateGEPOffsetExpression - Return a value that can be used to compare the *offset* implied by a GEP to zero. For example, if we have &A[i], we want to return 'i' for "icmp ne i, 0". Note that, in general, indices can be complex, and scales are involved. The above expression would also be legal to codegen as "icmp ne (i*4), 0" (assuming A is a pointer to i32). This later form is less amenable to optimization though, and we are allowed to generate the first by knowing that pointer arithmetic doesn't overflow.</p>
+<p>If we can't emit an optimized form for this expression, this returns null. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00476">476</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombine_8h_source.html#l00086">llvm::InstCombiner::Builder</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#l01101">llvm::IRBuilder< preserveNames, T, Inserter >::CreateIntCast()</a>, <a class="el" href="IRBuilder_8h_source.html#l00997">llvm::IRBuilder< preserveNames, T, Inserter >::CreateTrunc()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="GetElementPtrTypeIterator_8h_source.html#l00085">llvm::gep_type_begin()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="InstCombine_8h_source.html#l00100">llvm::InstCombiner::getDataLayout()</a>, <a class="el" href="DataLayout_8h_source.html#l00413">llvm::StructLayout::getEl
 ementOffset()</a>, <a class="el" href="GetElementPtrTypeIterator_8h_source.html#l00057">llvm::generic_gep_type_iterator< ItTy >::getIndexedType()</a>, <a class="el" href="DataLayout_8cpp_source.html#l00665">llvm::DataLayout::getIntPtrType()</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="DataLayout_8h_source.html#l00266">llvm::DataLayout::getPointerSizeInBits()</a>, <a class="el" href="Type_8cpp_source.html#l00116">llvm::Type::getPrimitiveSizeInBits()</a>, <a class="el" href="Constants_8h_source.html#l00125">llvm::ConstantInt::getSExtValue()</a>, <a class="el" href="DataLayout_8cpp_source.html#l00462">llvm::DataLayout::getStructLayout()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="DataLayout_8h_source.html#l00308">llvm::DataLayout::getTypeAllocSize()</a>, <a class="el" href="Con
 stants_8h_source.html#l00116">llvm::ConstantInt::getZExtValue()</a>, and <a class="el" href="Constants_8h_source.html#l00161">llvm::ConstantInt::isZero()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00572">llvm::InstCombiner::FoldGEPICmp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5ab8c7b55d8bc7cab66be444daa70a1"></a><!-- doxytag: member="InstCombineCompares.cpp::ExtractElement" ref="aa5ab8c7b55d8bc7cab66be444daa70a1" args="(Constant *V, Constant *Idx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a>* ExtractElement </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</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_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>Idx</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="InstCombineCompares_8cpp_source.html#l00040">40</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8cpp_source.html#l01840">llvm::ConstantExpr::getExtractElement()</a>.</p>
+
+<p>Referenced by <a class="el" href="SelectionDAGISel_8cpp_source.html#l00908">collectFailStats()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00900">llvm::ConstantFoldInstOperands()</a>, <a class="el" href="ConstantsContext_8h_source.html#l00435">llvm::ConstantCreator< ConstantExpr, Type, ExprMapKeyType >::create()</a>, <a class="el" href="Constants_8cpp_source.html#l01840">llvm::ConstantExpr::getExtractElement()</a>, <a class="el" href="ObjCARC_8cpp_source.html#l00280">GetInstructionClass()</a>, <a class="el" href="TargetTransformImpl_8cpp_source.html#l00159">llvm::VectorTargetTransformImpl::getScalarizationOverhead()</a>, <a class="el" href="Constants_8cpp_source.html#l01077">llvm::ConstantExpr::getWithOperands()</a>, <a class="el" href="BitcodeWriter_8cpp_source.html#l00758">WriteConstants()</a>, and <a class="el" href="BitcodeWriter_8cpp_source.html#l01065">WriteInstruction()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0772d720f01c3de131e8f60fba99b706"></a><!-- doxytag: member="InstCombineCompares.cpp::getOne" ref="a0772d720f01c3de131e8f60fba99b706" args="(Constant *C)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a>* getOne </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>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00027">27</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, and <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00773">llvm::InstCombiner::FoldICmpDivCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac731f43b6d70551357cc1960dcd22173"></a><!-- doxytag: member="InstCombineCompares.cpp::HasAddOverflow" ref="ac731f43b6d70551357cc1960dcd22173" args="(ConstantInt *Result, ConstantInt *In1, ConstantInt *In2, bool IsSigned)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> HasAddOverflow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+          <td class="paramname"><em>Result</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>In1</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>In2</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>IsSigned</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="InstCombineCompares_8cpp_source.html#l00044">44</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="Constants_8h_source.html#l00156">llvm::ConstantInt::isNegative()</a>, <a class="el" href="APInt_8h_source.html#l01016">llvm::APInt::sgt()</a>, <a class="el" href="APInt_8cpp_source.html#l00547">llvm::APInt::slt()</a>, and <a class="el" href="APInt_8cpp_source.html#l00515">llvm::APInt::ult()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00057">AddWithOverflow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a63610224f160a6f88abce922a7e99ba8"></a><!-- doxytag: member="InstCombineCompares.cpp::HasSubOverflow" ref="a63610224f160a6f88abce922a7e99ba8" args="(ConstantInt *Result, ConstantInt *In1, ConstantInt *In2, bool IsSigned)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> HasSubOverflow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+          <td class="paramname"><em>Result</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>In1</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>In2</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>IsSigned</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="InstCombineCompares_8cpp_source.html#l00078">78</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="Constants_8h_source.html#l00156">llvm::ConstantInt::isNegative()</a>, <a class="el" href="APInt_8h_source.html#l01016">llvm::APInt::sgt()</a>, <a class="el" href="APInt_8cpp_source.html#l00547">llvm::APInt::slt()</a>, and <a class="el" href="APInt_8h_source.html#l01000">llvm::APInt::ugt()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00092">SubWithOverflow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3768a0dde13dc5f3ebeb41cb700d4976"></a><!-- doxytag: member="InstCombineCompares.cpp::isHighOnes" ref="a3768a0dde13dc5f3ebeb41cb700d4976" args="(const ConstantInt *CI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isHighOnes </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+          <td class="paramname"><em>CI</em></td><td>)</td>
+          <td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00144">144</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01020">llvm::InstCombiner::visitICmpInstWithInstAndIntCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab9d1b39f9f6b722e3b89b9650d6051d"></a><!-- doxytag: member="InstCombineCompares.cpp::isSignBitCheck" ref="aab9d1b39f9f6b722e3b89b9650d6051d" args="(ICmpInst::Predicate pred, ConstantInt *RHS, bool &TrueIfSigned)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isSignBitCheck </td>
+          <td>(</td>
+          <td class="paramtype">ICmpInst::Predicate </td>
+          <td class="paramname"><em>pred</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ConstantInt.html">ConstantInt</a> * </td>
+          <td class="paramname"><em>RHS</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>TrueIfSigned</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>isSignBitCheck - Given an exploded icmp instruction, return true if the comparison only checks the sign bit. If it only checks the sign bit, set TrueIfSigned if the result of the comparison is true when the input value is signed. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00117">117</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="InstrTypes_8h_source.html#l00672">llvm::CmpInst::ICMP_SGT</a>, <a class="el" href="InstrTypes_8h_source.html#l00675">llvm::CmpInst::ICMP_SLE</a>, <a class="el" href="InstrTypes_8h_source.html#l00674">llvm::CmpInst::ICMP_SLT</a>, <a class="el" href="InstrTypes_8h_source.html#l00669">llvm::CmpInst::ICMP_UGE</a>, <a class="el" href="InstrTypes_8h_source.html#l00668">llvm::CmpInst::ICMP_UGT</a>, <a class="el" href="Constants_8cpp_source.html#l00067">llvm::Constant::isAllOnesValue()</a>, <a class="el" href="Constants_8h_source.html#l00186">llvm::ConstantInt::isMaxValue()</a>, <a class="el" href="APInt_8h_source.html#l00377">llvm::APInt::isSignBit()</a>, and <a class="el" href="Constants_8h_source.html#l00161">llvm::ConstantInt::isZero()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>, and <a class="el" href="InstCombineCompares_8cpp_source.html#l01020">llvm::InstCombiner::visitICmpInstWithInstAndIntCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7186564b18aee592f242128da5aa21db"></a><!-- doxytag: member="InstCombineCompares.cpp::ProcessUAddIdiom" ref="a7186564b18aee592f242128da5aa21db" args="(Instruction &I, Value *OrigAddV, InstCombiner &IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Instruction.html">Instruction</a>* ProcessUAddIdiom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> & </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>OrigAddV</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</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="InstCombineCompares_8cpp_source.html#l01743">1743</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombine_8h_source.html#l00086">llvm::InstCombiner::Builder</a>, <a class="el" href="CallingConvLower_8h_source.html#l00149">llvm::Call</a>, <a class="el" href="Instructions_8h_source.html#l01752">llvm::ExtractValueInst::Create()</a>, <a class="el" href="IRBuilder_8h_source.html#l01230">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCall2()</a>, <a class="el" href="IRBuilder_8h_source.html#l01295">llvm::IRBuilder< preserveNames, T, Inserter >::CreateExtractValue()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F()</a>, <a class="el" href="Function_8cpp_source.html#l00611">llvm::Intrinsic::getDeclaration()</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.h
 tml#l00110">llvm::BasicBlock::getParent()</a>, <a class="el" href="GlobalValue_8h_source.html#l00286">llvm::GlobalValue::getParent()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="InstCombine_8h_source.html#l00260">llvm::InstCombiner::ReplaceInstUsesWith()</a>, and <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d991c3d5a987e28b2ae44852b1756b5"></a><!-- doxytag: member="InstCombineCompares.cpp::ProcessUGT_ADDCST_ADD" ref="a0d991c3d5a987e28b2ae44852b1756b5" args="(ICmpInst &I, Value *A, Value *B, ConstantInt *CI2, ConstantInt *CI1, InstCombiner &IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Instruction.html">Instruction</a>* ProcessUGT_ADDCST_ADD </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1ICmpInst.html">ICmpInst</a> & </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>A</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>B</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>CI2</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>CI1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>ProcessUGT_ADDCST_ADD - The caller has matched a pattern of the form: I = icmp ugt (add (add A, B), CI2), CI1 If this is of the form: sum = a + b if (sum+128 >u 255) Then replace it with llvm.sadd.with.overflow.i8. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l01661">1661</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombine_8h_source.html#l00086">llvm::InstCombiner::Builder</a>, <a class="el" href="CallingConvLower_8h_source.html#l00149">llvm::Call</a>, <a class="el" href="InstCombine_8h_source.html#l00305">llvm::InstCombiner::ComputeNumSignBits()</a>, <a class="el" href="APInt_8cpp_source.html#l00736">llvm::APInt::countTrailingZeros()</a>, <a class="el" href="Instructions_8h_source.html#l01752">llvm::ExtractValueInst::Create()</a>, <a class="el" href="IRBuilder_8h_source.html#l01230">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCall2()</a>, <a class="el" href="IRBuilder_8h_source.html#l01295">llvm::IRBuilder< preserveNames, T, Inserter >::CreateExtractValue()</a>, <a class="el" href="IRBuilder_8h_source.html#l00997">llvm::IRBuilder< preserveNames, T, Inserter >::CreateTrunc()</a>, <a class="el" href="IRBuilder_8h_source.html#l01000">llvm::IRBuilder< preserveNames, T, Inserter >::CreateZExt()</a>, <a class="el" href="
 Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F()</a>, <a class="el" href="Type_8cpp_source.html#l00304">llvm::IntegerType::get()</a>, <a class="el" href="Constants_8h_source.html#l00109">llvm::ConstantInt::getBitWidth()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Function_8cpp_source.html#l00611">llvm::Intrinsic::getDeclaration()</a>, <a class="el" href="APInt_8h_source.html#l00495">llvm::APInt::getLowBitsSet()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</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="GlobalValue_8h_source.html#l00286">llvm::GlobalValue::getParent()</
 a>, <a class="el" href="Type_8cpp_source.html#l00116">llvm::Type::getPrimitiveSizeInBits()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="Value_8h_source.html#l00156">llvm::Value::hasOneUse()</a>, <a class="el" href="APInt_8h_source.html#l00370">llvm::APInt::isPowerOf2()</a>, <a class="el" href="InstCombine_8h_source.html#l00260">llvm::InstCombiner::ReplaceInstUsesWith()</a>, <a class="el" href="IRBuilder_8h_source.html#l00075">llvm::IRBuilderBase::SetInsertPoint()</a>, <a class="el" href="Value_8h_source.html#l00145">llvm::Value::use_begin()</a>, and <a class="el" href="Value_8h_source.html#l00147">llvm::Value::use_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l01809">llvm::InstCombiner::visitICmpInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3ec930e681ab860bfd9ee4f7dbb0bba7"></a><!-- doxytag: member="InstCombineCompares.cpp::SubOne" ref="a3ec930e681ab860bfd9ee4f7dbb0bba7" args="(Constant *C)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Constant.html">Constant</a>* SubOne </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>SubOne - Subtract one from a ConstantInt. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00036">36</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Constants_8cpp_source.html#l01960">llvm::ConstantExpr::getSub()</a>, and <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00773">llvm::InstCombiner::FoldICmpDivCst()</a>, and <a class="el" href="InstCombineCompares_8cpp_source.html#l01020">llvm::InstCombiner::visitICmpInstWithInstAndIntCst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a70e9984c4d8f47168e6e840fc816ce91"></a><!-- doxytag: member="InstCombineCompares.cpp::SubWithOverflow" ref="a70e9984c4d8f47168e6e840fc816ce91" args="(Constant *&Result, Constant *In1, Constant *In2, bool IsSigned=false)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> SubWithOverflow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> *& </td>
+          <td class="paramname"><em>Result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>In1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>In2</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>IsSigned</em> = <code><a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a></code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>SubWithOverflow - Compute Result = In1-In2, returning true if the result overflowed for this type. </p>
+
+<p>Definition at line <a class="el" href="InstCombineCompares_8cpp_source.html#l00092">92</a> of file <a class="el" href="InstCombineCompares_8cpp_source.html">InstCombineCompares.cpp</a>.</p>
+
+<p>References <a class="el" href="InstVisitor_8h_source.html#l00170">llvm::ExtractElement</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getContext()</a>, <a class="el" href="Type_8cpp_source.html#l00240">llvm::Type::getInt32Ty()</a>, <a class="el" href="Constants_8cpp_source.html#l01960">llvm::ConstantExpr::getSub()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, and <a class="el" href="InstCombineCompares_8cpp_source.html#l00078">HasSubOverflow()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineCompares_8cpp_source.html#l00773">llvm::InstCombiner::FoldICmpDivCst()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InstCombineMulDivRem_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineMulDivRem_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineMulDivRem_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineMulDivRem_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,808 @@
+<!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: InstCombineMulDivRem.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstCombineMulDivRem.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="InstCombineMulDivRem_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- InstCombineMulDivRem.cpp -------------------------------------------===//</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 visit functions for mul, fmul, sdiv, udiv, fdiv,</span>
+<a name="l00011"></a>00011 <span class="comment">// srem, urem, frem.</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">#include "<a class="code" href="InstCombine_8h.html">InstCombine.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="IntrinsicInst_8h.html">llvm/IntrinsicInst.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="InstructionSimplify_8h.html">llvm/Analysis/InstructionSimplify.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="PatternMatch_8h.html">llvm/Support/PatternMatch.h</a>"</span>
+<a name="l00019"></a>00019 <span class="keyword">using namespace </span>llvm;
+<a name="l00020"></a>00020 <span class="keyword">using namespace </span>PatternMatch;
+<a name="l00021"></a>00021 
+<a name="l00022"></a>00022 <span class="comment"></span>
+<a name="l00023"></a>00023 <span class="comment">/// simplifyValueKnownNonZero - The specific integer value is used in a context</span>
+<a name="l00024"></a>00024 <span class="comment">/// where it is known to be non-zero.  If this allows us to simplify the</span>
+<a name="l00025"></a>00025 <span class="comment">/// computation, do so and return the new operand, otherwise return null.</span>
+<a name="l00026"></a><a class="code" href="InstCombineMulDivRem_8cpp.html#a823f9e4f999cff8e782a56058320287a">00026</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="InstCombineMulDivRem_8cpp.html#a823f9e4f999cff8e782a56058320287a">simplifyValueKnownNonZero</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1InstCombiner.html" title="InstCombiner - The -instcombine pass.">InstCombiner</a> &IC) {
+<a name="l00027"></a>00027   <span class="comment">// If V has multiple uses, then we would have to do more analysis to determine</span>
+<a name="l00028"></a>00028   <span class="comment">// if this is safe.  For example, the use could be in dynamically unreached</span>
+<a name="l00029"></a>00029   <span class="comment">// code.</span>
+<a name="l00030"></a>00030   <span class="keywordflow">if</span> (!V-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> 0;
+<a name="l00031"></a>00031   
+<a name="l00032"></a>00032   <span class="keywordtype">bool</span> MadeChange = <span class="keyword">false</span>;
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034   <span class="comment">// ((1 << A) >>u B) --> (1 << (A-B))</span>
+<a name="l00035"></a>00035   <span class="comment">// Because V cannot be zero, we know that B is less than A.</span>
+<a name="l00036"></a>00036   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = 0, *B = 0, *PowerOf2 = 0;
+<a name="l00037"></a>00037   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(V, <a class="code" href="namespacellvm_1_1PatternMatch.html#aa08fee11e8a5ec10c0cc2a7abbbd799a">m_LShr</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#aca6428e7fec51ba0b55594f469eb9691">m_OneUse</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(PowerOf2), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(A))),
+<a name="l00038"></a>00038                       <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(B))) &&
+<a name="l00039"></a>00039       <span class="comment">// The "1" can be any value known to be a power of 2.</span>
+<a name="l00040"></a>00040       <a class="code" href="namespacellvm.html#a975d59448fa3230d7fead583d4f0f1ac">isPowerOfTwo</a>(PowerOf2, IC.<a class="code" href="classllvm_1_1InstCombiner.html#a5acf2a841db50684c87133f36bdd00a1">getDataLayout</a>())) {
+<a name="l00041"></a>00041     A = IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#afa1cb82e021c7f516f65d40162fe6c53">CreateSub</a>(A, B);
+<a name="l00042"></a>00042     <span class="keywordflow">return</span> IC.<a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a4d49fd9a4cc4f2a74d4555bd08b13910">CreateShl</a>(PowerOf2, A);
+<a name="l00043"></a>00043   }
+<a name="l00044"></a>00044   
+<a name="l00045"></a>00045   <span class="comment">// (PowerOfTwo >>u B) --> isExact since shifting out the result would make it</span>
+<a name="l00046"></a>00046   <span class="comment">// inexact.  Similarly for <<.</span>
+<a name="l00047"></a>00047   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = dyn_cast<BinaryOperator>(V))
+<a name="l00048"></a>00048     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->isLogicalShift() &&
+<a name="l00049"></a>00049         <a class="code" href="namespacellvm.html#a975d59448fa3230d7fead583d4f0f1ac">isPowerOfTwo</a>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(0), IC.<a class="code" href="classllvm_1_1InstCombiner.html#a5acf2a841db50684c87133f36bdd00a1">getDataLayout</a>())) {
+<a name="l00050"></a>00050       <span class="comment">// We know that this is an exact/nuw shift and that the input is a</span>
+<a name="l00051"></a>00051       <span class="comment">// non-zero context as well.</span>
+<a name="l00052"></a>00052       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a> = <a class="code" href="InstCombineMulDivRem_8cpp.html#a823f9e4f999cff8e782a56058320287a">simplifyValueKnownNonZero</a>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOperand(0), IC)) {
+<a name="l00053"></a>00053         <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->setOperand(0, <a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>);
+<a name="l00054"></a>00054         MadeChange = <span class="keyword">true</span>;
+<a name="l00055"></a>00055       }
+<a name="l00056"></a>00056       
+<a name="l00057"></a>00057       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOpcode() == <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">Instruction::LShr</a> && !<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->isExact()) {
+<a name="l00058"></a>00058         <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->setIsExact();
+<a name="l00059"></a>00059         MadeChange = <span class="keyword">true</span>;
+<a name="l00060"></a>00060       }
+<a name="l00061"></a>00061       
+<a name="l00062"></a>00062       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->getOpcode() == Instruction::Shl && !<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->hasNoUnsignedWrap()) {
+<a name="l00063"></a>00063         <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->setHasNoUnsignedWrap();
+<a name="l00064"></a>00064         MadeChange = <span class="keyword">true</span>;
+<a name="l00065"></a>00065       }
+<a name="l00066"></a>00066     }
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068   <span class="comment">// TODO: Lots more we could do here:</span>
+<a name="l00069"></a>00069   <span class="comment">//    If V is a phi node, we can call this on each of its operands.</span>
+<a name="l00070"></a>00070   <span class="comment">//    "select cond, X, 0" can simplify to "X".</span>
+<a name="l00071"></a>00071   
+<a name="l00072"></a>00072   <span class="keywordflow">return</span> MadeChange ? V : 0;
+<a name="l00073"></a>00073 }
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075 <span class="comment"></span>
+<a name="l00076"></a>00076 <span class="comment">/// MultiplyOverflows - True if the multiply can not be expressed in an int</span>
+<a name="l00077"></a>00077 <span class="comment">/// this size.</span>
+<a name="l00078"></a><a class="code" href="InstCombineMulDivRem_8cpp.html#a6a2f9c787f06fbf87c28a469ffb5f000">00078</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombineMulDivRem_8cpp.html#a6a2f9c787f06fbf87c28a469ffb5f000">MultiplyOverflows</a>(<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C1, <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C2, <span class="keywordtype">bool</span> sign) {
+<a name="l00079"></a>00079   uint32_t W = C1-><a class="code" href="classllvm_1_1ConstantInt.html#a58f423c78837f9854278b6026b34714a" title="getBitWidth - Return the bitwidth of this constant.">getBitWidth</a>();
+<a name="l00080"></a>00080   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> LHSExt = C1-><a class="code" href="classllvm_1_1ConstantInt.html#af8dde13a97efce293a7b04daf1e208fb" title="Return the constant's value.">getValue</a>(), RHSExt = C2-><a class="code" href="classllvm_1_1ConstantInt.html#af8dde13a97efce293a7b04daf1e208fb" title="Return the constant's value.">getValue</a>();
+<a name="l00081"></a>00081   <span class="keywordflow">if</span> (sign) {
+<a name="l00082"></a>00082     LHSExt = LHSExt.<a class="code" href="classllvm_1_1APInt.html#aa3464694bcec68b89b4bffd71360b897" title="Sign extend to a new width.">sext</a>(W * 2);
+<a name="l00083"></a>00083     RHSExt = RHSExt.<a class="code" href="classllvm_1_1APInt.html#aa3464694bcec68b89b4bffd71360b897" title="Sign extend to a new width.">sext</a>(W * 2);
+<a name="l00084"></a>00084   } <span class="keywordflow">else</span> {
+<a name="l00085"></a>00085     LHSExt = LHSExt.<a class="code" href="classllvm_1_1APInt.html#a6142fc5662411269a7ca0217f49f338c" title="Zero extend to a new width.">zext</a>(W * 2);
+<a name="l00086"></a>00086     RHSExt = RHSExt.<a class="code" href="classllvm_1_1APInt.html#a6142fc5662411269a7ca0217f49f338c" title="Zero extend to a new width.">zext</a>(W * 2);
+<a name="l00087"></a>00087   }
+<a name="l00088"></a>00088   
+<a name="l00089"></a>00089   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> MulExt = LHSExt * RHSExt;
+<a name="l00090"></a>00090   
+<a name="l00091"></a>00091   <span class="keywordflow">if</span> (!sign)
+<a name="l00092"></a>00092     <span class="keywordflow">return</span> MulExt.<a class="code" href="classllvm_1_1APInt.html#ad3d358e03c6228af2d19b2e67028886e" title="Unsigned greather than comparison.">ugt</a>(<a class="code" href="classllvm_1_1APInt.html#ad960e1ff48d25c382b6d28e7961f074e" title="Get a value with low bits set.">APInt::getLowBitsSet</a>(W * 2, W));
+<a name="l00093"></a>00093   
+<a name="l00094"></a>00094   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Min = <a class="code" href="classllvm_1_1APInt.html#a8f877403433892e14ff0c692cbe9efdf" title="Gets minimum signed value of APInt for a specific bit width.">APInt::getSignedMinValue</a>(W).<a class="code" href="classllvm_1_1APInt.html#aa3464694bcec68b89b4bffd71360b897" title="Sign extend to a new width.">sext</a>(W * 2);
+<a name="l00095"></a>00095   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Max = <a class="code" href="classllvm_1_1APInt.html#a562c9513409b74f02cb3a5c9bae672ea" title="Gets maximum signed value of APInt for a specific bit width.">APInt::getSignedMaxValue</a>(W).<a class="code" href="classllvm_1_1APInt.html#aa3464694bcec68b89b4bffd71360b897" title="Sign extend to a new width.">sext</a>(W * 2);
+<a name="l00096"></a>00096   <span class="keywordflow">return</span> MulExt.<a class="code" href="classllvm_1_1APInt.html#a0cf8014ad2d33b40a6bef55018547f57" title="Signed less than comparison.">slt</a>(Min) || MulExt.<a class="code" href="classllvm_1_1APInt.html#a0671bc479b3d788cc233dc1ce20ebcb5" title="Signed greather than comparison.">sgt</a>(Max);
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 
+<a name="l00099"></a><a class="code" href="classllvm_1_1InstCombiner.html#a8c6772ab80eaa5cba38dc9d7c5d3f313">00099</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a8c6772ab80eaa5cba38dc9d7c5d3f313">InstCombiner::visitMul</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00100"></a>00100   <span class="keywordtype">bool</span> Changed = SimplifyAssociativeOrCommutative(I);
+<a name="l00101"></a>00101   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#a16e6b2e2a8b7efd5ce9a39f39f045502">SimplifyMulInst</a>(Op0, Op1, TD))
+<a name="l00104"></a>00104     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = SimplifyUsingDistributiveLaws(I))
+<a name="l00107"></a>00107     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#aaea0d5ebb8b57ddde2095f80e2e94bb2" title="m_AllOnes() - Match an integer or vector with all bits set to true.">m_AllOnes</a>()))  <span class="comment">// X * -1 == 0 - X</span>
+<a name="l00110"></a>00110     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a073c092ce74a122e898e435e60e84599">BinaryOperator::CreateNeg</a>(Op0, I.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00111"></a>00111   
+<a name="l00112"></a>00112   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *CI = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00113"></a>00113     
+<a name="l00114"></a>00114     <span class="comment">// ((X << C1)*C2) == (X * (C2 << C1))</span>
+<a name="l00115"></a>00115     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *SI = dyn_cast<BinaryOperator>(Op0))
+<a name="l00116"></a>00116       <span class="keywordflow">if</span> (SI->getOpcode() == Instruction::Shl)
+<a name="l00117"></a>00117         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *ShOp = dyn_cast<Constant>(SI->getOperand(1)))
+<a name="l00118"></a>00118           <span class="keywordflow">return</span> BinaryOperator::CreateMul(SI->getOperand(0),
+<a name="l00119"></a>00119                                            <a class="code" href="classllvm_1_1ConstantExpr.html#aa5ad9e9e7cc67e1675d8d1631a73e625">ConstantExpr::getShl</a>(CI, ShOp));
+<a name="l00120"></a>00120     
+<a name="l00121"></a>00121     <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &Val = CI->getValue();
+<a name="l00122"></a>00122     <span class="keywordflow">if</span> (Val.isPowerOf2()) {          <span class="comment">// Replace X*(2^C) with X << C</span>
+<a name="l00123"></a>00123       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *NewCst = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Op0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), Val.logBase2());
+<a name="l00124"></a>00124       <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *Shl = BinaryOperator::CreateShl(Op0, NewCst);
+<a name="l00125"></a>00125       <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1BinaryOperator.html#a07783e6f39803037259a1ebe376c2b1e" title="hasNoSignedWrap - Determine whether the no signed wrap flag is set.">hasNoSignedWrap</a>()) Shl->setHasNoSignedWrap();
+<a name="l00126"></a>00126       <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1BinaryOperator.html#a5b6cd6c043f54b40899aff62e6e40488" title="hasNoUnsignedWrap - Determine whether the no unsigned wrap flag is set.">hasNoUnsignedWrap</a>()) Shl->setHasNoUnsignedWrap();
+<a name="l00127"></a>00127       <span class="keywordflow">return</span> Shl;
+<a name="l00128"></a>00128     }
+<a name="l00129"></a>00129     
+<a name="l00130"></a>00130     <span class="comment">// Canonicalize (X+C1)*CI -> X*CI+C1*CI.</span>
+<a name="l00131"></a>00131     { <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>; <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C1;
+<a name="l00132"></a>00132       <span class="keywordflow">if</span> (Op0-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l00133"></a>00133           <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#a944c25ac9b73b02a17a20a08a25b9b21">m_Add</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(X), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(C1)))) {
+<a name="l00134"></a>00134         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Add = Builder->CreateMul(X, CI);
+<a name="l00135"></a>00135         <span class="keywordflow">return</span> BinaryOperator::CreateAdd(Add, Builder->CreateMul(C1, CI));
+<a name="l00136"></a>00136       }
+<a name="l00137"></a>00137     }
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139     <span class="comment">// (Y - X) * (-(2**n)) -> (X - Y) * (2**n), for positive nonzero n</span>
+<a name="l00140"></a>00140     <span class="comment">// (Y + const) * (-(2**n)) -> (-constY) * (2**n), for positive nonzero n</span>
+<a name="l00141"></a>00141     <span class="comment">// The "* (2**n)" thus becomes a potential shifting opportunity.</span>
+<a name="l00142"></a>00142     {
+<a name="l00143"></a>00143       <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &   Val = CI->getValue();
+<a name="l00144"></a>00144       <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &PosVal = Val.<a class="code" href="classllvm_1_1APInt.html#ae1db5c06081478320b49e5f695b45220" title="Get the absolute value;.">abs</a>();
+<a name="l00145"></a>00145       <span class="keywordflow">if</span> (Val.<a class="code" href="classllvm_1_1APInt.html#a0e9a2d7ec903d191ef029589ec647cb6">isNegative</a>() && PosVal.<a class="code" href="classllvm_1_1APInt.html#af3deb6522c4fe2043fe07af2ec90190c">isPowerOf2</a>()) {
+<a name="l00146"></a>00146         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a> = 0, *<a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a> = 0;
+<a name="l00147"></a>00147         <span class="keywordflow">if</span> (Op0-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) {
+<a name="l00148"></a>00148           <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C1;
+<a name="l00149"></a>00149           <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Sub = 0;
+<a name="l00150"></a>00150           <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#ac3ed5602889a22db44a16e1b97fac5b8">m_Sub</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(<a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(X))))
+<a name="l00151"></a>00151             Sub = Builder->CreateSub(X, <a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>, <span class="stringliteral">"suba"</span>);
+<a name="l00152"></a>00152           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#a944c25ac9b73b02a17a20a08a25b9b21">m_Add</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(<a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(C1))))
+<a name="l00153"></a>00153             Sub = Builder->CreateSub(Builder->CreateNeg(C1), <a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>, <span class="stringliteral">"subc"</span>);
+<a name="l00154"></a>00154           <span class="keywordflow">if</span> (Sub)
+<a name="l00155"></a>00155             <span class="keywordflow">return</span>
+<a name="l00156"></a>00156               BinaryOperator::CreateMul(Sub,
+<a name="l00157"></a>00157                                         <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(<a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>->getType(), PosVal));
+<a name="l00158"></a>00158         }
+<a name="l00159"></a>00159       }
+<a name="l00160"></a>00160     }
+<a name="l00161"></a>00161   }
+<a name="l00162"></a>00162   
+<a name="l00163"></a>00163   <span class="comment">// Simplify mul instructions with a constant RHS.</span>
+<a name="l00164"></a>00164   <span class="keywordflow">if</span> (isa<Constant>(Op1)) {    
+<a name="l00165"></a>00165     <span class="comment">// Try to fold constant mul into select arguments.</span>
+<a name="l00166"></a>00166     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = dyn_cast<SelectInst>(Op0))
+<a name="l00167"></a>00167       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *R = FoldOpIntoSelect(I, SI))
+<a name="l00168"></a>00168         <span class="keywordflow">return</span> R;
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170     <span class="keywordflow">if</span> (isa<PHINode>(Op0))
+<a name="l00171"></a>00171       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoPhi(I))
+<a name="l00172"></a>00172         <span class="keywordflow">return</span> NV;
+<a name="l00173"></a>00173   }
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0v = dyn_castNegVal(Op0))     <span class="comment">// -X * -Y = X*Y</span>
+<a name="l00176"></a>00176     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op1v = dyn_castNegVal(Op1))
+<a name="l00177"></a>00177       <span class="keywordflow">return</span> BinaryOperator::CreateMul(Op0v, Op1v);
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179   <span class="comment">// (X / Y) *  Y = X - (X % Y)</span>
+<a name="l00180"></a>00180   <span class="comment">// (X / Y) * -Y = (X % Y) - X</span>
+<a name="l00181"></a>00181   {
+<a name="l00182"></a>00182     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op1C = Op1;
+<a name="l00183"></a>00183     <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *BO = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a>>(Op0);
+<a name="l00184"></a>00184     <span class="keywordflow">if</span> (!BO ||
+<a name="l00185"></a>00185         (BO-><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::UDiv && 
+<a name="l00186"></a>00186          BO-><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::SDiv)) {
+<a name="l00187"></a>00187       Op1C = Op0;
+<a name="l00188"></a>00188       BO = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a>>(Op1);
+<a name="l00189"></a>00189     }
+<a name="l00190"></a>00190     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Neg = dyn_castNegVal(Op1C);
+<a name="l00191"></a>00191     <span class="keywordflow">if</span> (BO && BO-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l00192"></a>00192         (BO-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1) == Op1C || BO-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1) == Neg) &&
+<a name="l00193"></a>00193         (BO-><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::UDiv ||
+<a name="l00194"></a>00194          BO-><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::SDiv)) {
+<a name="l00195"></a>00195       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0BO = BO-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1BO = BO-><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">// If the division is exact, X % Y is zero, so we end up with X or -X.</span>
+<a name="l00198"></a>00198       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PossiblyExactOperator.html">PossiblyExactOperator</a> *SDiv = dyn_cast<PossiblyExactOperator>(BO))
+<a name="l00199"></a>00199         <span class="keywordflow">if</span> (SDiv->isExact()) {
+<a name="l00200"></a>00200           <span class="keywordflow">if</span> (Op1BO == Op1C)
+<a name="l00201"></a>00201             <span class="keywordflow">return</span> ReplaceInstUsesWith(I, Op0BO);
+<a name="l00202"></a>00202           <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a073c092ce74a122e898e435e60e84599">BinaryOperator::CreateNeg</a>(Op0BO);
+<a name="l00203"></a>00203         }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Rem;
+<a name="l00206"></a>00206       <span class="keywordflow">if</span> (BO-><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::UDiv)
+<a name="l00207"></a>00207         Rem = Builder->CreateURem(Op0BO, Op1BO);
+<a name="l00208"></a>00208       <span class="keywordflow">else</span>
+<a name="l00209"></a>00209         Rem = Builder->CreateSRem(Op0BO, Op1BO);
+<a name="l00210"></a>00210       Rem-><a class="code" href="classllvm_1_1Value.html#ae855357b6c5e6e7ed1869272708a3a84">takeName</a>(BO);
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212       <span class="keywordflow">if</span> (Op1BO == Op1C)
+<a name="l00213"></a>00213         <span class="keywordflow">return</span> BinaryOperator::CreateSub(Op0BO, Rem);
+<a name="l00214"></a>00214       <span class="keywordflow">return</span> BinaryOperator::CreateSub(Rem, Op0BO);
+<a name="l00215"></a>00215     }
+<a name="l00216"></a>00216   }
+<a name="l00217"></a>00217 <span class="comment"></span>
+<a name="l00218"></a>00218 <span class="comment">  /// i1 mul -> i1 and.</span>
+<a name="l00219"></a>00219 <span class="comment"></span>  <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>(1))
+<a name="l00220"></a>00220     <span class="keywordflow">return</span> BinaryOperator::CreateAnd(Op0, Op1);
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222   <span class="comment">// X*(1 << Y) --> X << Y</span>
+<a name="l00223"></a>00223   <span class="comment">// (1 << Y)*X --> X << Y</span>
+<a name="l00224"></a>00224   {
+<a name="l00225"></a>00225     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>;
+<a name="l00226"></a>00226     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#aebdb2700a77d10ae6f0ce115e23d9f77" title="m_One() - Match an integer 1 or a vector with all elements equal to 1.">m_One</a>(), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(Y))))
+<a name="l00227"></a>00227       <span class="keywordflow">return</span> BinaryOperator::CreateShl(Op1, Y);
+<a name="l00228"></a>00228     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#aebdb2700a77d10ae6f0ce115e23d9f77" title="m_One() - Match an integer 1 or a vector with all elements equal to 1.">m_One</a>(), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(Y))))
+<a name="l00229"></a>00229       <span class="keywordflow">return</span> BinaryOperator::CreateShl(Op0, Y);
+<a name="l00230"></a>00230   }
+<a name="l00231"></a>00231   
+<a name="l00232"></a>00232   <span class="comment">// If one of the operands of the multiply is a cast from a boolean value, then</span>
+<a name="l00233"></a>00233   <span class="comment">// we know the bool is either zero or one, so this is a 'masking' multiply.</span>
+<a name="l00234"></a>00234   <span class="comment">//   X * Y (where Y is 0 or 1) -> X & (0-Y)</span>
+<a name="l00235"></a>00235   <span class="keywordflow">if</span> (!I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6f725580f7834e2ca90762965866dad4">isVectorTy</a>()) {
+<a name="l00236"></a>00236     <span class="comment">// -2 is "-1 << 1" so it is all bits set except the low one.</span>
+<a name="l00237"></a>00237     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Negative2(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>(), (uint64_t)-2, <span class="keyword">true</span>);
+<a name="l00238"></a>00238     
+<a name="l00239"></a>00239     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *BoolCast = 0, *OtherOp = 0;
+<a name="l00240"></a>00240     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op0, Negative2))
+<a name="l00241"></a>00241       BoolCast = Op0, OtherOp = Op1;
+<a name="l00242"></a>00242     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op1, Negative2))
+<a name="l00243"></a>00243       BoolCast = Op1, OtherOp = Op0;
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245     <span class="keywordflow">if</span> (BoolCast) {
+<a name="l00246"></a>00246       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = Builder->CreateSub(<a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()),
+<a name="l00247"></a>00247                                     BoolCast);
+<a name="l00248"></a>00248       <span class="keywordflow">return</span> BinaryOperator::CreateAnd(V, OtherOp);
+<a name="l00249"></a>00249     }
+<a name="l00250"></a>00250   }
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252   <span class="keywordflow">return</span> Changed ? &I : 0;
+<a name="l00253"></a>00253 }
+<a name="l00254"></a>00254 
+<a name="l00255"></a><a class="code" href="classllvm_1_1InstCombiner.html#a032fd706f6579bac3061ca85dba86499">00255</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a032fd706f6579bac3061ca85dba86499">InstCombiner::visitFMul</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00256"></a>00256   <span class="keywordtype">bool</span> Changed = SimplifyAssociativeOrCommutative(I);
+<a name="l00257"></a>00257   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259   <span class="comment">// Simplify mul instructions with a constant RHS.</span>
+<a name="l00260"></a>00260   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *Op1C = dyn_cast<Constant>(Op1)) {
+<a name="l00261"></a>00261     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *Op1F = dyn_cast<ConstantFP>(Op1C)) {
+<a name="l00262"></a>00262       <span class="comment">// "In IEEE floating point, x*1 is not equivalent to x for nans.  However,</span>
+<a name="l00263"></a>00263       <span class="comment">// ANSI says we can drop signals, so we can do this anyway." (from GCC)</span>
+<a name="l00264"></a>00264       <span class="keywordflow">if</span> (Op1F->isExactlyValue(1.0))
+<a name="l00265"></a>00265         <span class="keywordflow">return</span> ReplaceInstUsesWith(I, Op0);  <span class="comment">// Eliminate 'fmul double %X, 1.0'</span>
+<a name="l00266"></a>00266     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantDataVector.html">ConstantDataVector</a> *Op1V = dyn_cast<ConstantDataVector>(Op1C)) {
+<a name="l00267"></a>00267       <span class="comment">// As above, vector X*splat(1.0) -> X in all defined cases.</span>
+<a name="l00268"></a>00268       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = dyn_cast_or_null<ConstantFP>(Op1V->getSplatValue()))
+<a name="l00269"></a>00269         <span class="keywordflow">if</span> (<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>->isExactlyValue(1.0))
+<a name="l00270"></a>00270           <span class="keywordflow">return</span> ReplaceInstUsesWith(I, Op0);
+<a name="l00271"></a>00271     }
+<a name="l00272"></a>00272 
+<a name="l00273"></a>00273     <span class="comment">// Try to fold constant mul into select arguments.</span>
+<a name="l00274"></a>00274     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = dyn_cast<SelectInst>(Op0))
+<a name="l00275"></a>00275       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *R = FoldOpIntoSelect(I, SI))
+<a name="l00276"></a>00276         <span class="keywordflow">return</span> R;
+<a name="l00277"></a>00277 
+<a name="l00278"></a>00278     <span class="keywordflow">if</span> (isa<PHINode>(Op0))
+<a name="l00279"></a>00279       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoPhi(I))
+<a name="l00280"></a>00280         <span class="keywordflow">return</span> NV;
+<a name="l00281"></a>00281   }
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0v = dyn_castFNegVal(Op0))     <span class="comment">// -X * -Y = X*Y</span>
+<a name="l00284"></a>00284     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op1v = dyn_castFNegVal(Op1))
+<a name="l00285"></a>00285       <span class="keywordflow">return</span> BinaryOperator::CreateFMul(Op0v, Op1v);
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287   <span class="keywordflow">return</span> Changed ? &I : 0;
+<a name="l00288"></a>00288 }
+<a name="l00289"></a>00289 <span class="comment"></span>
+<a name="l00290"></a>00290 <span class="comment">/// SimplifyDivRemOfSelect - Try to fold a divide or remainder of a select</span>
+<a name="l00291"></a>00291 <span class="comment">/// instruction.</span>
+<a name="l00292"></a><a class="code" href="classllvm_1_1InstCombiner.html#aae14e514ac5ec1e7f0b7b4470fc3fe17">00292</a> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1InstCombiner.html#aae14e514ac5ec1e7f0b7b4470fc3fe17">InstCombiner::SimplifyDivRemOfSelect</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00293"></a>00293   <a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = cast<SelectInst>(I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00294"></a>00294   
+<a name="l00295"></a>00295   <span class="comment">// div/rem X, (Cond ? 0 : Y) -> div/rem X, Y</span>
+<a name="l00296"></a>00296   <span class="keywordtype">int</span> NonNullOperand = -1;
+<a name="l00297"></a>00297   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1ARM__MB.html#ad70272e2a9ec2a7e3a497458e1edbc85aed0b9bef861c96eee19e89db753db7b2">ST</a> = dyn_cast<Constant>(SI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00298"></a>00298     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__MB.html#ad70272e2a9ec2a7e3a497458e1edbc85aed0b9bef861c96eee19e89db753db7b2">ST</a>->isNullValue())
+<a name="l00299"></a>00299       NonNullOperand = 2;
+<a name="l00300"></a>00300   <span class="comment">// div/rem X, (Cond ? Y : 0) -> div/rem X, Y</span>
+<a name="l00301"></a>00301   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1ARM__MB.html#ad70272e2a9ec2a7e3a497458e1edbc85aed0b9bef861c96eee19e89db753db7b2">ST</a> = dyn_cast<Constant>(SI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(2)))
+<a name="l00302"></a>00302     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__MB.html#ad70272e2a9ec2a7e3a497458e1edbc85aed0b9bef861c96eee19e89db753db7b2">ST</a>->isNullValue())
+<a name="l00303"></a>00303       NonNullOperand = 1;
+<a name="l00304"></a>00304   
+<a name="l00305"></a>00305   <span class="keywordflow">if</span> (NonNullOperand == -1)
+<a name="l00306"></a>00306     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00307"></a>00307   
+<a name="l00308"></a>00308   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *SelectCond = SI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00309"></a>00309   
+<a name="l00310"></a>00310   <span class="comment">// Change the div/rem to use 'Y' instead of the select.</span>
+<a name="l00311"></a>00311   I.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(1, SI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(NonNullOperand));
+<a name="l00312"></a>00312   
+<a name="l00313"></a>00313   <span class="comment">// Okay, we know we replace the operand of the div/rem with 'Y' with no</span>
+<a name="l00314"></a>00314   <span class="comment">// problem.  However, the select, or the condition of the select may have</span>
+<a name="l00315"></a>00315   <span class="comment">// multiple uses.  Based on our knowledge that the operand must be non-zero,</span>
+<a name="l00316"></a>00316   <span class="comment">// propagate the known value for the select into other uses of it, and</span>
+<a name="l00317"></a>00317   <span class="comment">// propagate a known value of the condition into its other users.</span>
+<a name="l00318"></a>00318   
+<a name="l00319"></a>00319   <span class="comment">// If the select and condition only have a single use, don't bother with this,</span>
+<a name="l00320"></a>00320   <span class="comment">// early exit.</span>
+<a name="l00321"></a>00321   <span class="keywordflow">if</span> (SI-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>() && SelectCond-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00322"></a>00322     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00323"></a>00323   
+<a name="l00324"></a>00324   <span class="comment">// Scan the current block backward, looking for other uses of SI.</span>
+<a name="l00325"></a>00325   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> BBI = &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>, BBFront = I.<a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>();
+<a name="l00326"></a>00326   
+<a name="l00327"></a>00327   <span class="keywordflow">while</span> (BBI != BBFront) {
+<a name="l00328"></a>00328     --BBI;
+<a name="l00329"></a>00329     <span class="comment">// If we found a call to a function, we can't assume it will return, so</span>
+<a name="l00330"></a>00330     <span class="comment">// information from below it cannot be propagated above it.</span>
+<a name="l00331"></a>00331     <span class="keywordflow">if</span> (isa<CallInst>(BBI) && !isa<IntrinsicInst>(BBI))
+<a name="l00332"></a>00332       <span class="keywordflow">break</span>;
+<a name="l00333"></a>00333     
+<a name="l00334"></a>00334     <span class="comment">// Replace uses of the select or its condition with the known values.</span>
+<a name="l00335"></a>00335     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1Use.html">Instruction::op_iterator</a> I = BBI->op_begin(), E = BBI->op_end();
+<a name="l00336"></a>00336          I != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00337"></a>00337       <span class="keywordflow">if</span> (*I == SI) {
+<a name="l00338"></a>00338         *I = SI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(NonNullOperand);
+<a name="l00339"></a>00339         Worklist.Add(BBI);
+<a name="l00340"></a>00340       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*I == SelectCond) {
+<a name="l00341"></a>00341         *I = NonNullOperand == 1 ? <a class="code" href="InstructionSimplify_8cpp.html#a565dd825f238fa0a8c4bbfe562635f7c">ConstantInt::getTrue</a>(BBI->getContext()) :
+<a name="l00342"></a>00342                                    <a class="code" href="classllvm_1_1ConstantInt.html#aa7cce62ac5cc6df09cce0535874336b7">ConstantInt::getFalse</a>(BBI->getContext());
+<a name="l00343"></a>00343         Worklist.Add(BBI);
+<a name="l00344"></a>00344       }
+<a name="l00345"></a>00345     }
+<a name="l00346"></a>00346     
+<a name="l00347"></a>00347     <span class="comment">// If we past the instruction, quit looking for it.</span>
+<a name="l00348"></a>00348     <span class="keywordflow">if</span> (&*BBI == SI)
+<a name="l00349"></a>00349       SI = 0;
+<a name="l00350"></a>00350     <span class="keywordflow">if</span> (&*BBI == SelectCond)
+<a name="l00351"></a>00351       SelectCond = 0;
+<a name="l00352"></a>00352     
+<a name="l00353"></a>00353     <span class="comment">// If we ran out of things to eliminate, break out of the loop.</span>
+<a name="l00354"></a>00354     <span class="keywordflow">if</span> (SelectCond == 0 && SI == 0)
+<a name="l00355"></a>00355       <span class="keywordflow">break</span>;
+<a name="l00356"></a>00356     
+<a name="l00357"></a>00357   }
+<a name="l00358"></a>00358   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00359"></a>00359 }
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361 <span class="comment"></span>
+<a name="l00362"></a>00362 <span class="comment">/// This function implements the transforms common to both integer division</span>
+<a name="l00363"></a>00363 <span class="comment">/// instructions (udiv and sdiv). It is called by the visitors to those integer</span>
+<a name="l00364"></a>00364 <span class="comment">/// division instructions.</span>
+<a name="l00365"></a>00365 <span class="comment">/// @brief Common integer divide transforms</span>
+<a name="l00366"></a><a class="code" href="classllvm_1_1InstCombiner.html#a1b344947e9e0c6e1cdc4b5716cd52ab8">00366</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a1b344947e9e0c6e1cdc4b5716cd52ab8" title="Common integer divide transforms.">InstCombiner::commonIDivTransforms</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00367"></a>00367   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00368"></a>00368 
+<a name="l00369"></a>00369   <span class="comment">// The RHS is known non-zero.</span>
+<a name="l00370"></a>00370   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineMulDivRem_8cpp.html#a823f9e4f999cff8e782a56058320287a">simplifyValueKnownNonZero</a>(I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), *<span class="keyword">this</span>)) {
+<a name="l00371"></a>00371     I.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(1, V);
+<a name="l00372"></a>00372     <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00373"></a>00373   }
+<a name="l00374"></a>00374   
+<a name="l00375"></a>00375   <span class="comment">// Handle cases involving: [su]div X, (select Cond, Y, Z)</span>
+<a name="l00376"></a>00376   <span class="comment">// This does not apply for fdiv.</span>
+<a name="l00377"></a>00377   <span class="keywordflow">if</span> (isa<SelectInst>(Op1) && SimplifyDivRemOfSelect(I))
+<a name="l00378"></a>00378     <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *RHS = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00381"></a>00381     <span class="comment">// (X / C1) / C2  -> X / (C1*C2)</span>
+<a name="l00382"></a>00382     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *LHS = dyn_cast<Instruction>(Op0))
+<a name="l00383"></a>00383       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a>(LHS->getOpcode()) == I.<a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>())
+<a name="l00384"></a>00384         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *LHSRHS = dyn_cast<ConstantInt>(LHS->getOperand(1))) {
+<a name="l00385"></a>00385           <span class="keywordflow">if</span> (<a class="code" href="InstCombineMulDivRem_8cpp.html#a6a2f9c787f06fbf87c28a469ffb5f000">MultiplyOverflows</a>(RHS, LHSRHS,
+<a name="l00386"></a>00386                                 I.<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::SDiv))
+<a name="l00387"></a>00387             <span class="keywordflow">return</span> ReplaceInstUsesWith(I, <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00388"></a>00388           <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(I.<a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>(), LHS->getOperand(0),
+<a name="l00389"></a>00389                                         <a class="code" href="classllvm_1_1ConstantExpr.html#aa3e1005525fe79e631f1fe5bd91fdf3c">ConstantExpr::getMul</a>(RHS, LHSRHS));
+<a name="l00390"></a>00390         }
+<a name="l00391"></a>00391 
+<a name="l00392"></a>00392     <span class="keywordflow">if</span> (!RHS->isZero()) { <span class="comment">// avoid X udiv 0</span>
+<a name="l00393"></a>00393       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = dyn_cast<SelectInst>(Op0))
+<a name="l00394"></a>00394         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *R = FoldOpIntoSelect(I, SI))
+<a name="l00395"></a>00395           <span class="keywordflow">return</span> R;
+<a name="l00396"></a>00396       <span class="keywordflow">if</span> (isa<PHINode>(Op0))
+<a name="l00397"></a>00397         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoPhi(I))
+<a name="l00398"></a>00398           <span class="keywordflow">return</span> NV;
+<a name="l00399"></a>00399     }
+<a name="l00400"></a>00400   }
+<a name="l00401"></a>00401 
+<a name="l00402"></a>00402   <span class="comment">// See if we can fold away this div instruction.</span>
+<a name="l00403"></a>00403   <span class="keywordflow">if</span> (SimplifyDemandedInstructionBits(I))
+<a name="l00404"></a>00404     <span class="keywordflow">return</span> &I;
+<a name="l00405"></a>00405 
+<a name="l00406"></a>00406   <span class="comment">// (X - (X rem Y)) / Y -> X / Y; usually originates as ((X / Y) * Y) / Y</span>
+<a name="l00407"></a>00407   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a> = 0, *Z = 0;
+<a name="l00408"></a>00408   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#ac3ed5602889a22db44a16e1b97fac5b8">m_Sub</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(X), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(Z)))) { <span class="comment">// (X - Z) / Y; Y = Op1</span>
+<a name="l00409"></a>00409     <span class="keywordtype">bool</span> isSigned = I.<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::SDiv;
+<a name="l00410"></a>00410     <span class="keywordflow">if</span> ((isSigned && <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Z, <a class="code" href="namespacellvm_1_1PatternMatch.html#a42df6a41563b50a3fd1872230ed0b5ec">m_SRem</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a2d9861feadd3a09792967a012559e7b2" title="m_Specific - Match if we have a specific specified value.">m_Specific</a>(X), <a class="code" href="namespacellvm_1_1PatternMatch.html#a2d9861feadd3a09792967a012559e7b2" title="m_Specific - Match if we have a specific specified value.">m_Specific</a>(Op1)))) ||
+<a name="l00411"></a>00411         (!isSigned && <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Z, <a class="code" href="namespacellvm_1_1PatternMatch.html#ae1a04895305aaea96e5e82d95c39bbe0">m_URem</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a2d9861feadd3a09792967a012559e7b2" title="m_Specific - Match if we have a specific specified value.">m_Specific</a>(X), <a class="code" href="namespacellvm_1_1PatternMatch.html#a2d9861feadd3a09792967a012559e7b2" title="m_Specific - Match if we have a specific specified value.">m_Specific</a>(Op1)))))
+<a name="l00412"></a>00412       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(I.<a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>(), <a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>, Op1);
+<a name="l00413"></a>00413   }
+<a name="l00414"></a>00414 
+<a name="l00415"></a>00415   <span class="keywordflow">return</span> 0;
+<a name="l00416"></a>00416 }
+<a name="l00417"></a>00417 <span class="comment"></span>
+<a name="l00418"></a>00418 <span class="comment">/// dyn_castZExtVal - Checks if V is a zext or constant that can</span>
+<a name="l00419"></a>00419 <span class="comment">/// be truncated to Ty without losing bits.</span>
+<a name="l00420"></a><a class="code" href="InstCombineMulDivRem_8cpp.html#a4b5e643a45da5115a99284a9f513b143">00420</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="InstCombineMulDivRem_8cpp.html#a4b5e643a45da5115a99284a9f513b143">dyn_castZExtVal</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty) {
+<a name="l00421"></a>00421   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a> *Z = dyn_cast<ZExtInst>(V)) {
+<a name="l00422"></a>00422     <span class="keywordflow">if</span> (Z->getSrcTy() == Ty)
+<a name="l00423"></a>00423       <span class="keywordflow">return</span> Z->getOperand(0);
+<a name="l00424"></a>00424   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<ConstantInt>(V)) {
+<a name="l00425"></a>00425     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue().getActiveBits() <= cast<IntegerType>(Ty)-><a class="code" href="ValueTracking_8cpp.html#a06c14477546c3a0eb4c79ff007ea2375">getBitWidth</a>())
+<a name="l00426"></a>00426       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ConstantExpr.html#aca5cab6b8d2be24d0c857cc4a831feec">ConstantExpr::getTrunc</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>, Ty);
+<a name="l00427"></a>00427   }
+<a name="l00428"></a>00428   <span class="keywordflow">return</span> 0;
+<a name="l00429"></a>00429 }
+<a name="l00430"></a>00430 
+<a name="l00431"></a><a class="code" href="classllvm_1_1InstCombiner.html#a0ca240e4472a1ce75d975ae0b8b8d2ec">00431</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a0ca240e4472a1ce75d975ae0b8b8d2ec">InstCombiner::visitUDiv</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00432"></a>00432   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00433"></a>00433 
+<a name="l00434"></a>00434   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#ad7ee9212902791ff198d39227fb73f9e">SimplifyUDivInst</a>(Op0, Op1, TD))
+<a name="l00435"></a>00435     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00436"></a>00436 
+<a name="l00437"></a>00437   <span class="comment">// Handle the integer div common cases</span>
+<a name="l00438"></a>00438   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Common = commonIDivTransforms(I))
+<a name="l00439"></a>00439     <span class="keywordflow">return</span> Common;
+<a name="l00440"></a>00440   
+<a name="l00441"></a>00441   { 
+<a name="l00442"></a>00442     <span class="comment">// X udiv 2^C -> X >> C</span>
+<a name="l00443"></a>00443     <span class="comment">// Check to see if this is an unsigned division with an exact power of 2,</span>
+<a name="l00444"></a>00444     <span class="comment">// if so, convert to a right shift.</span>
+<a name="l00445"></a>00445     <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>;
+<a name="l00446"></a>00446     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C))) {
+<a name="l00447"></a>00447       <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *<a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">LShr</a> =
+<a name="l00448"></a>00448       BinaryOperator::CreateLShr(Op0, 
+<a name="l00449"></a>00449                                  <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(Op0-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 
+<a name="l00450"></a>00450                                                   C-><a class="code" href="classllvm_1_1APInt.html#a474f562a4871689af74b0fd1ae42daa1">logBase2</a>()));
+<a name="l00451"></a>00451       <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>()) LShr-><a class="code" href="classllvm_1_1BinaryOperator.html#aac502d7d65e2996cf6b819b14e17499c">setIsExact</a>();
+<a name="l00452"></a>00452       <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">LShr</a>;
+<a name="l00453"></a>00453     }
+<a name="l00454"></a>00454   }
+<a name="l00455"></a>00455 
+<a name="l00456"></a>00456   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00457"></a>00457     <span class="comment">// X udiv C, where C >= signbit</span>
+<a name="l00458"></a>00458     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>->getValue().isNegative()) {
+<a name="l00459"></a>00459       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *IC = Builder->CreateICmpULT(Op0, <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>);
+<a name="l00460"></a>00460       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SelectInst.html#a8bce457e977f23507c48c9dfd7052990">SelectInst::Create</a>(IC, <a class="code" href="classllvm_1_1Constant.html#aa6574d526b3e38a28f688a7bb4325c2c">Constant::getNullValue</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()),
+<a name="l00461"></a>00461                                 <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), 1));
+<a name="l00462"></a>00462     }
+<a name="l00463"></a>00463   }
+<a name="l00464"></a>00464 
+<a name="l00465"></a>00465   <span class="comment">// (x lshr C1) udiv C2 --> x udiv (C2 << C1)</span>
+<a name="l00466"></a>00466   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C2 = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00467"></a>00467     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">X</a>;
+<a name="l00468"></a>00468     <a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *C1;
+<a name="l00469"></a>00469     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op0, <a class="code" href="namespacellvm_1_1PatternMatch.html#aa08fee11e8a5ec10c0cc2a7abbbd799a">m_LShr</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(X), <a class="code" href="namespacellvm_1_1PatternMatch.html#a34a92072122412c6020d4afb43725bf4" title="m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.">m_ConstantInt</a>(C1)))) {
+<a name="l00470"></a>00470       <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> <a class="code" href="regutils_8h.html#a1fa2460e32327ade49189c95740bc1b5">NC</a> = C2->getValue().shl(C1-><a class="code" href="classllvm_1_1ConstantInt.html#a024bb83a7f01e7661ea72ff7dcc460f5" title="Get the constant's value with a saturation limit.">getLimitedValue</a>(C1-><a class="code" href="classllvm_1_1ConstantInt.html#a58f423c78837f9854278b6026b34714a" title="getBitWidth - Return the bitwidth of this constant.">getBitWidth</a>()-1));
+<a name="l00471"></a>00471       <span class="keywordflow">return</span> BinaryOperator::CreateUDiv(X, Builder->getInt(NC));
+<a name="l00472"></a>00472     }
+<a name="l00473"></a>00473   }
+<a name="l00474"></a>00474 
+<a name="l00475"></a>00475   <span class="comment">// X udiv (C1 << N), where C1 is "1<<C2"  -->  X >> (N+C2)</span>
+<a name="l00476"></a>00476   { <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *CI; <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a>;
+<a name="l00477"></a>00477     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(CI), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(N))) ||
+<a name="l00478"></a>00478         <a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#a2cbdca7c8267aac6914d674f8e81841b" title="m_ZExt">m_ZExt</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(CI), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(N))))) {
+<a name="l00479"></a>00479       <span class="keywordflow">if</span> (*CI != 1)
+<a name="l00480"></a>00480         N = Builder->CreateAdd(N,
+<a name="l00481"></a>00481                                <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(N-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), CI-><a class="code" href="classllvm_1_1APInt.html#a474f562a4871689af74b0fd1ae42daa1">logBase2</a>()));
+<a name="l00482"></a>00482       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a> *Z = dyn_cast<ZExtInst>(Op1))
+<a name="l00483"></a>00483         N = Builder->CreateZExt(N, Z->getDestTy());
+<a name="l00484"></a>00484       <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>())
+<a name="l00485"></a>00485         <span class="keywordflow">return</span> BinaryOperator::CreateExactLShr(Op0, N);
+<a name="l00486"></a>00486       <span class="keywordflow">return</span> BinaryOperator::CreateLShr(Op0, N);
+<a name="l00487"></a>00487     }
+<a name="l00488"></a>00488   }
+<a name="l00489"></a>00489   
+<a name="l00490"></a>00490   <span class="comment">// udiv X, (Select Cond, C1, C2) --> Select Cond, (shr X, C1), (shr X, C2)</span>
+<a name="l00491"></a>00491   <span class="comment">// where C1&C2 are powers of two.</span>
+<a name="l00492"></a>00492   { <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Cond; <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *C1, *C2;
+<a name="l00493"></a>00493     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#af254e0a0a7277f1b415dbabc3ee37fb6">m_Select</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(Cond), <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C1), <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C2)))) {
+<a name="l00494"></a>00494       <span class="comment">// Construct the "on true" case of the select</span>
+<a name="l00495"></a>00495       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *TSI = Builder->CreateLShr(Op0, C1-><a class="code" href="classllvm_1_1APInt.html#a474f562a4871689af74b0fd1ae42daa1">logBase2</a>(), Op1->getName()+<span class="stringliteral">".t"</span>,
+<a name="l00496"></a>00496                                        I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>());
+<a name="l00497"></a>00497   
+<a name="l00498"></a>00498       <span class="comment">// Construct the "on false" case of the select</span>
+<a name="l00499"></a>00499       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *FSI = Builder->CreateLShr(Op0, C2-><a class="code" href="classllvm_1_1APInt.html#a474f562a4871689af74b0fd1ae42daa1">logBase2</a>(), Op1->getName()+<span class="stringliteral">".f"</span>,
+<a name="l00500"></a>00500                                        I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>());
+<a name="l00501"></a>00501       
+<a name="l00502"></a>00502       <span class="comment">// construct the select instruction and return it.</span>
+<a name="l00503"></a>00503       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SelectInst.html#a8bce457e977f23507c48c9dfd7052990">SelectInst::Create</a>(Cond, TSI, FSI);
+<a name="l00504"></a>00504     }
+<a name="l00505"></a>00505   }
+<a name="l00506"></a>00506 
+<a name="l00507"></a>00507   <span class="comment">// (zext A) udiv (zext B) --> zext (A udiv B)</span>
+<a name="l00508"></a>00508   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a> *ZOp0 = dyn_cast<ZExtInst>(Op0))
+<a name="l00509"></a>00509     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ZOp1 = <a class="code" href="InstCombineMulDivRem_8cpp.html#a4b5e643a45da5115a99284a9f513b143">dyn_castZExtVal</a>(Op1, ZOp0->getSrcTy()))
+<a name="l00510"></a>00510       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a>(Builder->CreateUDiv(ZOp0->getOperand(0), ZOp1, <span class="stringliteral">"div"</span>,
+<a name="l00511"></a>00511                                               I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>()),
+<a name="l00512"></a>00512                           I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00513"></a>00513 
+<a name="l00514"></a>00514   <span class="keywordflow">return</span> 0;
+<a name="l00515"></a>00515 }
+<a name="l00516"></a>00516 
+<a name="l00517"></a><a class="code" href="classllvm_1_1InstCombiner.html#a9309eb5893efa752da8f3382d5fa95c6">00517</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a9309eb5893efa752da8f3382d5fa95c6">InstCombiner::visitSDiv</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00518"></a>00518   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00519"></a>00519 
+<a name="l00520"></a>00520   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#a4da5b3524ef6e4182893b97b5d8aadad">SimplifySDivInst</a>(Op0, Op1, TD))
+<a name="l00521"></a>00521     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00522"></a>00522 
+<a name="l00523"></a>00523   <span class="comment">// Handle the integer div common cases</span>
+<a name="l00524"></a>00524   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Common = commonIDivTransforms(I))
+<a name="l00525"></a>00525     <span class="keywordflow">return</span> Common;
+<a name="l00526"></a>00526 
+<a name="l00527"></a>00527   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *RHS = dyn_cast<ConstantInt>(Op1)) {
+<a name="l00528"></a>00528     <span class="comment">// sdiv X, -1 == -X</span>
+<a name="l00529"></a>00529     <span class="keywordflow">if</span> (RHS->isAllOnesValue())
+<a name="l00530"></a>00530       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1BinaryOperator.html#a073c092ce74a122e898e435e60e84599">BinaryOperator::CreateNeg</a>(Op0);
+<a name="l00531"></a>00531 
+<a name="l00532"></a>00532     <span class="comment">// sdiv X, C  -->  ashr exact X, log2(C)</span>
+<a name="l00533"></a>00533     <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1BinaryOperator.html#a0f67e7208255f5088f0d515185109174" title="isExact - Determine whether the exact flag is set.">isExact</a>() && RHS->getValue().isNonNegative() &&
+<a name="l00534"></a>00534         RHS->getValue().isPowerOf2()) {
+<a name="l00535"></a>00535       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ShAmt = <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">llvm::ConstantInt::get</a>(RHS->getType(),
+<a name="l00536"></a>00536                                             RHS->getValue().exactLogBase2());
+<a name="l00537"></a>00537       <span class="keywordflow">return</span> BinaryOperator::CreateExactAShr(Op0, ShAmt, I.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00538"></a>00538     }
+<a name="l00539"></a>00539 
+<a name="l00540"></a>00540     <span class="comment">// -X/C  -->  X/-C  provided the negation doesn't overflow.</span>
+<a name="l00541"></a>00541     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SubOperator.html">SubOperator</a> *Sub = dyn_cast<SubOperator>(Op0))
+<a name="l00542"></a>00542       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Sub->getOperand(0), <a class="code" href="namespacellvm_1_1PatternMatch.html#ab3b5beca3a0dedd21adac813123a2ae6">m_Zero</a>()) && Sub->hasNoSignedWrap())
+<a name="l00543"></a>00543         <span class="keywordflow">return</span> BinaryOperator::CreateSDiv(Sub->getOperand(1),
+<a name="l00544"></a>00544                                           <a class="code" href="classllvm_1_1ConstantExpr.html#afa29f0cd072ab9b3a2630681ffe5760f">ConstantExpr::getNeg</a>(RHS));
+<a name="l00545"></a>00545   }
+<a name="l00546"></a>00546 
+<a name="l00547"></a>00547   <span class="comment">// If the sign bits of both operands are zero (i.e. we can prove they are</span>
+<a name="l00548"></a>00548   <span class="comment">// unsigned inputs), turn this into a udiv.</span>
+<a name="l00549"></a>00549   <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) {
+<a name="l00550"></a>00550     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Mask(<a class="code" href="classllvm_1_1APInt.html#a2e5e9f65d911e80a46d3098933794056" title="Get the SignBit for a specific bit width.">APInt::getSignBit</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>()));
+<a name="l00551"></a>00551     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op0, Mask)) {
+<a name="l00552"></a>00552       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op1, Mask)) {
+<a name="l00553"></a>00553         <span class="comment">// X sdiv Y -> X udiv Y, iff X and Y don't have sign bit set</span>
+<a name="l00554"></a>00554         <span class="keywordflow">return</span> BinaryOperator::CreateUDiv(Op0, Op1, I.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00555"></a>00555       }
+<a name="l00556"></a>00556       
+<a name="l00557"></a>00557       <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>()))) {
+<a name="l00558"></a>00558         <span class="comment">// X sdiv (1 << Y) -> X udiv (1 << Y) ( -> X u>> Y)</span>
+<a name="l00559"></a>00559         <span class="comment">// Safe because the only negative value (1 << Y) can take on is</span>
+<a name="l00560"></a>00560         <span class="comment">// INT_MIN, and X sdiv INT_MIN == X udiv INT_MIN == 0 if X doesn't have</span>
+<a name="l00561"></a>00561         <span class="comment">// the sign bit set.</span>
+<a name="l00562"></a>00562         <span class="keywordflow">return</span> BinaryOperator::CreateUDiv(Op0, Op1, I.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00563"></a>00563       }
+<a name="l00564"></a>00564     }
+<a name="l00565"></a>00565   }
+<a name="l00566"></a>00566   
+<a name="l00567"></a>00567   <span class="keywordflow">return</span> 0;
+<a name="l00568"></a>00568 }
+<a name="l00569"></a>00569 
+<a name="l00570"></a><a class="code" href="classllvm_1_1InstCombiner.html#a6aee22d0bb63ae90e84b2049feea167e">00570</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a6aee22d0bb63ae90e84b2049feea167e">InstCombiner::visitFDiv</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00571"></a>00571   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00572"></a>00572 
+<a name="l00573"></a>00573   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#a1077d93bf3babca286b7a389f78e70cb">SimplifyFDivInst</a>(Op0, Op1, TD))
+<a name="l00574"></a>00574     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00575"></a>00575 
+<a name="l00576"></a>00576   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *Op1C = dyn_cast<ConstantFP>(Op1)) {
+<a name="l00577"></a>00577     <span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &Op1F = Op1C->getValueAPF();
+<a name="l00578"></a>00578 
+<a name="l00579"></a>00579     <span class="comment">// If the divisor has an exact multiplicative inverse we can turn the fdiv</span>
+<a name="l00580"></a>00580     <span class="comment">// into a cheaper fmul.</span>
+<a name="l00581"></a>00581     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> Reciprocal(Op1F.<a class="code" href="classllvm_1_1APFloat.html#a4f9fe1ca06b44499c16742431c00cb34">getSemantics</a>());
+<a name="l00582"></a>00582     <span class="keywordflow">if</span> (Op1F.<a class="code" href="classllvm_1_1APFloat.html#ae05012c5159493832065a06aecc4f954">getExactInverse</a>(&Reciprocal)) {
+<a name="l00583"></a>00583       <a class="code" href="classllvm_1_1ConstantFP.html">ConstantFP</a> *RFP = <a class="code" href="classllvm_1_1ConstantFP.html#a5eb8f7a5d3cfdd127ad9db2e425e14eb">ConstantFP::get</a>(Builder->getContext(), Reciprocal);
+<a name="l00584"></a>00584       <span class="keywordflow">return</span> BinaryOperator::CreateFMul(Op0, RFP);
+<a name="l00585"></a>00585     }
+<a name="l00586"></a>00586   }
+<a name="l00587"></a>00587 
+<a name="l00588"></a>00588   <span class="keywordflow">return</span> 0;
+<a name="l00589"></a>00589 }
+<a name="l00590"></a>00590 <span class="comment"></span>
+<a name="l00591"></a>00591 <span class="comment">/// This function implements the transforms common to both integer remainder</span>
+<a name="l00592"></a>00592 <span class="comment">/// instructions (urem and srem). It is called by the visitors to those integer</span>
+<a name="l00593"></a>00593 <span class="comment">/// remainder instructions.</span>
+<a name="l00594"></a>00594 <span class="comment">/// @brief Common integer remainder transforms</span>
+<a name="l00595"></a><a class="code" href="classllvm_1_1InstCombiner.html#a88f3fc8edf9d54c62e09e1545d449ae8">00595</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a88f3fc8edf9d54c62e09e1545d449ae8" title="Common integer remainder transforms.">InstCombiner::commonIRemTransforms</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00596"></a>00596   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00597"></a>00597 
+<a name="l00598"></a>00598   <span class="comment">// The RHS is known non-zero.</span>
+<a name="l00599"></a>00599   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="InstCombineMulDivRem_8cpp.html#a823f9e4f999cff8e782a56058320287a">simplifyValueKnownNonZero</a>(I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1), *<span class="keyword">this</span>)) {
+<a name="l00600"></a>00600     I.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(1, V);
+<a name="l00601"></a>00601     <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00602"></a>00602   }
+<a name="l00603"></a>00603 
+<a name="l00604"></a>00604   <span class="comment">// Handle cases involving: rem X, (select Cond, Y, Z)</span>
+<a name="l00605"></a>00605   <span class="keywordflow">if</span> (isa<SelectInst>(Op1) && SimplifyDivRemOfSelect(I))
+<a name="l00606"></a>00606     <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00607"></a>00607 
+<a name="l00608"></a>00608   <span class="keywordflow">if</span> (isa<ConstantInt>(Op1)) {
+<a name="l00609"></a>00609     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Op0I = dyn_cast<Instruction>(Op0)) {
+<a name="l00610"></a>00610       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1SelectInst.html">SelectInst</a> *SI = dyn_cast<SelectInst>(Op0I)) {
+<a name="l00611"></a>00611         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *R = FoldOpIntoSelect(I, SI))
+<a name="l00612"></a>00612           <span class="keywordflow">return</span> R;
+<a name="l00613"></a>00613       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<PHINode>(Op0I)) {
+<a name="l00614"></a>00614         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *NV = FoldOpIntoPhi(I))
+<a name="l00615"></a>00615           <span class="keywordflow">return</span> NV;
+<a name="l00616"></a>00616       }
+<a name="l00617"></a>00617 
+<a name="l00618"></a>00618       <span class="comment">// See if we can fold away this rem instruction.</span>
+<a name="l00619"></a>00619       <span class="keywordflow">if</span> (SimplifyDemandedInstructionBits(I))
+<a name="l00620"></a>00620         <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00621"></a>00621     }
+<a name="l00622"></a>00622   }
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624   <span class="keywordflow">return</span> 0;
+<a name="l00625"></a>00625 }
+<a name="l00626"></a>00626 
+<a name="l00627"></a><a class="code" href="classllvm_1_1InstCombiner.html#a1946cf629a42a59130f6f1d3e9f6786f">00627</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a1946cf629a42a59130f6f1d3e9f6786f">InstCombiner::visitURem</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00628"></a>00628   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00629"></a>00629 
+<a name="l00630"></a>00630   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#acf46bab8eca4c3c7204079f2cf80ab35">SimplifyURemInst</a>(Op0, Op1, TD))
+<a name="l00631"></a>00631     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00632"></a>00632 
+<a name="l00633"></a>00633   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *common = commonIRemTransforms(I))
+<a name="l00634"></a>00634     <span class="keywordflow">return</span> common;
+<a name="l00635"></a>00635   
+<a name="l00636"></a>00636   <span class="comment">// X urem C^2 -> X and C-1</span>
+<a name="l00637"></a>00637   { <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a>;
+<a name="l00638"></a>00638     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C)))
+<a name="l00639"></a>00639       <span class="keywordflow">return</span> BinaryOperator::CreateAnd(Op0,
+<a name="l00640"></a>00640                                        <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), *C-1));
+<a name="l00641"></a>00641   }
+<a name="l00642"></a>00642 
+<a name="l00643"></a>00643   <span class="comment">// Turn A % (C << N), where C is 2^k, into A & ((C << N)-1)  </span>
+<a name="l00644"></a>00644   <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#a37668d9884c78ac77254cf9fb8a4276a">m_Shl</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(), <a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>()))) {
+<a name="l00645"></a>00645     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *N1 = <a class="code" href="classllvm_1_1Constant.html#a4d51384de6e1798bb6aa875aebeea9f0" title="Get the all ones value.">Constant::getAllOnesValue</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00646"></a>00646     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Add = Builder->CreateAdd(Op1, N1);
+<a name="l00647"></a>00647     <span class="keywordflow">return</span> BinaryOperator::CreateAnd(Op0, Add);
+<a name="l00648"></a>00648   }
+<a name="l00649"></a>00649 
+<a name="l00650"></a>00650   <span class="comment">// urem X, (select Cond, 2^C1, 2^C2) --></span>
+<a name="l00651"></a>00651   <span class="comment">//    select Cond, (and X, C1-1), (and X, C2-1)</span>
+<a name="l00652"></a>00652   <span class="comment">// when C1&C2 are powers of two.</span>
+<a name="l00653"></a>00653   { <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Cond; <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *C1, *C2;
+<a name="l00654"></a>00654     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1PatternMatch.html#a25d956d9e0beadd47ce4bc255dfa811d">match</a>(Op1, <a class="code" href="namespacellvm_1_1PatternMatch.html#af254e0a0a7277f1b415dbabc3ee37fb6">m_Select</a>(<a class="code" href="namespacellvm_1_1PatternMatch.html#a24bca8838396aa81b87de8e7ac774b19" title="m_Value() - Match an arbitrary value and ignore it.">m_Value</a>(Cond), <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C1), <a class="code" href="namespacellvm_1_1PatternMatch.html#ad5e60756e331a97669d11b5c9d8691a2" title="m_Power2() - Match an integer or vector power of 2.">m_Power2</a>(C2)))) {
+<a name="l00655"></a>00655       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *TrueAnd = Builder->CreateAnd(Op0, *C1-1, Op1->getName()+<span class="stringliteral">".t"</span>);
+<a name="l00656"></a>00656       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *FalseAnd = Builder->CreateAnd(Op0, *C2-1, Op1->getName()+<span class="stringliteral">".f"</span>);
+<a name="l00657"></a>00657       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1SelectInst.html#a8bce457e977f23507c48c9dfd7052990">SelectInst::Create</a>(Cond, TrueAnd, FalseAnd);
+<a name="l00658"></a>00658     }
+<a name="l00659"></a>00659   }
+<a name="l00660"></a>00660 
+<a name="l00661"></a>00661   <span class="comment">// (zext A) urem (zext B) --> zext (A urem B)</span>
+<a name="l00662"></a>00662   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a> *ZOp0 = dyn_cast<ZExtInst>(Op0))
+<a name="l00663"></a>00663     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *ZOp1 = <a class="code" href="InstCombineMulDivRem_8cpp.html#a4b5e643a45da5115a99284a9f513b143">dyn_castZExtVal</a>(Op1, ZOp0->getSrcTy()))
+<a name="l00664"></a>00664       <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classllvm_1_1ZExtInst.html" title="This class represents zero extension of integer types.">ZExtInst</a>(Builder->CreateURem(ZOp0->getOperand(0), ZOp1),
+<a name="l00665"></a>00665                           I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00666"></a>00666 
+<a name="l00667"></a>00667   <span class="keywordflow">return</span> 0;
+<a name="l00668"></a>00668 }
+<a name="l00669"></a>00669 
+<a name="l00670"></a><a class="code" href="classllvm_1_1InstCombiner.html#a72d7eb7c8fe3475caa3382ab1934c647">00670</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a72d7eb7c8fe3475caa3382ab1934c647">InstCombiner::visitSRem</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00671"></a>00671   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00672"></a>00672 
+<a name="l00673"></a>00673   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#ac5f8ec2a1bbffc4a64095b4745be2804">SimplifySRemInst</a>(Op0, Op1, TD))
+<a name="l00674"></a>00674     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00675"></a>00675 
+<a name="l00676"></a>00676   <span class="comment">// Handle the integer rem common cases</span>
+<a name="l00677"></a>00677   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Common = commonIRemTransforms(I))
+<a name="l00678"></a>00678     <span class="keywordflow">return</span> Common;
+<a name="l00679"></a>00679   
+<a name="l00680"></a>00680   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHSNeg = dyn_castNegVal(Op1))
+<a name="l00681"></a>00681     <span class="keywordflow">if</span> (!isa<Constant>(RHSNeg) ||
+<a name="l00682"></a>00682         (isa<ConstantInt>(RHSNeg) &&
+<a name="l00683"></a>00683          cast<ConstantInt>(RHSNeg)->getValue().isStrictlyPositive())) {
+<a name="l00684"></a>00684       <span class="comment">// X % -Y -> X % Y</span>
+<a name="l00685"></a>00685       Worklist.AddValue(I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00686"></a>00686       I.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(1, RHSNeg);
+<a name="l00687"></a>00687       <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00688"></a>00688     }
+<a name="l00689"></a>00689 
+<a name="l00690"></a>00690   <span class="comment">// If the sign bits of both operands are zero (i.e. we can prove they are</span>
+<a name="l00691"></a>00691   <span class="comment">// unsigned inputs), turn this into a urem.</span>
+<a name="l00692"></a>00692   <span class="keywordflow">if</span> (I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) {
+<a name="l00693"></a>00693     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> Mask(<a class="code" href="classllvm_1_1APInt.html#a2e5e9f65d911e80a46d3098933794056" title="Get the SignBit for a specific bit width.">APInt::getSignBit</a>(I.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>()));
+<a name="l00694"></a>00694     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op1, Mask) && <a class="code" href="namespacellvm.html#a8bc4c3e77e6f3d6c54b8b4504393dfa7">MaskedValueIsZero</a>(Op0, Mask)) {
+<a name="l00695"></a>00695       <span class="comment">// X srem Y -> X urem Y, iff X and Y don't have sign bit set</span>
+<a name="l00696"></a>00696       <span class="keywordflow">return</span> BinaryOperator::CreateURem(Op0, Op1, I.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>());
+<a name="l00697"></a>00697     }
+<a name="l00698"></a>00698   }
+<a name="l00699"></a>00699 
+<a name="l00700"></a>00700   <span class="comment">// If it's a constant vector, flip any negative values positive.</span>
+<a name="l00701"></a>00701   <span class="keywordflow">if</span> (isa<ConstantVector>(Op1) || isa<ConstantDataVector>(Op1)) {
+<a name="l00702"></a>00702     <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> = cast<Constant>(Op1);
+<a name="l00703"></a>00703     <span class="keywordtype">unsigned</span> VWidth = C-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#ad8f27f0b94a56abcd296b8461737a3af">getVectorNumElements</a>();
+<a name="l00704"></a>00704 
+<a name="l00705"></a>00705     <span class="keywordtype">bool</span> hasNegative = <span class="keyword">false</span>;
+<a name="l00706"></a>00706     <span class="keywordtype">bool</span> hasMissing = <span class="keyword">false</span>;
+<a name="l00707"></a>00707     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != VWidth; ++i) {
+<a name="l00708"></a>00708       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *Elt = C-><a class="code" href="classllvm_1_1Constant.html#a01fee21e2c679094ce5ab193369d5198">getAggregateElement</a>(i);
+<a name="l00709"></a>00709       <span class="keywordflow">if</span> (Elt == 0) {
+<a name="l00710"></a>00710         hasMissing = <span class="keyword">true</span>;
+<a name="l00711"></a>00711         <span class="keywordflow">break</span>;
+<a name="l00712"></a>00712       }
+<a name="l00713"></a>00713 
+<a name="l00714"></a>00714       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *RHS = dyn_cast<ConstantInt>(Elt))
+<a name="l00715"></a>00715         <span class="keywordflow">if</span> (RHS->isNegative())
+<a name="l00716"></a>00716           hasNegative = <span class="keyword">true</span>;
+<a name="l00717"></a>00717     }
+<a name="l00718"></a>00718 
+<a name="l00719"></a>00719     <span class="keywordflow">if</span> (hasNegative && !hasMissing) {
+<a name="l00720"></a>00720       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Constant *, 16></a> Elts(VWidth);
+<a name="l00721"></a>00721       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != VWidth; ++i) {
+<a name="l00722"></a>00722         Elts[i] = C-><a class="code" href="classllvm_1_1Constant.html#a01fee21e2c679094ce5ab193369d5198">getAggregateElement</a>(i);  <span class="comment">// Handle undef, etc.</span>
+<a name="l00723"></a>00723         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ConstantInt.html" title="Class for constant integers.">ConstantInt</a> *RHS = dyn_cast<ConstantInt>(Elts[i])) {
+<a name="l00724"></a>00724           <span class="keywordflow">if</span> (RHS->isNegative())
+<a name="l00725"></a>00725             Elts[i] = cast<ConstantInt>(<a class="code" href="classllvm_1_1ConstantExpr.html#afa29f0cd072ab9b3a2630681ffe5760f">ConstantExpr::getNeg</a>(RHS));
+<a name="l00726"></a>00726         }
+<a name="l00727"></a>00727       }
+<a name="l00728"></a>00728 
+<a name="l00729"></a>00729       <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *NewRHSV = <a class="code" href="classllvm_1_1ConstantVector.html#ade9fa017ca3aa82f7694a47090547bc1">ConstantVector::get</a>(Elts);
+<a name="l00730"></a>00730       <span class="keywordflow">if</span> (NewRHSV != C) {  <span class="comment">// Don't loop on -MININT</span>
+<a name="l00731"></a>00731         Worklist.AddValue(I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00732"></a>00732         I.<a class="code" href="classllvm_1_1User.html#a5fa9b8e1842b354f64c1ba6be0a4a17f">setOperand</a>(1, NewRHSV);
+<a name="l00733"></a>00733         <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00734"></a>00734       }
+<a name="l00735"></a>00735     }
+<a name="l00736"></a>00736   }
+<a name="l00737"></a>00737 
+<a name="l00738"></a>00738   <span class="keywordflow">return</span> 0;
+<a name="l00739"></a>00739 }
+<a name="l00740"></a>00740 
+<a name="l00741"></a><a class="code" href="classllvm_1_1InstCombiner.html#a67862b6d25ca3e8db946c6abc6d98d94">00741</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a67862b6d25ca3e8db946c6abc6d98d94">InstCombiner::visitFRem</a>(<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00742"></a>00742   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op0 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0), *Op1 = I.<a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00743"></a>00743 
+<a name="l00744"></a>00744   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#a973f98a5bc51515b4348eb9207dd2e8a">SimplifyFRemInst</a>(Op0, Op1, TD))
+<a name="l00745"></a>00745     <span class="keywordflow">return</span> ReplaceInstUsesWith(I, V);
+<a name="l00746"></a>00746 
+<a name="l00747"></a>00747   <span class="comment">// Handle cases involving: rem X, (select Cond, Y, Z)</span>
+<a name="l00748"></a>00748   <span class="keywordflow">if</span> (isa<SelectInst>(Op1) && SimplifyDivRemOfSelect(I))
+<a name="l00749"></a>00749     <span class="keywordflow">return</span> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00750"></a>00750 
+<a name="l00751"></a>00751   <span class="keywordflow">return</span> 0;
+<a name="l00752"></a>00752 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/InstCombinePHI_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombinePHI_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,960 @@
+<!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: InstCombinePHI.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstCombinePHI.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="InstCombinePHI_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- InstCombinePHI.cpp -------------------------------------------------===//</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 visitPHINode function.</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="InstCombine_8h.html">InstCombine.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="InstructionSimplify_8h.html">llvm/Analysis/InstructionSimplify.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="DataLayout_8h.html">llvm/DataLayout.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="SmallPtrSet_8h.html">llvm/ADT/SmallPtrSet.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="STLExtras_8h.html">llvm/ADT/STLExtras.h</a>"</span>
+<a name="l00019"></a>00019 <span class="keyword">using namespace </span>llvm;
+<a name="l00020"></a>00020 <span class="comment"></span>
+<a name="l00021"></a>00021 <span class="comment">/// FoldPHIArgBinOpIntoPHI - If we have something like phi [add (a,b), add(a,c)]</span>
+<a name="l00022"></a>00022 <span class="comment">/// and if a/b/c and the add's all have a single use, turn this into a phi</span>
+<a name="l00023"></a>00023 <span class="comment">/// and a single binop.</span>
+<a name="l00024"></a>00024 <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::FoldPHIArgBinOpIntoPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &PN) {
+<a name="l00025"></a>00025   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *FirstInst = cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0));
+<a name="l00026"></a>00026   assert(isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst));
+<a name="l00027"></a>00027   <span class="keywordtype">unsigned</span> Opc = FirstInst-><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="l00028"></a>00028   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *LHSVal = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00029"></a>00029   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *RHSVal = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00030"></a>00030     
+<a name="l00031"></a>00031   <a class="code" href="classllvm_1_1Type.html">Type</a> *LHSType = LHSVal-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00032"></a>00032   <a class="code" href="classllvm_1_1Type.html">Type</a> *RHSType = RHSVal-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00033"></a>00033   
+<a name="l00034"></a>00034   <span class="keywordtype">bool</span> isNUW = <span class="keyword">false</span>, isNSW = <span class="keyword">false</span>, isExact = <span class="keyword">false</span>;
+<a name="l00035"></a>00035   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1OverflowingBinaryOperator.html">OverflowingBinaryOperator</a> *BO =
+<a name="l00036"></a>00036         dyn_cast<OverflowingBinaryOperator>(FirstInst)) {
+<a name="l00037"></a>00037     isNUW = BO->hasNoUnsignedWrap();
+<a name="l00038"></a>00038     isNSW = BO->hasNoSignedWrap();
+<a name="l00039"></a>00039   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PossiblyExactOperator.html">PossiblyExactOperator</a> *PEO =
+<a name="l00040"></a>00040                dyn_cast<PossiblyExactOperator>(FirstInst))
+<a name="l00041"></a>00041     isExact = PEO->isExact();
+<a name="l00042"></a>00042   
+<a name="l00043"></a>00043   <span class="comment">// Scan to see if all operands are the same opcode, and all have one use.</span>
+<a name="l00044"></a>00044   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i != PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); ++i) {
+<a name="l00045"></a>00045     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00046"></a>00046     <span class="keywordflow">if</span> (!I || 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>() != Opc || !I-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() ||
+<a name="l00047"></a>00047         <span class="comment">// Verify type of the LHS matches so we don't fold cmp's of different</span>
+<a name="l00048"></a>00048         <span class="comment">// types.</span>
+<a name="l00049"></a>00049         I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != LHSType ||
+<a name="l00050"></a>00050         I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != RHSType)
+<a name="l00051"></a>00051       <span class="keywordflow">return</span> 0;
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053     <span class="comment">// If they are CmpInst instructions, check their predicates</span>
+<a name="l00054"></a>00054     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a> *CI = dyn_cast<CmpInst>(I))
+<a name="l00055"></a>00055       <span class="keywordflow">if</span> (CI->getPredicate() != cast<CmpInst>(FirstInst)->getPredicate())
+<a name="l00056"></a>00056         <span class="keywordflow">return</span> 0;
+<a name="l00057"></a>00057     
+<a name="l00058"></a>00058     <span class="keywordflow">if</span> (isNUW)
+<a name="l00059"></a>00059       isNUW = cast<OverflowingBinaryOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->hasNoUnsignedWrap();
+<a name="l00060"></a>00060     <span class="keywordflow">if</span> (isNSW)
+<a name="l00061"></a>00061       isNSW = cast<OverflowingBinaryOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->hasNoSignedWrap();
+<a name="l00062"></a>00062     <span class="keywordflow">if</span> (isExact)
+<a name="l00063"></a>00063       isExact = cast<PossiblyExactOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->isExact();
+<a name="l00064"></a>00064     
+<a name="l00065"></a>00065     <span class="comment">// Keep track of which operand needs a phi node.</span>
+<a name="l00066"></a>00066     <span class="keywordflow">if</span> (I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0) != LHSVal) LHSVal = 0;
+<a name="l00067"></a>00067     <span class="keywordflow">if</span> (I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1) != RHSVal) RHSVal = 0;
+<a name="l00068"></a>00068   }
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070   <span class="comment">// If both LHS and RHS would need a PHI, don't do this transformation,</span>
+<a name="l00071"></a>00071   <span class="comment">// because it would increase the number of PHIs entering the block,</span>
+<a name="l00072"></a>00072   <span class="comment">// which leads to higher register pressure. This is especially</span>
+<a name="l00073"></a>00073   <span class="comment">// bad when the PHIs are in the header of a loop.</span>
+<a name="l00074"></a>00074   <span class="keywordflow">if</span> (!LHSVal && !RHSVal)
+<a name="l00075"></a>00075     <span class="keywordflow">return</span> 0;
+<a name="l00076"></a>00076   
+<a name="l00077"></a>00077   <span class="comment">// Otherwise, this is safe to transform!</span>
+<a name="l00078"></a>00078   
+<a name="l00079"></a>00079   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InLHS = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00080"></a>00080   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InRHS = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00081"></a>00081   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *NewLHS = 0, *NewRHS = 0;
+<a name="l00082"></a>00082   <span class="keywordflow">if</span> (LHSVal == 0) {
+<a name="l00083"></a>00083     NewLHS = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(LHSType, PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(),
+<a name="l00084"></a>00084                              FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() + <span class="stringliteral">".pn"</span>);
+<a name="l00085"></a>00085     NewLHS-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(InLHS, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0));
+<a name="l00086"></a>00086     <a class="code" href="classllvm_1_1InstCombiner.html#af1dcd6c00214bd9c8c8b3c9f9aedcc04">InsertNewInstBefore</a>(NewLHS, PN);
+<a name="l00087"></a>00087     LHSVal = NewLHS;
+<a name="l00088"></a>00088   }
+<a name="l00089"></a>00089   
+<a name="l00090"></a>00090   <span class="keywordflow">if</span> (RHSVal == 0) {
+<a name="l00091"></a>00091     NewRHS = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(RHSType, PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(),
+<a name="l00092"></a>00092                              FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>() + <span class="stringliteral">".pn"</span>);
+<a name="l00093"></a>00093     NewRHS-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(InRHS, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0));
+<a name="l00094"></a>00094     <a class="code" href="classllvm_1_1InstCombiner.html#af1dcd6c00214bd9c8c8b3c9f9aedcc04">InsertNewInstBefore</a>(NewRHS, PN);
+<a name="l00095"></a>00095     RHSVal = NewRHS;
+<a name="l00096"></a>00096   }
+<a name="l00097"></a>00097   
+<a name="l00098"></a>00098   <span class="comment">// Add all operands to the new PHIs.</span>
+<a name="l00099"></a>00099   <span class="keywordflow">if</span> (NewLHS || NewRHS) {
+<a name="l00100"></a>00100     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00101"></a>00101       <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InInst = cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00102"></a>00102       <span class="keywordflow">if</span> (NewLHS) {
+<a name="l00103"></a>00103         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewInLHS = InInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00104"></a>00104         NewLHS-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(NewInLHS, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i));
+<a name="l00105"></a>00105       }
+<a name="l00106"></a>00106       <span class="keywordflow">if</span> (NewRHS) {
+<a name="l00107"></a>00107         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewInRHS = InInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1);
+<a name="l00108"></a>00108         NewRHS->addIncoming(NewInRHS, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i));
+<a name="l00109"></a>00109       }
+<a name="l00110"></a>00110     }
+<a name="l00111"></a>00111   }
+<a name="l00112"></a>00112     
+<a name="l00113"></a>00113   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a> *CIOp = dyn_cast<CmpInst>(FirstInst)) {
+<a name="l00114"></a>00114     <a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a> *NewCI = <a class="code" href="classllvm_1_1CmpInst.html#a4cd12603c3c76eb84d050733f6ddc8b7" title="Create a CmpInst.">CmpInst::Create</a>(CIOp->getOpcode(), CIOp->getPredicate(),
+<a name="l00115"></a>00115                                      LHSVal, RHSVal);
+<a name="l00116"></a>00116     NewCI-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00117"></a>00117     <span class="keywordflow">return</span> NewCI;
+<a name="l00118"></a>00118   }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120   <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *BinOp = cast<BinaryOperator>(FirstInst);
+<a name="l00121"></a>00121   <a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *NewBinOp =
+<a name="l00122"></a>00122     <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(BinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>(), LHSVal, RHSVal);
+<a name="l00123"></a>00123   <span class="keywordflow">if</span> (isNUW) NewBinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#aaa9083a85e23c9c5ee366920d90ae51e">setHasNoUnsignedWrap</a>();
+<a name="l00124"></a>00124   <span class="keywordflow">if</span> (isNSW) NewBinOp->setHasNoSignedWrap();
+<a name="l00125"></a>00125   <span class="keywordflow">if</span> (isExact) NewBinOp->setIsExact();
+<a name="l00126"></a>00126   NewBinOp->setDebugLoc(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00127"></a>00127   <span class="keywordflow">return</span> NewBinOp;
+<a name="l00128"></a>00128 }
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::FoldPHIArgGEPIntoPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &PN) {
+<a name="l00131"></a>00131   <a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *FirstInst =cast<GetElementPtrInst>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0));
+<a name="l00132"></a>00132   
+<a name="l00133"></a>00133   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Value*, 16></a> FixedOperands(FirstInst-><a class="code" href="classllvm_1_1User.html#a2eeb1c7ed1cfe403f2ae0470e36c07e2">op_begin</a>(), 
+<a name="l00134"></a>00134                                         FirstInst-><a class="code" href="classllvm_1_1User.html#af41f58e730804d10b91fcff39b035f74">op_end</a>());
+<a name="l00135"></a>00135   <span class="comment">// This is true if all GEP bases are allocas and if all indices into them are</span>
+<a name="l00136"></a>00136   <span class="comment">// constants.</span>
+<a name="l00137"></a>00137   <span class="keywordtype">bool</span> AllBasePointersAreAllocas = <span class="keyword">true</span>;
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139   <span class="comment">// We don't want to replace this phi if the replacement would require</span>
+<a name="l00140"></a>00140   <span class="comment">// more than one phi, which leads to higher register pressure. This is</span>
+<a name="l00141"></a>00141   <span class="comment">// especially bad when the PHIs are in the header of a loop.</span>
+<a name="l00142"></a>00142   <span class="keywordtype">bool</span> NeededPhi = <span class="keyword">false</span>;
+<a name="l00143"></a>00143   
+<a name="l00144"></a>00144   <span class="keywordtype">bool</span> AllInBounds = <span class="keyword">true</span>;
+<a name="l00145"></a>00145   
+<a name="l00146"></a>00146   <span class="comment">// Scan to see if all operands are the same opcode, and all have one use.</span>
+<a name="l00147"></a>00147   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i != PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); ++i) {
+<a name="l00148"></a>00148     <a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *GEP= <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a>>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00149"></a>00149     <span class="keywordflow">if</span> (!GEP || !GEP-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() || GEP-><a class="code" href="classllvm_1_1GetElementPtrInst.html#af4ce16ca381852ce9a4e3afd4f8529d6">getType</a>() != FirstInst-><a class="code" href="classllvm_1_1GetElementPtrInst.html#af4ce16ca381852ce9a4e3afd4f8529d6">getType</a>() ||
+<a name="l00150"></a>00150       GEP-><a class="code" href="classllvm_1_1User.html#a2f81e0c1fc6554df7ad2eafabf5fc5a5">getNumOperands</a>() != FirstInst-><a class="code" href="classllvm_1_1User.html#a2f81e0c1fc6554df7ad2eafabf5fc5a5">getNumOperands</a>())
+<a name="l00151"></a>00151       <span class="keywordflow">return</span> 0;
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153     AllInBounds &= GEP-><a class="code" href="classllvm_1_1GetElementPtrInst.html#aa87e8100bba232cc73678f86231d7e58" title="isInBounds - Determine whether the GEP has the inbounds flag.">isInBounds</a>();
+<a name="l00154"></a>00154     
+<a name="l00155"></a>00155     <span class="comment">// Keep track of whether or not all GEPs are of alloca pointers.</span>
+<a name="l00156"></a>00156     <span class="keywordflow">if</span> (AllBasePointersAreAllocas &&
+<a name="l00157"></a>00157         (!isa<AllocaInst>(GEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)) ||
+<a name="l00158"></a>00158          !GEP-><a class="code" href="classllvm_1_1GetElementPtrInst.html#a933a0843a97a4ef41022634d9a557de9">hasAllConstantIndices</a>()))
+<a name="l00159"></a>00159       AllBasePointersAreAllocas = <span class="keyword">false</span>;
+<a name="l00160"></a>00160     
+<a name="l00161"></a>00161     <span class="comment">// Compare the operand lists.</span>
+<a name="l00162"></a>00162     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> op = 0, e = FirstInst-><a class="code" href="classllvm_1_1User.html#a2f81e0c1fc6554df7ad2eafabf5fc5a5">getNumOperands</a>(); op != e; ++op) {
+<a name="l00163"></a>00163       <span class="keywordflow">if</span> (FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op) == GEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op))
+<a name="l00164"></a>00164         <span class="keywordflow">continue</span>;
+<a name="l00165"></a>00165       
+<a name="l00166"></a>00166       <span class="comment">// Don't merge two GEPs when two operands differ (introducing phi nodes)</span>
+<a name="l00167"></a>00167       <span class="comment">// if one of the PHIs has a constant for the index.  The index may be</span>
+<a name="l00168"></a>00168       <span class="comment">// substantially cheaper to compute for the constants, so making it a</span>
+<a name="l00169"></a>00169       <span class="comment">// variable index could pessimize the path.  This also handles the case</span>
+<a name="l00170"></a>00170       <span class="comment">// for struct indices, which must always be constant.</span>
+<a name="l00171"></a>00171       <span class="keywordflow">if</span> (isa<ConstantInt>(FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op)) ||
+<a name="l00172"></a>00172           isa<ConstantInt>(GEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op)))
+<a name="l00173"></a>00173         <span class="keywordflow">return</span> 0;
+<a name="l00174"></a>00174       
+<a name="l00175"></a>00175       <span class="keywordflow">if</span> (FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() !=GEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>())
+<a name="l00176"></a>00176         <span class="keywordflow">return</span> 0;
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178       <span class="comment">// If we already needed a PHI for an earlier operand, and another operand</span>
+<a name="l00179"></a>00179       <span class="comment">// also requires a PHI, we'd be introducing more PHIs than we're</span>
+<a name="l00180"></a>00180       <span class="comment">// eliminating, which increases register pressure on entry to the PHI's</span>
+<a name="l00181"></a>00181       <span class="comment">// block.</span>
+<a name="l00182"></a>00182       <span class="keywordflow">if</span> (NeededPhi)
+<a name="l00183"></a>00183         <span class="keywordflow">return</span> 0;
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185       FixedOperands[op] = 0;  <span class="comment">// Needs a PHI.</span>
+<a name="l00186"></a>00186       NeededPhi = <span class="keyword">true</span>;
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188   }
+<a name="l00189"></a>00189   
+<a name="l00190"></a>00190   <span class="comment">// If all of the base pointers of the PHI'd GEPs are from allocas, don't</span>
+<a name="l00191"></a>00191   <span class="comment">// bother doing this transformation.  At best, this will just save a bit of</span>
+<a name="l00192"></a>00192   <span class="comment">// offset calculation, but all the predecessors will have to materialize the</span>
+<a name="l00193"></a>00193   <span class="comment">// stack address into a register anyway.  We'd actually rather *clone* the</span>
+<a name="l00194"></a>00194   <span class="comment">// load up into the predecessors so that we have a load of a gep of an alloca,</span>
+<a name="l00195"></a>00195   <span class="comment">// which can usually all be folded into the load.</span>
+<a name="l00196"></a>00196   <span class="keywordflow">if</span> (AllBasePointersAreAllocas)
+<a name="l00197"></a>00197     <span class="keywordflow">return</span> 0;
+<a name="l00198"></a>00198   
+<a name="l00199"></a>00199   <span class="comment">// Otherwise, this is safe to transform.  Insert PHI nodes for each operand</span>
+<a name="l00200"></a>00200   <span class="comment">// that is variable.</span>
+<a name="l00201"></a>00201   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<PHINode*, 16></a> OperandPhis(FixedOperands.size());
+<a name="l00202"></a>00202   
+<a name="l00203"></a>00203   <span class="keywordtype">bool</span> HasAnyPHIs = <span class="keyword">false</span>;
+<a name="l00204"></a>00204   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = FixedOperands.size(); i != e; ++i) {
+<a name="l00205"></a>00205     <span class="keywordflow">if</span> (FixedOperands[i]) <span class="keywordflow">continue</span>;  <span class="comment">// operand doesn't need a phi.</span>
+<a name="l00206"></a>00206     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *FirstOp = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(i);
+<a name="l00207"></a>00207     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *NewPN = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(FirstOp-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), e,
+<a name="l00208"></a>00208                                      FirstOp-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".pn"</span>);
+<a name="l00209"></a>00209     <a class="code" href="classllvm_1_1InstCombiner.html#af1dcd6c00214bd9c8c8b3c9f9aedcc04">InsertNewInstBefore</a>(NewPN, PN);
+<a name="l00210"></a>00210     
+<a name="l00211"></a>00211     NewPN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(FirstOp, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0));
+<a name="l00212"></a>00212     OperandPhis[i] = NewPN;
+<a name="l00213"></a>00213     FixedOperands[i] = NewPN;
+<a name="l00214"></a>00214     HasAnyPHIs = <span class="keyword">true</span>;
+<a name="l00215"></a>00215   }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217   
+<a name="l00218"></a>00218   <span class="comment">// Add all operands to the new PHIs.</span>
+<a name="l00219"></a>00219   <span class="keywordflow">if</span> (HasAnyPHIs) {
+<a name="l00220"></a>00220     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00221"></a>00221       <a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *InGEP =cast<GetElementPtrInst>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00222"></a>00222       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *InBB = PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i);
+<a name="l00223"></a>00223       
+<a name="l00224"></a>00224       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> op = 0, e = OperandPhis.size(); op != e; ++op)
+<a name="l00225"></a>00225         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *OpPhi = OperandPhis[op])
+<a name="l00226"></a>00226           OpPhi->addIncoming(InGEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(op), InBB);
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228   }
+<a name="l00229"></a>00229   
+<a name="l00230"></a>00230   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Base = FixedOperands[0];
+<a name="l00231"></a>00231   <a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *NewGEP = 
+<a name="l00232"></a>00232     <a class="code" href="classllvm_1_1GetElementPtrInst.html#a1585a1ee545bef997b3120f87fd992a0">GetElementPtrInst::Create</a>(Base, <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(FixedOperands).slice(1));
+<a name="l00233"></a>00233   <span class="keywordflow">if</span> (AllInBounds) NewGEP-><a class="code" href="classllvm_1_1GetElementPtrInst.html#a837e9f272fd070a5f8fc79c07a951106">setIsInBounds</a>();
+<a name="l00234"></a>00234   NewGEP-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00235"></a>00235   <span class="keywordflow">return</span> NewGEP;
+<a name="l00236"></a>00236 }
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238 <span class="comment"></span>
+<a name="l00239"></a>00239 <span class="comment">/// isSafeAndProfitableToSinkLoad - Return true if we know that it is safe to</span>
+<a name="l00240"></a>00240 <span class="comment">/// sink the load out of the block that defines it.  This means that it must be</span>
+<a name="l00241"></a>00241 <span class="comment">/// obvious the value of the load is not changed from the point of the load to</span>
+<a name="l00242"></a>00242 <span class="comment">/// the end of the block it is in.</span>
+<a name="l00243"></a>00243 <span class="comment">///</span>
+<a name="l00244"></a>00244 <span class="comment">/// Finally, it is safe, but not profitable, to sink a load targeting a</span>
+<a name="l00245"></a>00245 <span class="comment">/// non-address-taken alloca.  Doing so will cause us to not promote the alloca</span>
+<a name="l00246"></a>00246 <span class="comment">/// to a register.</span>
+<a name="l00247"></a><a class="code" href="InstCombinePHI_8cpp.html#a6b46ea77082dda0b24b9fea490ae8fc8">00247</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombinePHI_8cpp.html#a6b46ea77082dda0b24b9fea490ae8fc8">isSafeAndProfitableToSinkLoad</a>(<a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *L) {
+<a name="l00248"></a>00248   <a class="code" href="classllvm_1_1ilist__iterator.html">BasicBlock::iterator</a> BBI = L, E = L-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0b4e7bee9b8575cc7db73329f1a561bd">end</a>();
+<a name="l00249"></a>00249   
+<a name="l00250"></a>00250   <span class="keywordflow">for</span> (++BBI; BBI != E; ++BBI)
+<a name="l00251"></a>00251     <span class="keywordflow">if</span> (BBI->mayWriteToMemory())
+<a name="l00252"></a>00252       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00253"></a>00253   
+<a name="l00254"></a>00254   <span class="comment">// Check for non-address taken alloca.  If not address-taken already, it isn't</span>
+<a name="l00255"></a>00255   <span class="comment">// profitable to do this xform.</span>
+<a name="l00256"></a>00256   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> *AI = dyn_cast<AllocaInst>(L-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0))) {
+<a name="l00257"></a>00257     <span class="keywordtype">bool</span> isAddressTaken = <span class="keyword">false</span>;
+<a name="l00258"></a>00258     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UI = AI->use_begin(), E = AI->use_end();
+<a name="l00259"></a>00259          UI != E; ++UI) {
+<a name="l00260"></a>00260       <a class="code" href="classllvm_1_1User.html">User</a> *U = *UI;
+<a name="l00261"></a>00261       <span class="keywordflow">if</span> (isa<LoadInst>(U)) <span class="keywordflow">continue</span>;
+<a name="l00262"></a>00262       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1StoreInst.html">StoreInst</a> *SI = dyn_cast<StoreInst>(U)) {
+<a name="l00263"></a>00263         <span class="comment">// If storing TO the alloca, then the address isn't taken.</span>
+<a name="l00264"></a>00264         <span class="keywordflow">if</span> (SI->getOperand(1) == AI) <span class="keywordflow">continue</span>;
+<a name="l00265"></a>00265       }
+<a name="l00266"></a>00266       isAddressTaken = <span class="keyword">true</span>;
+<a name="l00267"></a>00267       <span class="keywordflow">break</span>;
+<a name="l00268"></a>00268     }
+<a name="l00269"></a>00269     
+<a name="l00270"></a>00270     <span class="keywordflow">if</span> (!isAddressTaken && AI->isStaticAlloca())
+<a name="l00271"></a>00271       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00272"></a>00272   }
+<a name="l00273"></a>00273   
+<a name="l00274"></a>00274   <span class="comment">// If this load is a load from a GEP with a constant offset from an alloca,</span>
+<a name="l00275"></a>00275   <span class="comment">// then we don't want to sink it.  In its present form, it will be</span>
+<a name="l00276"></a>00276   <span class="comment">// load [constant stack offset].  Sinking it will cause us to have to</span>
+<a name="l00277"></a>00277   <span class="comment">// materialize the stack addresses in each predecessor in a register only to</span>
+<a name="l00278"></a>00278   <span class="comment">// do a shared load from register in the successor.</span>
+<a name="l00279"></a>00279   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1GetElementPtrInst.html">GetElementPtrInst</a> *GEP = dyn_cast<GetElementPtrInst>(L-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)))
+<a name="l00280"></a>00280     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> *AI = dyn_cast<AllocaInst>(GEP-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)))
+<a name="l00281"></a>00281       <span class="keywordflow">if</span> (AI->isStaticAlloca() && GEP-><a class="code" href="classllvm_1_1GetElementPtrInst.html#a933a0843a97a4ef41022634d9a557de9">hasAllConstantIndices</a>())
+<a name="l00282"></a>00282         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00283"></a>00283   
+<a name="l00284"></a>00284   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00285"></a>00285 }
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287 <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::FoldPHIArgLoadIntoPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &PN) {
+<a name="l00288"></a>00288   <a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *FirstLI = cast<LoadInst>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0));
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290   <span class="comment">// FIXME: This is overconservative; this transform is allowed in some cases</span>
+<a name="l00291"></a>00291   <span class="comment">// for atomic operations.</span>
+<a name="l00292"></a>00292   <span class="keywordflow">if</span> (FirstLI-><a class="code" href="classllvm_1_1LoadInst.html#a8275b4d0939145c7adad690a7ed68ee2">isAtomic</a>())
+<a name="l00293"></a>00293     <span class="keywordflow">return</span> 0;
+<a name="l00294"></a>00294 
+<a name="l00295"></a>00295   <span class="comment">// When processing loads, we need to propagate two bits of information to the</span>
+<a name="l00296"></a>00296   <span class="comment">// sunk load: whether it is volatile, and what its alignment is.  We currently</span>
+<a name="l00297"></a>00297   <span class="comment">// don't sink loads when some have their alignment specified and some don't.</span>
+<a name="l00298"></a>00298   <span class="comment">// visitLoadInst will propagate an alignment onto the load when TD is around,</span>
+<a name="l00299"></a>00299   <span class="comment">// and if TD isn't around, we can't handle the mixed case.</span>
+<a name="l00300"></a>00300   <span class="keywordtype">bool</span> isVolatile = FirstLI-><a class="code" href="classllvm_1_1LoadInst.html#aeb96f1a88b4e58c34a988eebd843f688">isVolatile</a>();
+<a name="l00301"></a>00301   <span class="keywordtype">unsigned</span> LoadAlignment = FirstLI-><a class="code" href="classllvm_1_1LoadInst.html#ad1168fc42bcba1b71217a4969483671a">getAlignment</a>();
+<a name="l00302"></a>00302   <span class="keywordtype">unsigned</span> LoadAddrSpace = FirstLI-><a class="code" href="classllvm_1_1LoadInst.html#a2efd55778217d045b121de696c4f6452" title="Returns the address space of the pointer operand.">getPointerAddressSpace</a>();
+<a name="l00303"></a>00303   
+<a name="l00304"></a>00304   <span class="comment">// We can't sink the load if the loaded value could be modified between the</span>
+<a name="l00305"></a>00305   <span class="comment">// load and the PHI.</span>
+<a name="l00306"></a>00306   <span class="keywordflow">if</span> (FirstLI-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>() != PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0) ||
+<a name="l00307"></a>00307       !<a class="code" href="InstCombinePHI_8cpp.html#a6b46ea77082dda0b24b9fea490ae8fc8">isSafeAndProfitableToSinkLoad</a>(FirstLI))
+<a name="l00308"></a>00308     <span class="keywordflow">return</span> 0;
+<a name="l00309"></a>00309   
+<a name="l00310"></a>00310   <span class="comment">// If the PHI is of volatile loads and the load block has multiple</span>
+<a name="l00311"></a>00311   <span class="comment">// successors, sinking it would remove a load of the volatile value from</span>
+<a name="l00312"></a>00312   <span class="comment">// the path through the other successor.</span>
+<a name="l00313"></a>00313   <span class="keywordflow">if</span> (isVolatile && 
+<a name="l00314"></a>00314       FirstLI-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><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="l00315"></a>00315     <span class="keywordflow">return</span> 0;
+<a name="l00316"></a>00316   
+<a name="l00317"></a>00317   <span class="comment">// Check to see if all arguments are the same operation.</span>
+<a name="l00318"></a>00318   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00319"></a>00319     <a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *<a class="code" href="LoopInfoImpl_8h.html#ab7b7f3fe4279386eae18cf924053d077">LI</a> = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a>>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00320"></a>00320     <span class="keywordflow">if</span> (!LI || !LI-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00321"></a>00321       <span class="keywordflow">return</span> 0;
+<a name="l00322"></a>00322     
+<a name="l00323"></a>00323     <span class="comment">// We can't sink the load if the loaded value could be modified between </span>
+<a name="l00324"></a>00324     <span class="comment">// the load and the PHI.</span>
+<a name="l00325"></a>00325     <span class="keywordflow">if</span> (LI-><a class="code" href="classllvm_1_1LoadInst.html#aeb96f1a88b4e58c34a988eebd843f688">isVolatile</a>() != isVolatile ||
+<a name="l00326"></a>00326         LI-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>() != PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i) ||
+<a name="l00327"></a>00327         LI-><a class="code" href="classllvm_1_1LoadInst.html#a2efd55778217d045b121de696c4f6452" title="Returns the address space of the pointer operand.">getPointerAddressSpace</a>() != LoadAddrSpace ||
+<a name="l00328"></a>00328         !<a class="code" href="InstCombinePHI_8cpp.html#a6b46ea77082dda0b24b9fea490ae8fc8">isSafeAndProfitableToSinkLoad</a>(LI))
+<a name="l00329"></a>00329       <span class="keywordflow">return</span> 0;
+<a name="l00330"></a>00330       
+<a name="l00331"></a>00331     <span class="comment">// If some of the loads have an alignment specified but not all of them,</span>
+<a name="l00332"></a>00332     <span class="comment">// we can't do the transformation.</span>
+<a name="l00333"></a>00333     <span class="keywordflow">if</span> ((LoadAlignment != 0) != (LI-><a class="code" href="classllvm_1_1LoadInst.html#ad1168fc42bcba1b71217a4969483671a">getAlignment</a>() != 0))
+<a name="l00334"></a>00334       <span class="keywordflow">return</span> 0;
+<a name="l00335"></a>00335     
+<a name="l00336"></a>00336     LoadAlignment = std::min(LoadAlignment, LI-><a class="code" href="classllvm_1_1LoadInst.html#ad1168fc42bcba1b71217a4969483671a">getAlignment</a>());
+<a name="l00337"></a>00337     
+<a name="l00338"></a>00338     <span class="comment">// If the PHI is of volatile loads and the load block has multiple</span>
+<a name="l00339"></a>00339     <span class="comment">// successors, sinking it would remove a load of the volatile value from</span>
+<a name="l00340"></a>00340     <span class="comment">// the path through the other successor.</span>
+<a name="l00341"></a>00341     <span class="keywordflow">if</span> (isVolatile &&
+<a name="l00342"></a>00342         LI-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><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="l00343"></a>00343       <span class="keywordflow">return</span> 0;
+<a name="l00344"></a>00344   }
+<a name="l00345"></a>00345   
+<a name="l00346"></a>00346   <span class="comment">// Okay, they are all the same operation.  Create a new PHI node of the</span>
+<a name="l00347"></a>00347   <span class="comment">// correct type, and PHI together all of the LHS's of the instructions.</span>
+<a name="l00348"></a>00348   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *NewPN = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(FirstLI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00349"></a>00349                                    PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(),
+<a name="l00350"></a>00350                                    PN.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".in"</span>);
+<a name="l00351"></a>00351   
+<a name="l00352"></a>00352   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InVal = FirstLI-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00353"></a>00353   NewPN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(InVal, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0));
+<a name="l00354"></a>00354   
+<a name="l00355"></a>00355   <span class="comment">// Add all operands to the new PHI.</span>
+<a name="l00356"></a>00356   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00357"></a>00357     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewInVal = cast<LoadInst>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i))->getOperand(0);
+<a name="l00358"></a>00358     <span class="keywordflow">if</span> (NewInVal != InVal)
+<a name="l00359"></a>00359       InVal = 0;
+<a name="l00360"></a>00360     NewPN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(NewInVal, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i));
+<a name="l00361"></a>00361   }
+<a name="l00362"></a>00362   
+<a name="l00363"></a>00363   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *PhiVal;
+<a name="l00364"></a>00364   <span class="keywordflow">if</span> (InVal) {
+<a name="l00365"></a>00365     <span class="comment">// The new PHI unions all of the same values together.  This is really</span>
+<a name="l00366"></a>00366     <span class="comment">// common, so we handle it intelligently here for compile-time speed.</span>
+<a name="l00367"></a>00367     PhiVal = InVal;
+<a name="l00368"></a>00368     <span class="keyword">delete</span> NewPN;
+<a name="l00369"></a>00369   } <span class="keywordflow">else</span> {
+<a name="l00370"></a>00370     <a class="code" href="classllvm_1_1InstCombiner.html#af1dcd6c00214bd9c8c8b3c9f9aedcc04">InsertNewInstBefore</a>(NewPN, PN);
+<a name="l00371"></a>00371     PhiVal = NewPN;
+<a name="l00372"></a>00372   }
+<a name="l00373"></a>00373   
+<a name="l00374"></a>00374   <span class="comment">// If this was a volatile load that we are merging, make sure to loop through</span>
+<a name="l00375"></a>00375   <span class="comment">// and mark all the input loads as non-volatile.  If we don't do this, we will</span>
+<a name="l00376"></a>00376   <span class="comment">// insert a new volatile load and the old ones will not be deletable.</span>
+<a name="l00377"></a>00377   <span class="keywordflow">if</span> (isVolatile)
+<a name="l00378"></a>00378     <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="l00379"></a>00379       cast<LoadInst>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i))->setVolatile(<span class="keyword">false</span>);
+<a name="l00380"></a>00380   
+<a name="l00381"></a>00381   <a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a> *NewLI = <span class="keyword">new</span> <a class="code" href="classllvm_1_1LoadInst.html">LoadInst</a>(PhiVal, <span class="stringliteral">""</span>, isVolatile, LoadAlignment);
+<a name="l00382"></a>00382   NewLI-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstLI-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00383"></a>00383   <span class="keywordflow">return</span> NewLI;
+<a name="l00384"></a>00384 }
+<a name="l00385"></a>00385 
+<a name="l00386"></a>00386 
+<a name="l00387"></a>00387 <span class="comment"></span>
+<a name="l00388"></a>00388 <span class="comment">/// FoldPHIArgOpIntoPHI - If all operands to a PHI node are the same "unary"</span>
+<a name="l00389"></a>00389 <span class="comment">/// operator and they all are only used by the PHI, PHI together their</span>
+<a name="l00390"></a>00390 <span class="comment">/// inputs, and do the operation once, to the result of the PHI.</span>
+<a name="l00391"></a>00391 <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *InstCombiner::FoldPHIArgOpIntoPHI(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &PN) {
+<a name="l00392"></a>00392   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *FirstInst = cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0));
+<a name="l00393"></a>00393 
+<a name="l00394"></a>00394   <span class="keywordflow">if</span> (isa<GetElementPtrInst>(FirstInst))
+<a name="l00395"></a>00395     <span class="keywordflow">return</span> FoldPHIArgGEPIntoPHI(PN);
+<a name="l00396"></a>00396   <span class="keywordflow">if</span> (isa<LoadInst>(FirstInst))
+<a name="l00397"></a>00397     <span class="keywordflow">return</span> FoldPHIArgLoadIntoPHI(PN);
+<a name="l00398"></a>00398   
+<a name="l00399"></a>00399   <span class="comment">// Scan the instruction, looking for input operations that can be folded away.</span>
+<a name="l00400"></a>00400   <span class="comment">// If all input operands to the phi are the same instruction (e.g. a cast from</span>
+<a name="l00401"></a>00401   <span class="comment">// the same type or "+42") we can pull the operation through the PHI, reducing</span>
+<a name="l00402"></a>00402   <span class="comment">// code size and simplifying code.</span>
+<a name="l00403"></a>00403   <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *ConstantOp = 0;
+<a name="l00404"></a>00404   <a class="code" href="classllvm_1_1Type.html">Type</a> *CastSrcTy = 0;
+<a name="l00405"></a>00405   <span class="keywordtype">bool</span> isNUW = <span class="keyword">false</span>, isNSW = <span class="keyword">false</span>, isExact = <span class="keyword">false</span>;
+<a name="l00406"></a>00406   
+<a name="l00407"></a>00407   <span class="keywordflow">if</span> (isa<CastInst>(FirstInst)) {
+<a name="l00408"></a>00408     CastSrcTy = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>();
+<a name="l00409"></a>00409 
+<a name="l00410"></a>00410     <span class="comment">// Be careful about transforming integer PHIs.  We don't want to pessimize</span>
+<a name="l00411"></a>00411     <span class="comment">// the code by turning an i32 into an i1293.</span>
+<a name="l00412"></a>00412     <span class="keywordflow">if</span> (PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() && CastSrcTy-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>()) {
+<a name="l00413"></a>00413       <span class="keywordflow">if</span> (!ShouldChangeType(PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(), CastSrcTy))
+<a name="l00414"></a>00414         <span class="keywordflow">return</span> 0;
+<a name="l00415"></a>00415     }
+<a name="l00416"></a>00416   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst)) {
+<a name="l00417"></a>00417     <span class="comment">// Can fold binop, compare or shift here if the RHS is a constant, </span>
+<a name="l00418"></a>00418     <span class="comment">// otherwise call FoldPHIArgBinOpIntoPHI.</span>
+<a name="l00419"></a>00419     ConstantOp = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a>>(FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1));
+<a name="l00420"></a>00420     <span class="keywordflow">if</span> (ConstantOp == 0)
+<a name="l00421"></a>00421       <span class="keywordflow">return</span> FoldPHIArgBinOpIntoPHI(PN);
+<a name="l00422"></a>00422     
+<a name="l00423"></a>00423     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1OverflowingBinaryOperator.html">OverflowingBinaryOperator</a> *BO =
+<a name="l00424"></a>00424         dyn_cast<OverflowingBinaryOperator>(FirstInst)) {
+<a name="l00425"></a>00425       isNUW = BO->hasNoUnsignedWrap();
+<a name="l00426"></a>00426       isNSW = BO->hasNoSignedWrap();
+<a name="l00427"></a>00427     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PossiblyExactOperator.html">PossiblyExactOperator</a> *PEO =
+<a name="l00428"></a>00428                dyn_cast<PossiblyExactOperator>(FirstInst))
+<a name="l00429"></a>00429       isExact = PEO->isExact();
+<a name="l00430"></a>00430   } <span class="keywordflow">else</span> {
+<a name="l00431"></a>00431     <span class="keywordflow">return</span> 0;  <span class="comment">// Cannot fold this operation.</span>
+<a name="l00432"></a>00432   }
+<a name="l00433"></a>00433 
+<a name="l00434"></a>00434   <span class="comment">// Check to see if all arguments are the same operation.</span>
+<a name="l00435"></a>00435   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00436"></a>00436     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *I = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1Instruction.html">Instruction</a>>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00437"></a>00437     <span class="keywordflow">if</span> (I == 0 || !I-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() || !I-><a class="code" href="classllvm_1_1Instruction.html#a9f729c6c3e0de4a55dc5a3693fd4a9eb" title="Determine if one instruction is the same operation as another.">isSameOperationAs</a>(FirstInst))
+<a name="l00438"></a>00438       <span class="keywordflow">return</span> 0;
+<a name="l00439"></a>00439     <span class="keywordflow">if</span> (CastSrcTy) {
+<a name="l00440"></a>00440       <span class="keywordflow">if</span> (I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != CastSrcTy)
+<a name="l00441"></a>00441         <span class="keywordflow">return</span> 0;  <span class="comment">// Cast operation must match.</span>
+<a name="l00442"></a>00442     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (I-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1) != ConstantOp) {
+<a name="l00443"></a>00443       <span class="keywordflow">return</span> 0;
+<a name="l00444"></a>00444     }
+<a name="l00445"></a>00445     
+<a name="l00446"></a>00446     <span class="keywordflow">if</span> (isNUW)
+<a name="l00447"></a>00447       isNUW = cast<OverflowingBinaryOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->hasNoUnsignedWrap();
+<a name="l00448"></a>00448     <span class="keywordflow">if</span> (isNSW)
+<a name="l00449"></a>00449       isNSW = cast<OverflowingBinaryOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->hasNoSignedWrap();
+<a name="l00450"></a>00450     <span class="keywordflow">if</span> (isExact)
+<a name="l00451"></a>00451       isExact = cast<PossiblyExactOperator>(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)->isExact();
+<a name="l00452"></a>00452   }
+<a name="l00453"></a>00453 
+<a name="l00454"></a>00454   <span class="comment">// Okay, they are all the same operation.  Create a new PHI node of the</span>
+<a name="l00455"></a>00455   <span class="comment">// correct type, and PHI together all of the LHS's of the instructions.</span>
+<a name="l00456"></a>00456   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *NewPN = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0)-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00457"></a>00457                                    PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(),
+<a name="l00458"></a>00458                                    PN.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".in"</span>);
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InVal = FirstInst-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(0);
+<a name="l00461"></a>00461   NewPN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(InVal, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(0));
+<a name="l00462"></a>00462 
+<a name="l00463"></a>00463   <span class="comment">// Add all operands to the new PHI.</span>
+<a name="l00464"></a>00464   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00465"></a>00465     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NewInVal = cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i))->getOperand(0);
+<a name="l00466"></a>00466     <span class="keywordflow">if</span> (NewInVal != InVal)
+<a name="l00467"></a>00467       InVal = 0;
+<a name="l00468"></a>00468     NewPN-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(NewInVal, PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i));
+<a name="l00469"></a>00469   }
+<a name="l00470"></a>00470 
+<a name="l00471"></a>00471   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *PhiVal;
+<a name="l00472"></a>00472   <span class="keywordflow">if</span> (InVal) {
+<a name="l00473"></a>00473     <span class="comment">// The new PHI unions all of the same values together.  This is really</span>
+<a name="l00474"></a>00474     <span class="comment">// common, so we handle it intelligently here for compile-time speed.</span>
+<a name="l00475"></a>00475     PhiVal = InVal;
+<a name="l00476"></a>00476     <span class="keyword">delete</span> NewPN;
+<a name="l00477"></a>00477   } <span class="keywordflow">else</span> {
+<a name="l00478"></a>00478     <a class="code" href="classllvm_1_1InstCombiner.html#af1dcd6c00214bd9c8c8b3c9f9aedcc04">InsertNewInstBefore</a>(NewPN, PN);
+<a name="l00479"></a>00479     PhiVal = NewPN;
+<a name="l00480"></a>00480   }
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482   <span class="comment">// Insert and return the new operation.</span>
+<a name="l00483"></a>00483   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *FirstCI = dyn_cast<CastInst>(FirstInst)) {
+<a name="l00484"></a>00484     <a class="code" href="classllvm_1_1CastInst.html" title="Base class of casting instructions.">CastInst</a> *NewCI = <a class="code" href="classllvm_1_1CastInst.html#a0f7dea9550778374905e12da6d6ba8a8" title="Construct any of the CastInst subclasses.">CastInst::Create</a>(FirstCI->getOpcode(), PhiVal,
+<a name="l00485"></a>00485                                        PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00486"></a>00486     NewCI-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00487"></a>00487     <span class="keywordflow">return</span> NewCI;
+<a name="l00488"></a>00488   }
+<a name="l00489"></a>00489   
+<a name="l00490"></a>00490   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> *BinOp = dyn_cast<BinaryOperator>(FirstInst)) {
+<a name="l00491"></a>00491     BinOp = <a class="code" href="classllvm_1_1BinaryOperator.html#a4a4628e91a9c6a339fa61105614fac76">BinaryOperator::Create</a>(BinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#a88505baf41407782678a5df1702d2d31" title="getOpcode() returns a member of one of the enums like Instruction::Add.">getOpcode</a>(), PhiVal, ConstantOp);
+<a name="l00492"></a>00492     <span class="keywordflow">if</span> (isNUW) BinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#aaa9083a85e23c9c5ee366920d90ae51e">setHasNoUnsignedWrap</a>();
+<a name="l00493"></a>00493     <span class="keywordflow">if</span> (isNSW) BinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#a21ce697328893029ae2c63974061a294">setHasNoSignedWrap</a>();
+<a name="l00494"></a>00494     <span class="keywordflow">if</span> (isExact) BinOp-><a class="code" href="classllvm_1_1BinaryOperator.html#aac502d7d65e2996cf6b819b14e17499c">setIsExact</a>();
+<a name="l00495"></a>00495     BinOp-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00496"></a>00496     <span class="keywordflow">return</span> BinOp;
+<a name="l00497"></a>00497   }
+<a name="l00498"></a>00498   
+<a name="l00499"></a>00499   <a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a> *CIOp = cast<CmpInst>(FirstInst);
+<a name="l00500"></a>00500   <a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a> *NewCI = <a class="code" href="classllvm_1_1CmpInst.html#a4cd12603c3c76eb84d050733f6ddc8b7" title="Create a CmpInst.">CmpInst::Create</a>(CIOp-><a class="code" href="classllvm_1_1CmpInst.html#afb3301fb99a3b118d9fe496faf1b114b" title="Get the opcode casted to the right type.">getOpcode</a>(), CIOp-><a class="code" href="classllvm_1_1CmpInst.html#a8afd4995fae596b2c86eeed85b3d388b" title="Return the predicate for this instruction.">getPredicate</a>(),
+<a name="l00501"></a>00501                                    PhiVal, ConstantOp);
+<a name="l00502"></a>00502   NewCI-><a class="code" href="classllvm_1_1Instruction.html#a7bd545769621a0a9d2cfb074f86f4295" title="setDebugLoc - Set the debug location information for this instruction.">setDebugLoc</a>(FirstInst-><a class="code" href="classllvm_1_1Instruction.html#aab8e16a35183ce39aad394714087bcff" title="getDebugLoc - Return the debug location for this node as a DebugLoc.">getDebugLoc</a>());
+<a name="l00503"></a>00503   <span class="keywordflow">return</span> NewCI;
+<a name="l00504"></a>00504 }
+<a name="l00505"></a>00505 <span class="comment"></span>
+<a name="l00506"></a>00506 <span class="comment">/// DeadPHICycle - Return true if this PHI node is only used by a PHI node cycle</span>
+<a name="l00507"></a>00507 <span class="comment">/// that is dead.</span>
+<a name="l00508"></a><a class="code" href="InstCombinePHI_8cpp.html#a9e85fdb1a2e007a0f61996bab11e1516">00508</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombinePHI_8cpp.html#a9e85fdb1a2e007a0f61996bab11e1516">DeadPHICycle</a>(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN,
+<a name="l00509"></a>00509                          <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<PHINode*, 16></a> &PotentiallyDeadPHIs) {
+<a name="l00510"></a>00510   <span class="keywordflow">if</span> (PN-><a class="code" href="classllvm_1_1Value.html#ac38c53f76ef532f91f1666c8a87370e9">use_empty</a>()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00511"></a>00511   <span class="keywordflow">if</span> (!PN-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00512"></a>00512 
+<a name="l00513"></a>00513   <span class="comment">// Remember this node, and if we find the cycle, return.</span>
+<a name="l00514"></a>00514   <span class="keywordflow">if</span> (!PotentiallyDeadPHIs.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(PN))
+<a name="l00515"></a>00515     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00516"></a>00516   
+<a name="l00517"></a>00517   <span class="comment">// Don't scan crazily complex things.</span>
+<a name="l00518"></a>00518   <span class="keywordflow">if</span> (PotentiallyDeadPHIs.<a class="code" href="classllvm_1_1SmallPtrSetImpl.html#a41c201584742f7eb45b2be8cd54e3bcb">size</a>() == 16)
+<a name="l00519"></a>00519     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00520"></a>00520 
+<a name="l00521"></a>00521   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PU = dyn_cast<PHINode>(PN-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>()))
+<a name="l00522"></a>00522     <span class="keywordflow">return</span> <a class="code" href="InstCombinePHI_8cpp.html#a9e85fdb1a2e007a0f61996bab11e1516">DeadPHICycle</a>(PU, PotentiallyDeadPHIs);
+<a name="l00523"></a>00523 
+<a name="l00524"></a>00524   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00525"></a>00525 }
+<a name="l00526"></a>00526 <span class="comment"></span>
+<a name="l00527"></a>00527 <span class="comment">/// PHIsEqualValue - Return true if this phi node is always equal to</span>
+<a name="l00528"></a>00528 <span class="comment">/// NonPhiInVal.  This happens with mutually cyclic phi nodes like:</span>
+<a name="l00529"></a>00529 <span class="comment">///   z = some value; x = phi (y, z); y = phi (x, z)</span>
+<a name="l00530"></a><a class="code" href="InstCombinePHI_8cpp.html#ad8adcfc8400df66b249a3d99554a5e76">00530</a> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="InstCombinePHI_8cpp.html#ad8adcfc8400df66b249a3d99554a5e76">PHIsEqualValue</a>(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN, <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NonPhiInVal, 
+<a name="l00531"></a>00531                            <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<PHINode*, 16></a> &ValueEqualPHIs) {
+<a name="l00532"></a>00532   <span class="comment">// See if we already saw this PHI node.</span>
+<a name="l00533"></a>00533   <span class="keywordflow">if</span> (!ValueEqualPHIs.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(PN))
+<a name="l00534"></a>00534     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00535"></a>00535   
+<a name="l00536"></a>00536   <span class="comment">// Don't scan crazily complex things.</span>
+<a name="l00537"></a>00537   <span class="keywordflow">if</span> (ValueEqualPHIs.<a class="code" href="classllvm_1_1SmallPtrSetImpl.html#a41c201584742f7eb45b2be8cd54e3bcb">size</a>() == 16)
+<a name="l00538"></a>00538     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00539"></a>00539  
+<a name="l00540"></a>00540   <span class="comment">// Scan the operands to see if they are either phi nodes or are equal to</span>
+<a name="l00541"></a>00541   <span class="comment">// the value.</span>
+<a name="l00542"></a>00542   <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="l00543"></a>00543     <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Op = PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i);
+<a name="l00544"></a>00544     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *OpPN = dyn_cast<PHINode>(Op)) {
+<a name="l00545"></a>00545       <span class="keywordflow">if</span> (!<a class="code" href="InstCombinePHI_8cpp.html#ad8adcfc8400df66b249a3d99554a5e76">PHIsEqualValue</a>(OpPN, NonPhiInVal, ValueEqualPHIs))
+<a name="l00546"></a>00546         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00547"></a>00547     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Op != NonPhiInVal)
+<a name="l00548"></a>00548       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00549"></a>00549   }
+<a name="l00550"></a>00550   
+<a name="l00551"></a>00551   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00552"></a>00552 }
+<a name="l00553"></a>00553 
+<a name="l00554"></a>00554 
+<a name="l00555"></a>00555 <span class="keyword">namespace </span>{
+<a name="l00556"></a>00556 <span class="keyword">struct </span>PHIUsageRecord {
+<a name="l00557"></a>00557   <span class="keywordtype">unsigned</span> PHIId;     <span class="comment">// The ID # of the PHI (something determinstic to sort on)</span>
+<a name="l00558"></a>00558   <span class="keywordtype">unsigned</span> Shift;     <span class="comment">// The amount shifted.</span>
+<a name="l00559"></a>00559   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Inst;  <span class="comment">// The trunc instruction.</span>
+<a name="l00560"></a>00560   
+<a name="l00561"></a>00561   PHIUsageRecord(<span class="keywordtype">unsigned</span> pn, <span class="keywordtype">unsigned</span> Sh, <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1User.html">User</a>)
+<a name="l00562"></a>00562     : PHIId(pn), Shift(Sh), Inst(User) {}
+<a name="l00563"></a>00563   
+<a name="l00564"></a>00564   <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#a7c469a194119a14e5a018ebb9b847cf0" title="Poison comparison between two Optional objects. Clients needs to explicitly compare the underlying va...">operator<</a>(<span class="keyword">const</span> PHIUsageRecord &RHS)<span class="keyword"> const </span>{
+<a name="l00565"></a>00565     <span class="keywordflow">if</span> (PHIId < RHS.PHIId) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00566"></a>00566     <span class="keywordflow">if</span> (PHIId > RHS.PHIId) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00567"></a>00567     <span class="keywordflow">if</span> (Shift < RHS.Shift) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00568"></a>00568     <span class="keywordflow">if</span> (Shift > RHS.Shift) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00569"></a>00569     <span class="keywordflow">return</span> Inst->getType()->getPrimitiveSizeInBits() <
+<a name="l00570"></a>00570            RHS.Inst->getType()->getPrimitiveSizeInBits();
+<a name="l00571"></a>00571   }
+<a name="l00572"></a>00572 };
+<a name="l00573"></a>00573   
+<a name="l00574"></a>00574 <span class="keyword">struct </span>LoweredPHIRecord {
+<a name="l00575"></a>00575   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN;        <span class="comment">// The PHI that was lowered.</span>
+<a name="l00576"></a>00576   <span class="keywordtype">unsigned</span> Shift;     <span class="comment">// The amount shifted.</span>
+<a name="l00577"></a>00577   <span class="keywordtype">unsigned</span> Width;     <span class="comment">// The width extracted.</span>
+<a name="l00578"></a>00578   
+<a name="l00579"></a>00579   LoweredPHIRecord(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *pn, <span class="keywordtype">unsigned</span> Sh, <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty)
+<a name="l00580"></a>00580     : PN(pn), Shift(Sh), Width(Ty->getPrimitiveSizeInBits()) {}
+<a name="l00581"></a>00581   
+<a name="l00582"></a>00582   <span class="comment">// Ctor form used by DenseMap.</span>
+<a name="l00583"></a>00583   LoweredPHIRecord(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *pn, <span class="keywordtype">unsigned</span> Sh)
+<a name="l00584"></a>00584     : PN(pn), Shift(Sh), Width(0) {}
+<a name="l00585"></a>00585 };
+<a name="l00586"></a>00586 }
+<a name="l00587"></a>00587 
+<a name="l00588"></a>00588 <span class="keyword">namespace </span>llvm {
+<a name="l00589"></a>00589   <span class="keyword">template</span><>
+<a name="l00590"></a><a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html">00590</a>   <span class="keyword">struct </span><a class="code" href="structllvm_1_1DenseMapInfo.html">DenseMapInfo</a><LoweredPHIRecord> {
+<a name="l00591"></a><a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#ac14fca6703560f602ebe8d4a49b165ce">00591</a>     <span class="keyword">static</span> <span class="keyword">inline</span> LoweredPHIRecord <a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#ac14fca6703560f602ebe8d4a49b165ce">getEmptyKey</a>() {
+<a name="l00592"></a>00592       <span class="keywordflow">return</span> LoweredPHIRecord(0, 0);
+<a name="l00593"></a>00593     }
+<a name="l00594"></a><a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#ad01126ce2b0450d630993b4211934894">00594</a>     <span class="keyword">static</span> <span class="keyword">inline</span> LoweredPHIRecord <a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#ad01126ce2b0450d630993b4211934894">getTombstoneKey</a>() {
+<a name="l00595"></a>00595       <span class="keywordflow">return</span> LoweredPHIRecord(0, 1);
+<a name="l00596"></a>00596     }
+<a name="l00597"></a><a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#a7b37a8b69d44fe5ed9f17c311bcdc6ea">00597</a>     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#a7b37a8b69d44fe5ed9f17c311bcdc6ea">getHashValue</a>(<span class="keyword">const</span> LoweredPHIRecord &Val) {
+<a name="l00598"></a>00598       <span class="keywordflow">return</span> <a class="code" href="structllvm_1_1DenseMapInfo.html">DenseMapInfo<PHINode*>::getHashValue</a>(Val.PN) ^ (Val.Shift>>3) ^
+<a name="l00599"></a>00599              (Val.Width>>3);
+<a name="l00600"></a>00600     }
+<a name="l00601"></a><a class="code" href="structllvm_1_1DenseMapInfo_3_01LoweredPHIRecord_01_4.html#a6bd456c628d8cee23d1640040d98e70f">00601</a>     <span class="keyword">static</span> <span class="keywordtype">bool</span> isEqual(<span class="keyword">const</span> LoweredPHIRecord &LHS,
+<a name="l00602"></a>00602                         <span class="keyword">const</span> LoweredPHIRecord &RHS) {
+<a name="l00603"></a>00603       <span class="keywordflow">return</span> LHS.PN == RHS.PN && LHS.Shift == RHS.Shift &&
+<a name="l00604"></a>00604              LHS.Width == RHS.Width;
+<a name="l00605"></a>00605     }
+<a name="l00606"></a>00606   };
+<a name="l00607"></a>00607   <span class="keyword">template</span> <>
+<a name="l00608"></a><a class="code" href="structllvm_1_1isPodLike_3_01LoweredPHIRecord_01_4.html#a90ab8c2e097d91230ffe253532999552">00608</a>   <span class="keyword">struct </span><a class="code" href="structllvm_1_1isPodLike.html">isPodLike</a><LoweredPHIRecord> { <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value = <span class="keyword">true</span>; };
+<a name="l00609"></a>00609 }
+<a name="l00610"></a>00610 
+<a name="l00611"></a>00611 <span class="comment"></span>
+<a name="l00612"></a>00612 <span class="comment">/// SliceUpIllegalIntegerPHI - This is an integer PHI and we know that it has an</span>
+<a name="l00613"></a>00613 <span class="comment">/// illegal type: see if it is only used by trunc or trunc(lshr) operations.  If</span>
+<a name="l00614"></a>00614 <span class="comment">/// so, we split the PHI into the various pieces being extracted.  This sort of</span>
+<a name="l00615"></a>00615 <span class="comment">/// thing is introduced when SROA promotes an aggregate to large integer values.</span>
+<a name="l00616"></a>00616 <span class="comment">///</span>
+<a name="l00617"></a>00617 <span class="comment">/// TODO: The user of the trunc may be an bitcast to float/double/vector or an</span>
+<a name="l00618"></a>00618 <span class="comment">/// inttoptr.  We should produce new PHIs in the right type.</span>
+<a name="l00619"></a>00619 <span class="comment">///</span>
+<a name="l00620"></a><a class="code" href="classllvm_1_1InstCombiner.html#a7a7b478a15e870f8de9c0133d41ea883">00620</a> <span class="comment"></span><a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a7a7b478a15e870f8de9c0133d41ea883">InstCombiner::SliceUpIllegalIntegerPHI</a>(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &FirstPhi) {
+<a name="l00621"></a>00621   <span class="comment">// PHIUsers - Keep track of all of the truncated values extracted from a set</span>
+<a name="l00622"></a>00622   <span class="comment">// of PHIs, along with their offset.  These are the things we want to rewrite.</span>
+<a name="l00623"></a>00623   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<PHIUsageRecord, 16></a> PHIUsers;
+<a name="l00624"></a>00624   
+<a name="l00625"></a>00625   <span class="comment">// PHIs are often mutually cyclic, so we keep track of a whole set of PHI</span>
+<a name="l00626"></a>00626   <span class="comment">// nodes which are extracted from. PHIsToSlice is a set we use to avoid</span>
+<a name="l00627"></a>00627   <span class="comment">// revisiting PHIs, PHIsInspected is a ordered list of PHIs that we need to</span>
+<a name="l00628"></a>00628   <span class="comment">// check the uses of (to ensure they are all extracts).</span>
+<a name="l00629"></a>00629   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<PHINode*, 8></a> PHIsToSlice;
+<a name="l00630"></a>00630   <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<PHINode*, 8></a> PHIsInspected;
+<a name="l00631"></a>00631   
+<a name="l00632"></a>00632   PHIsToSlice.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(&FirstPhi);
+<a name="l00633"></a>00633   PHIsInspected.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(&FirstPhi);
+<a name="l00634"></a>00634   
+<a name="l00635"></a>00635   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> PHIId = 0; PHIId != PHIsToSlice.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); ++PHIId) {
+<a name="l00636"></a>00636     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = PHIsToSlice[PHIId];
+<a name="l00637"></a>00637     
+<a name="l00638"></a>00638     <span class="comment">// Scan the input list of the PHI.  If any input is an invoke, and if the</span>
+<a name="l00639"></a>00639     <span class="comment">// input is defined in the predecessor, then we won't be split the critical</span>
+<a name="l00640"></a>00640     <span class="comment">// edge which is required to insert a truncate.  Because of this, we have to</span>
+<a name="l00641"></a>00641     <span class="comment">// bail out.</span>
+<a name="l00642"></a>00642     <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="l00643"></a>00643       <a class="code" href="classllvm_1_1InvokeInst.html">InvokeInst</a> *II = <a class="code" href="namespacellvm.html#a8d8db3a5b2508f7086ef2d43036007b3">dyn_cast</a><<a class="code" href="classllvm_1_1InvokeInst.html">InvokeInst</a>>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i));
+<a name="l00644"></a>00644       <span class="keywordflow">if</span> (II == 0) <span class="keywordflow">continue</span>;
+<a name="l00645"></a>00645       <span class="keywordflow">if</span> (II-><a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>() != PN-><a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i))
+<a name="l00646"></a>00646         <span class="keywordflow">continue</span>;
+<a name="l00647"></a>00647      
+<a name="l00648"></a>00648       <span class="comment">// If we have a phi, and if it's directly in the predecessor, then we have</span>
+<a name="l00649"></a>00649       <span class="comment">// a critical edge where we need to put the truncate.  Since we can't</span>
+<a name="l00650"></a>00650       <span class="comment">// split the edge in instcombine, we have to bail out.</span>
+<a name="l00651"></a>00651       <span class="keywordflow">return</span> 0;
+<a name="l00652"></a>00652     }
+<a name="l00653"></a>00653       
+<a name="l00654"></a>00654     
+<a name="l00655"></a>00655     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UI = PN-><a class="code" href="classllvm_1_1Value.html#a413abcab8dbc3900fc2fde96a5d8fca6">use_begin</a>(), E = PN-><a class="code" href="classllvm_1_1Value.html#ad86469939d2a8bdd4169be9403b89f5a">use_end</a>();
+<a name="l00656"></a>00656          UI != E; ++UI) {
+<a name="l00657"></a>00657       <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="l00658"></a>00658       
+<a name="l00659"></a>00659       <span class="comment">// If the user is a PHI, inspect its uses recursively.</span>
+<a name="l00660"></a>00660       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *UserPN = dyn_cast<PHINode>(User)) {
+<a name="l00661"></a>00661         <span class="keywordflow">if</span> (PHIsInspected.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(UserPN))
+<a name="l00662"></a>00662           PHIsToSlice.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(UserPN);
+<a name="l00663"></a>00663         <span class="keywordflow">continue</span>;
+<a name="l00664"></a>00664       }
+<a name="l00665"></a>00665       
+<a name="l00666"></a>00666       <span class="comment">// Truncates are always ok.</span>
+<a name="l00667"></a>00667       <span class="keywordflow">if</span> (isa<TruncInst>(User)) {
+<a name="l00668"></a>00668         PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(PHIUsageRecord(PHIId, 0, User));
+<a name="l00669"></a>00669         <span class="keywordflow">continue</span>;
+<a name="l00670"></a>00670       }
+<a name="l00671"></a>00671       
+<a name="l00672"></a>00672       <span class="comment">// Otherwise it must be a lshr which can only be used by one trunc.</span>
+<a name="l00673"></a>00673       <span class="keywordflow">if</span> (User-><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="l00674"></a>00674           !User-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() || !isa<TruncInst>(User-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>()) ||
+<a name="l00675"></a>00675           !isa<ConstantInt>(User-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1)))
+<a name="l00676"></a>00676         <span class="keywordflow">return</span> 0;
+<a name="l00677"></a>00677       
+<a name="l00678"></a>00678       <span class="keywordtype">unsigned</span> Shift = cast<ConstantInt>(User-><a class="code" href="classllvm_1_1User.html#a997ff6a1758bf732b9b263fc61011644">getOperand</a>(1))->getZExtValue();
+<a name="l00679"></a>00679       PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(PHIUsageRecord(PHIId, Shift, User-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>()));
+<a name="l00680"></a>00680     }
+<a name="l00681"></a>00681   }
+<a name="l00682"></a>00682   
+<a name="l00683"></a>00683   <span class="comment">// If we have no users, they must be all self uses, just nuke the PHI.</span>
+<a name="l00684"></a>00684   <span class="keywordflow">if</span> (PHIUsers.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>())
+<a name="l00685"></a>00685     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(FirstPhi, <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(FirstPhi.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00686"></a>00686   
+<a name="l00687"></a>00687   <span class="comment">// If this phi node is transformable, create new PHIs for all the pieces</span>
+<a name="l00688"></a>00688   <span class="comment">// extracted out of it.  First, sort the users by their offset and size.</span>
+<a name="l00689"></a>00689   <a class="code" href="namespacellvm.html#add1eb5637dd671428b6f138ed3db6428">array_pod_sort</a>(PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a8a045d250952c0867382a9840ee18fdf">begin</a>(), PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a075e34e98605d0e7c289763a104869ac">end</a>());
+<a name="l00690"></a>00690   
+<a name="l00691"></a>00691   <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"SLICING UP PHI: "</span> << FirstPhi << <span class="charliteral">'\n'</span>;
+<a name="l00692"></a>00692             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PHIsToSlice.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); i != e; ++i)
+<a name="l00693"></a>00693               <a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"AND USER PHI #"</span> << i << <span class="stringliteral">": "</span> << *PHIsToSlice[i] <<<span class="charliteral">'\n'</span>;
+<a name="l00694"></a>00694         );
+<a name="l00695"></a>00695   
+<a name="l00696"></a>00696   <span class="comment">// PredValues - This is a temporary used when rewriting PHI nodes.  It is</span>
+<a name="l00697"></a>00697   <span class="comment">// hoisted out here to avoid construction/destruction thrashing.</span>
+<a name="l00698"></a>00698   <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<BasicBlock*, Value*></a> PredValues;
+<a name="l00699"></a>00699   
+<a name="l00700"></a>00700   <span class="comment">// ExtractedVals - Each new PHI we introduce is saved here so we don't</span>
+<a name="l00701"></a>00701   <span class="comment">// introduce redundant PHIs.</span>
+<a name="l00702"></a>00702   <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<LoweredPHIRecord, PHINode*></a> ExtractedVals;
+<a name="l00703"></a>00703   
+<a name="l00704"></a>00704   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> UserI = 0, UserE = PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); UserI != UserE; ++UserI) {
+<a name="l00705"></a>00705     <span class="keywordtype">unsigned</span> PHIId = PHIUsers[UserI].PHIId;
+<a name="l00706"></a>00706     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PN = PHIsToSlice[PHIId];
+<a name="l00707"></a>00707     <span class="keywordtype">unsigned</span> Offset = PHIUsers[UserI].Shift;
+<a name="l00708"></a>00708     <a class="code" href="classllvm_1_1Type.html">Type</a> *Ty = PHIUsers[UserI].Inst->getType();
+<a name="l00709"></a>00709     
+<a name="l00710"></a>00710     <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *EltPHI;
+<a name="l00711"></a>00711     
+<a name="l00712"></a>00712     <span class="comment">// If we've already lowered a user like this, reuse the previously lowered</span>
+<a name="l00713"></a>00713     <span class="comment">// value.</span>
+<a name="l00714"></a>00714     <span class="keywordflow">if</span> ((EltPHI = ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)]) == 0) {
+<a name="l00715"></a>00715       
+<a name="l00716"></a>00716       <span class="comment">// Otherwise, Create the new PHI node for this user.</span>
+<a name="l00717"></a>00717       EltPHI = <a class="code" href="classllvm_1_1PHINode.html#afb5e83bf5123ff7c51058eb0ebebcdc6">PHINode::Create</a>(Ty, PN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(),
+<a name="l00718"></a>00718                                PN-><a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>()+<span class="stringliteral">".off"</span>+<a class="code" href="classllvm_1_1Twine.html">Twine</a>(Offset), PN);
+<a name="l00719"></a>00719       assert(EltPHI-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() != PN-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>() &&
+<a name="l00720"></a>00720              <span class="stringliteral">"Truncate didn't shrink phi?"</span>);
+<a name="l00721"></a>00721     
+<a name="l00722"></a>00722       <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="l00723"></a>00723         <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="l00724"></a>00724         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *&PredVal = PredValues[Pred];
+<a name="l00725"></a>00725         
+<a name="l00726"></a>00726         <span class="comment">// If we already have a value for this predecessor, reuse it.</span>
+<a name="l00727"></a>00727         <span class="keywordflow">if</span> (PredVal) {
+<a name="l00728"></a>00728           EltPHI-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(PredVal, Pred);
+<a name="l00729"></a>00729           <span class="keywordflow">continue</span>;
+<a name="l00730"></a>00730         }
+<a name="l00731"></a>00731 
+<a name="l00732"></a>00732         <span class="comment">// Handle the PHI self-reuse case.</span>
+<a name="l00733"></a>00733         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *InVal = PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i);
+<a name="l00734"></a>00734         <span class="keywordflow">if</span> (InVal == PN) {
+<a name="l00735"></a>00735           PredVal = EltPHI;
+<a name="l00736"></a>00736           EltPHI-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(PredVal, Pred);
+<a name="l00737"></a>00737           <span class="keywordflow">continue</span>;
+<a name="l00738"></a>00738         }
+<a name="l00739"></a>00739         
+<a name="l00740"></a>00740         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *InPHI = dyn_cast<PHINode>(PN)) {
+<a name="l00741"></a>00741           <span class="comment">// If the incoming value was a PHI, and if it was one of the PHIs we</span>
+<a name="l00742"></a>00742           <span class="comment">// already rewrote it, just use the lowered value.</span>
+<a name="l00743"></a>00743           <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = ExtractedVals[LoweredPHIRecord(InPHI, Offset, Ty)]) {
+<a name="l00744"></a>00744             PredVal = Res;
+<a name="l00745"></a>00745             EltPHI-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(PredVal, Pred);
+<a name="l00746"></a>00746             <span class="keywordflow">continue</span>;
+<a name="l00747"></a>00747           }
+<a name="l00748"></a>00748         }
+<a name="l00749"></a>00749         
+<a name="l00750"></a>00750         <span class="comment">// Otherwise, do an extract in the predecessor.</span>
+<a name="l00751"></a>00751         <a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilderBase.html#ace45cae6925c65e9d6916e09dd5b17cc">SetInsertPoint</a>(Pred, Pred-><a class="code" href="classllvm_1_1BasicBlock.html#a5cb76a65b6524dba1493dd2b9dc3abbe">getTerminator</a>());
+<a name="l00752"></a>00752         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *Res = InVal;
+<a name="l00753"></a>00753         <span class="keywordflow">if</span> (Offset)
+<a name="l00754"></a>00754           Res = <a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#a3f8c45ea10c393433221a508b750dcd5">CreateLShr</a>(Res, <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(InVal-><a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>(),
+<a name="l00755"></a>00755                                                           Offset), <span class="stringliteral">"extract"</span>);
+<a name="l00756"></a>00756         Res = <a class="code" href="classllvm_1_1InstCombiner.html#a6e33228c0d5bb3b72f357677fa105185">Builder</a>-><a class="code" href="classllvm_1_1IRBuilder.html#aa933549689e79685bb67de64dddc9f7c">CreateTrunc</a>(Res, Ty, <span class="stringliteral">"extract.t"</span>);
+<a name="l00757"></a>00757         PredVal = Res;
+<a name="l00758"></a>00758         EltPHI-><a class="code" href="classllvm_1_1PHINode.html#a089cccb6f231efee72abc76d0f9c695f">addIncoming</a>(Res, Pred);
+<a name="l00759"></a>00759         
+<a name="l00760"></a>00760         <span class="comment">// If the incoming value was a PHI, and if it was one of the PHIs we are</span>
+<a name="l00761"></a>00761         <span class="comment">// rewriting, we will ultimately delete the code we inserted.  This</span>
+<a name="l00762"></a>00762         <span class="comment">// means we need to revisit that PHI to make sure we extract out the</span>
+<a name="l00763"></a>00763         <span class="comment">// needed piece.</span>
+<a name="l00764"></a>00764         <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *OldInVal = dyn_cast<PHINode>(PN-><a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i)))
+<a name="l00765"></a>00765           <span class="keywordflow">if</span> (PHIsInspected.<a class="code" href="classllvm_1_1SmallPtrSet.html#a2ced6343b8ad006a757059554bbf9f37" title="count - Return true if the specified pointer is in the set.">count</a>(OldInVal)) {
+<a name="l00766"></a>00766             <span class="keywordtype">unsigned</span> RefPHIId = std::find(PHIsToSlice.begin(),PHIsToSlice.end(),
+<a name="l00767"></a>00767                                           OldInVal)-PHIsToSlice.begin();
+<a name="l00768"></a>00768             PHIUsers.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(PHIUsageRecord(RefPHIId, Offset, 
+<a name="l00769"></a>00769                                               cast<Instruction>(Res)));
+<a name="l00770"></a>00770             ++UserE;
+<a name="l00771"></a>00771           }
+<a name="l00772"></a>00772       }
+<a name="l00773"></a>00773       PredValues.clear();
+<a name="l00774"></a>00774       
+<a name="l00775"></a>00775       <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"  Made element PHI for offset "</span> << Offset << <span class="stringliteral">": "</span>
+<a name="l00776"></a>00776                    << *EltPHI << <span class="charliteral">'\n'</span>);
+<a name="l00777"></a>00777       ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)] = EltPHI;
+<a name="l00778"></a>00778     }
+<a name="l00779"></a>00779     
+<a name="l00780"></a>00780     <span class="comment">// Replace the use of this piece with the PHI node.</span>
+<a name="l00781"></a>00781     <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(*PHIUsers[UserI].Inst, EltPHI);
+<a name="l00782"></a>00782   }
+<a name="l00783"></a>00783   
+<a name="l00784"></a>00784   <span class="comment">// Replace all the remaining uses of the PHI nodes (self uses and the lshrs)</span>
+<a name="l00785"></a>00785   <span class="comment">// with undefs.</span>
+<a name="l00786"></a>00786   <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *<a class="code" href="namespacellvm_1_1RegState.html#a079b254e749130fbe5d740f314ca92daab502f975742e9bff6d6dd7b49439b806">Undef</a> = <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(FirstPhi.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>());
+<a name="l00787"></a>00787   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1, e = PHIsToSlice.size(); i != e; ++i)
+<a name="l00788"></a>00788     <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(*PHIsToSlice[i], Undef);
+<a name="l00789"></a>00789   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(FirstPhi, Undef);
+<a name="l00790"></a>00790 }
+<a name="l00791"></a>00791 
+<a name="l00792"></a>00792 <span class="comment">// PHINode simplification</span>
+<a name="l00793"></a>00793 <span class="comment">//</span>
+<a name="l00794"></a><a class="code" href="classllvm_1_1InstCombiner.html#a620d098739a04f8d197c3666792c268d">00794</a> <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombiner.html#a620d098739a04f8d197c3666792c268d">InstCombiner::visitPHINode</a>(<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> &PN) {
+<a name="l00795"></a>00795   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V = <a class="code" href="namespacellvm.html#a50f8f41fccbea466816345520e9bfabb">SimplifyInstruction</a>(&PN, TD))
+<a name="l00796"></a>00796     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(PN, V);
+<a name="l00797"></a>00797 
+<a name="l00798"></a>00798   <span class="comment">// If all PHI operands are the same operation, pull them through the PHI,</span>
+<a name="l00799"></a>00799   <span class="comment">// reducing code size.</span>
+<a name="l00800"></a>00800   <span class="keywordflow">if</span> (isa<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0)) &&
+<a name="l00801"></a>00801       isa<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(1)) &&
+<a name="l00802"></a>00802       cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0))->getOpcode() ==
+<a name="l00803"></a>00803       cast<Instruction>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(1))->getOpcode() &&
+<a name="l00804"></a>00804       <span class="comment">// FIXME: The hasOneUse check will fail for PHIs that use the value more</span>
+<a name="l00805"></a>00805       <span class="comment">// than themselves more than once.</span>
+<a name="l00806"></a>00806       PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(0)-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>())
+<a name="l00807"></a>00807     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Result = FoldPHIArgOpIntoPHI(PN))
+<a name="l00808"></a>00808       <span class="keywordflow">return</span> Result;
+<a name="l00809"></a>00809 
+<a name="l00810"></a>00810   <span class="comment">// If this is a trivial cycle in the PHI node graph, remove it.  Basically, if</span>
+<a name="l00811"></a>00811   <span class="comment">// this PHI only has a single use (a PHI), and if that PHI only has one use (a</span>
+<a name="l00812"></a>00812   <span class="comment">// PHI)... break the cycle.</span>
+<a name="l00813"></a>00813   <span class="keywordflow">if</span> (PN.<a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>()) {
+<a name="l00814"></a>00814     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *PHIUser = cast<Instruction>(PN.<a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>());
+<a name="l00815"></a>00815     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *PU = dyn_cast<PHINode>(PHIUser)) {
+<a name="l00816"></a>00816       <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<PHINode*, 16></a> PotentiallyDeadPHIs;
+<a name="l00817"></a>00817       PotentiallyDeadPHIs.<a class="code" href="classllvm_1_1SmallPtrSet.html#a9b6dd0fc7a648a939e571246045b673e">insert</a>(&PN);
+<a name="l00818"></a>00818       <span class="keywordflow">if</span> (<a class="code" href="InstCombinePHI_8cpp.html#a9e85fdb1a2e007a0f61996bab11e1516">DeadPHICycle</a>(PU, PotentiallyDeadPHIs))
+<a name="l00819"></a>00819         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(PN, <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00820"></a>00820     }
+<a name="l00821"></a>00821    
+<a name="l00822"></a>00822     <span class="comment">// If this phi has a single use, and if that use just computes a value for</span>
+<a name="l00823"></a>00823     <span class="comment">// the next iteration of a loop, delete the phi.  This occurs with unused</span>
+<a name="l00824"></a>00824     <span class="comment">// induction variables, e.g. "for (int j = 0; ; ++j);".  Detecting this</span>
+<a name="l00825"></a>00825     <span class="comment">// common case here is good because the only other things that catch this</span>
+<a name="l00826"></a>00826     <span class="comment">// are induction variable analysis (sometimes) and ADCE, which is only run</span>
+<a name="l00827"></a>00827     <span class="comment">// late.</span>
+<a name="l00828"></a>00828     <span class="keywordflow">if</span> (PHIUser-><a class="code" href="classllvm_1_1Value.html#a085b82f074c28030fb8e194377ed2d0c">hasOneUse</a>() &&
+<a name="l00829"></a>00829         (isa<BinaryOperator>(PHIUser) || isa<GetElementPtrInst>(PHIUser)) &&
+<a name="l00830"></a>00830         PHIUser-><a class="code" href="classllvm_1_1Instruction.html#a5ac211f24970dea81fa9a7118a8ce36b">use_back</a>() == &PN) {
+<a name="l00831"></a>00831       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(PN, <a class="code" href="classllvm_1_1UndefValue.html#a4ae5ff22b700a42bcc5d889233721335">UndefValue::get</a>(PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()));
+<a name="l00832"></a>00832     }
+<a name="l00833"></a>00833   }
+<a name="l00834"></a>00834 
+<a name="l00835"></a>00835   <span class="comment">// We sometimes end up with phi cycles that non-obviously end up being the</span>
+<a name="l00836"></a>00836   <span class="comment">// same value, for example:</span>
+<a name="l00837"></a>00837   <span class="comment">//   z = some value; x = phi (y, z); y = phi (x, z)</span>
+<a name="l00838"></a>00838   <span class="comment">// where the phi nodes don't necessarily need to be in the same block.  Do a</span>
+<a name="l00839"></a>00839   <span class="comment">// quick check to see if the PHI node only contains a single non-phi value, if</span>
+<a name="l00840"></a>00840   <span class="comment">// so, scan to see if the phi cycle is actually equal to that value.</span>
+<a name="l00841"></a>00841   {
+<a name="l00842"></a>00842     <span class="keywordtype">unsigned</span> InValNo = 0, NumIncomingVals = PN.<a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>();
+<a name="l00843"></a>00843     <span class="comment">// Scan for the first non-phi operand.</span>
+<a name="l00844"></a>00844     <span class="keywordflow">while</span> (InValNo != NumIncomingVals &&
+<a name="l00845"></a>00845            isa<PHINode>(PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(InValNo)))
+<a name="l00846"></a>00846       ++InValNo;
+<a name="l00847"></a>00847 
+<a name="l00848"></a>00848     <span class="keywordflow">if</span> (InValNo != NumIncomingVals) {
+<a name="l00849"></a>00849       <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *NonPhiInVal = PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(InValNo);
+<a name="l00850"></a>00850       
+<a name="l00851"></a>00851       <span class="comment">// Scan the rest of the operands to see if there are any conflicts, if so</span>
+<a name="l00852"></a>00852       <span class="comment">// there is no need to recursively scan other phis.</span>
+<a name="l00853"></a>00853       <span class="keywordflow">for</span> (++InValNo; InValNo != NumIncomingVals; ++InValNo) {
+<a name="l00854"></a>00854         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *OpVal = PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(InValNo);
+<a name="l00855"></a>00855         <span class="keywordflow">if</span> (OpVal != NonPhiInVal && !isa<PHINode>(OpVal))
+<a name="l00856"></a>00856           <span class="keywordflow">break</span>;
+<a name="l00857"></a>00857       }
+<a name="l00858"></a>00858       
+<a name="l00859"></a>00859       <span class="comment">// If we scanned over all operands, then we have one unique value plus</span>
+<a name="l00860"></a>00860       <span class="comment">// phi values.  Scan PHI nodes to see if they all merge in each other or</span>
+<a name="l00861"></a>00861       <span class="comment">// the value.</span>
+<a name="l00862"></a>00862       <span class="keywordflow">if</span> (InValNo == NumIncomingVals) {
+<a name="l00863"></a>00863         <a class="code" href="classllvm_1_1SmallPtrSet.html">SmallPtrSet<PHINode*, 16></a> ValueEqualPHIs;
+<a name="l00864"></a>00864         <span class="keywordflow">if</span> (<a class="code" href="InstCombinePHI_8cpp.html#ad8adcfc8400df66b249a3d99554a5e76">PHIsEqualValue</a>(&PN, NonPhiInVal, ValueEqualPHIs))
+<a name="l00865"></a>00865           <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1InstCombiner.html#af7c1b579548e5b90a8db22d2f26a4afc">ReplaceInstUsesWith</a>(PN, NonPhiInVal);
+<a name="l00866"></a>00866       }
+<a name="l00867"></a>00867     }
+<a name="l00868"></a>00868   }
+<a name="l00869"></a>00869 
+<a name="l00870"></a>00870   <span class="comment">// If there are multiple PHIs, sort their operands so that they all list</span>
+<a name="l00871"></a>00871   <span class="comment">// the blocks in the same order. This will help identical PHIs be eliminated</span>
+<a name="l00872"></a>00872   <span class="comment">// by other passes. Other passes shouldn't depend on this for correctness</span>
+<a name="l00873"></a>00873   <span class="comment">// however.</span>
+<a name="l00874"></a>00874   <a class="code" href="classllvm_1_1PHINode.html">PHINode</a> *FirstPN = cast<PHINode>(PN.<a class="code" href="classllvm_1_1Instruction.html#a9cd49851904f15060edb782ef4dd1b2d">getParent</a>()-><a class="code" href="classllvm_1_1BasicBlock.html#a0ed5f3ab3c2e4196ee0cffffa080c062">begin</a>());
+<a name="l00875"></a>00875   <span class="keywordflow">if</span> (&PN != FirstPN)
+<a name="l00876"></a>00876     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = FirstPN-><a class="code" href="classllvm_1_1PHINode.html#aa45f6c0433576e3858a6209a43750ad4">getNumIncomingValues</a>(); i != e; ++i) {
+<a name="l00877"></a>00877       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BBA = PN.<a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i);
+<a name="l00878"></a>00878       <a class="code" href="classllvm_1_1BasicBlock.html" title="LLVM Basic Block Representation.">BasicBlock</a> *BBB = FirstPN-><a class="code" href="classllvm_1_1PHINode.html#a4c25b6c00c4867281779c81ab64d2081">getIncomingBlock</a>(i);
+<a name="l00879"></a>00879       <span class="keywordflow">if</span> (BBA != BBB) {
+<a name="l00880"></a>00880         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *VA = PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(i);
+<a name="l00881"></a>00881         <span class="keywordtype">unsigned</span> j = PN.<a class="code" href="classllvm_1_1PHINode.html#a5c2b7d7f19aac93b27b845858a7eb73e">getBasicBlockIndex</a>(BBB);
+<a name="l00882"></a>00882         <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *VB = PN.<a class="code" href="classllvm_1_1PHINode.html#aba6a4cc4ed6d6fef3664b8d65ef04820">getIncomingValue</a>(j);
+<a name="l00883"></a>00883         PN.<a class="code" href="classllvm_1_1PHINode.html#a5ba57877c55dfdbe6e3bbfdacd9ef8c1">setIncomingBlock</a>(i, BBB);
+<a name="l00884"></a>00884         PN.<a class="code" href="classllvm_1_1PHINode.html#a88cdefb709309eddc6e5daca0be6a7b4">setIncomingValue</a>(i, VB);
+<a name="l00885"></a>00885         PN.<a class="code" href="classllvm_1_1PHINode.html#a5ba57877c55dfdbe6e3bbfdacd9ef8c1">setIncomingBlock</a>(j, BBA);
+<a name="l00886"></a>00886         PN.<a class="code" href="classllvm_1_1PHINode.html#a88cdefb709309eddc6e5daca0be6a7b4">setIncomingValue</a>(j, VA);
+<a name="l00887"></a>00887         <span class="comment">// NOTE: Instcombine normally would want us to "return &PN" if we</span>
+<a name="l00888"></a>00888         <span class="comment">// modified any of the operands of an instruction.  However, since we</span>
+<a name="l00889"></a>00889         <span class="comment">// aren't adding or removing uses (just rearranging them) we don't do</span>
+<a name="l00890"></a>00890         <span class="comment">// this in this case.</span>
+<a name="l00891"></a>00891       }
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 
+<a name="l00894"></a>00894   <span class="comment">// If this is an integer PHI and we know that it has an illegal type, see if</span>
+<a name="l00895"></a>00895   <span class="comment">// it is only used by trunc or trunc(lshr) operations.  If so, we split the</span>
+<a name="l00896"></a>00896   <span class="comment">// PHI into the various pieces being extracted.  This sort of thing is</span>
+<a name="l00897"></a>00897   <span class="comment">// introduced when SROA promotes an aggregate to a single large integer type.</span>
+<a name="l00898"></a>00898   <span class="keywordflow">if</span> (PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a6e328feb83afa5cf1c966d6704e43fc1">isIntegerTy</a>() && TD &&
+<a name="l00899"></a>00899       !TD-><a class="code" href="classllvm_1_1DataLayout.html#a96f1e9abd65fef355bd8f15f9360c871">isLegalInteger</a>(PN.<a class="code" href="classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc">getType</a>()-><a class="code" href="classllvm_1_1Type.html#a5a7cfa245af120b44ac8a86143bb9e57">getPrimitiveSizeInBits</a>()))
+<a name="l00900"></a>00900     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *Res = <a class="code" href="classllvm_1_1InstCombiner.html#a7a7b478a15e870f8de9c0133d41ea883">SliceUpIllegalIntegerPHI</a>(PN))
+<a name="l00901"></a>00901       <span class="keywordflow">return</span> Res;
+<a name="l00902"></a>00902   
+<a name="l00903"></a>00903   <span class="keywordflow">return</span> 0;
+<a name="l00904"></a>00904 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/InstCombineSelect_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineSelect_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineSelect_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineSelect_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,186 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="InstCombineSelect.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="InstCombine.h",height=0.2,width=0.4,color="black",URL="$InstCombine_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="InstCombineWorklist.h",height=0.2,width=0.4,color="black",URL="$InstCombineWorklist_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Instruction.h",height=0.2,width=0.4,color="red",URL="$Instruction_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/Instruction.def",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node3 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node8 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node9 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="black",URL="$raw__ostream_8h.html"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node2 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/IRBuilder.h",height=0.2,width=0.4,color="black",URL="$IRBuilder_8h.html"];
+  Node14 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="llvm/Instructions.h",height=0.2,width=0.4,color="red",URL="$Instructions_8h.html"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/InstrTypes.h",height=0.2,width=0.4,color="black",URL="$InstrTypes_8h.html"];
+  Node16 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/OperandTraits.h",height=0.2,width=0.4,color="red",URL="$OperandTraits_8h.html"];
+  Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="black",URL="$DerivedTypes_8h.html"];
+  Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/Type.h",height=0.2,width=0.4,color="red",URL="$Type_8h.html"];
+  Node19 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="red",URL="$Twine_8h.html"];
+  Node20 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node21 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/Attributes.h",height=0.2,width=0.4,color="red",URL="$Attributes_8h.html"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="red",URL="$ArrayRef_8h.html"];
+  Node23 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/CallingConv.h",height=0.2,width=0.4,color="black",URL="$CallingConv_8h.html"];
+  Node15 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/Support/IntegersSubset.h",height=0.2,width=0.4,color="red",URL="$IntegersSubset_8h.html"];
+  Node25 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Constants.h",height=0.2,width=0.4,color="black",URL="$Constants_8h.html"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Constant.h",height=0.2,width=0.4,color="red",URL="$Constant_8h.html"];
+  Node26 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/ADT/APInt.h",height=0.2,width=0.4,color="red",URL="$APInt_8h.html"];
+  Node28 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/ADT/APFloat.h",height=0.2,width=0.4,color="black",URL="$APFloat_8h.html"];
+  Node29 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/LLVMContext.h",height=0.2,width=0.4,color="black",URL="$LLVMContext_8h.html"];
+  Node30 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Support/IntegersSubsetMapping.h",height=0.2,width=0.4,color="red",URL="$IntegersSubsetMapping_8h.html"];
+  Node31 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/BasicBlock.h",height=0.2,width=0.4,color="red",URL="$BasicBlock_8h.html"];
+  Node32 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/DataLayout.h",height=0.2,width=0.4,color="black",URL="$DataLayout_8h.html"];
+  Node33 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+  Node34 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="red",URL="$PassSupport_8h.html"];
+  Node35 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="red",URL="$PassAnalysisSupport_8h.html"];
+  Node36 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node11 [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 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Support/ConstantFolder.h",height=0.2,width=0.4,color="black",URL="$ConstantFolder_8h.html"];
+  Node37 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/IntrinsicInst.h",height=0.2,width=0.4,color="black",URL="$IntrinsicInst_8h.html"];
+  Node38 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Function.h",height=0.2,width=0.4,color="red",URL="$Function_8h.html"];
+  Node39 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/Intrinsics.h",height=0.2,width=0.4,color="red",URL="$Intrinsics_8h.html"];
+  Node40 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Operator.h",height=0.2,width=0.4,color="black",URL="$Operator_8h.html"];
+  Node41 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Analysis/ValueTracking.h",height=0.2,width=0.4,color="black",URL="$ValueTracking_8h.html"];
+  Node42 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/Support/InstVisitor.h",height=0.2,width=0.4,color="black",URL="$InstVisitor_8h.html"];
+  Node43 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Module.h",height=0.2,width=0.4,color="red",URL="$Module_8h.html"];
+  Node44 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/Support/CallSite.h",height=0.2,width=0.4,color="red",URL="$CallSite_8h.html"];
+  Node45 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/TargetFolder.h",height=0.2,width=0.4,color="black",URL="$TargetFolder_8h.html"];
+  Node46 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Analysis/ConstantFolding.h",height=0.2,width=0.4,color="black",URL="$ConstantFolding_8h.html"];
+  Node2 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Transforms/Utils/SimplifyLibCalls.h",height=0.2,width=0.4,color="black",URL="$SimplifyLibCalls_8h.html"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/Support/PatternMatch.h",height=0.2,width=0.4,color="black",URL="$PatternMatch_8h.html"];
+  Node49 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/Analysis/InstructionSimplify.h",height=0.2,width=0.4,color="black",URL="$InstructionSimplify_8h.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,169 @@
+<!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: InstCombineShifts.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">InstCombineShifts.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="InstCombine_8h_source.html">InstCombine.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="ConstantFolding_8h_source.html">llvm/Analysis/ConstantFolding.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="PatternMatch_8h_source.html">llvm/Support/PatternMatch.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstCombineShifts.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstCombineShifts_8cpp__incl.png" border="0" usemap="#InstCombineShifts_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="InstCombineShifts_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstCombineShifts_8cpp.html#ad92bdfedd6ef2d2778081f6c43d027cb">CanEvaluateShifted</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, <a class="el" href="classunsigned.html">unsigned</a> NumBits, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isLeftShift, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC)</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="InstCombineShifts_8cpp.html#a57c1400fce72467412a175ace02dda0c">GetShiftedValue</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *V, <a class="el" href="classunsigned.html">unsigned</a> NumBits, <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isLeftShift, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ad92bdfedd6ef2d2778081f6c43d027cb"></a><!-- doxytag: member="InstCombineShifts.cpp::CanEvaluateShifted" ref="ad92bdfedd6ef2d2778081f6c43d027cb" args="(Value *V, unsigned NumBits, bool isLeftShift, InstCombiner &IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> CanEvaluateShifted </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="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>NumBits</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>isLeftShift</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>CanEvaluateShifted - See if we can compute the specified value, but shifted logically to the left or right by some number of bits. This should return true if the expression can be computed for the same cost as the current expression tree. This is used to eliminate extraneous shifting from things like: C = shl i128 A, 64 D = shl i128 B, 96 E = or i128 C, D F = lshr i128 E, 64 where the client will ask if E can be computed shifted right by 64-bits. If this succeeds, the GetShiftedValue function will be called to produce the value. </p>
+
+<p>Definition at line <a class="el" href="InstCombineShifts_8cpp_source.html#l00068">68</a> of file <a class="el" href="InstCombineShifts_8cpp_source.html">InstCombineShifts.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</a>, <a class="el" href="InstCombineCasts_8cpp_source.html#l00329">CanEvaluateTruncated()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="Instructions_8h_source.html#l01454">llvm::SelectInst::getFalseValue()</a>, <a class="el" href="APInt_8h_source.html#l00479">llvm::APInt::getHighBitsSet()</a>, <a class="el" href="Instructions_8h_source.html#l02045">llvm::PHINode::getIncomingValue()</a>, <a class="el" href="Constants_8h_source.html#l00219">llvm::ConstantInt::getLimitedValue()</a>, <a class="el" href="APInt_8h_source.html#l00495">llvm::APInt::getLowBitsSet()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</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" hr
 ef="Type_8cpp_source.html#l00134">llvm::Type::getScalarSizeInBits()</a>, <a class="el" href="Instructions_8h_source.html#l01453">llvm::SelectInst::getTrueValue()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</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="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="InstVisitor_8h_source.html#l00124">llvm::LShr</a>, <a class="el" href="PatternMatch_8h_source.html#l00070">llvm::PatternMatch::m_ConstantInt()</a>, <a class="el" href="PatternMatch_8h_source.html#l00410">llvm::PatternMatch::m_LShr()</a>, <a class="el" href="PatternMatch_8h_source.html#l00404">llvm::PatternMatch::m_Shl()</a>, <a class="el" href="PatternMatch_8h_source.html#l00068">llvm:
 :PatternMatch::m_Value()</a>, <a class="el" href="ValueTracking_8cpp_source.html#l00995">llvm::MaskedValueIsZero()</a>, <a class="el" href="PatternMatch_8h_source.html#l00040">llvm::PatternMatch::match()</a>, <a class="el" href="APInt_8h_source.html#l01765">llvm::APIntOps::Or()</a>, <a class="el" href="InstVisitor_8h_source.html#l00164">llvm::PHI</a>, <a class="el" href="MCInstrDesc_8h_source.html#l00110">llvm::MCID::Select</a>, <a class="el" href="APInt_8cpp_source.html#l00515">llvm::APInt::ult()</a>, and <a class="el" href="APInt_8h_source.html#l01771">llvm::APIntOps::Xor()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineShifts_8cpp_source.html#l00312">llvm::InstCombiner::FoldShiftByConstant()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a57c1400fce72467412a175ace02dda0c"></a><!-- doxytag: member="InstCombineShifts.cpp::GetShiftedValue" ref="a57c1400fce72467412a175ace02dda0c" args="(Value *V, unsigned NumBits, bool isLeftShift, InstCombiner &IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Value.html">Value</a>* GetShiftedValue </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="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>NumBits</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>isLeftShift</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>GetShiftedValue - When CanEvaluateShifted returned true for an expression, this value inserts the new computation that produces the shifted value. </p>
+
+<p>Definition at line <a class="el" href="InstCombineShifts_8cpp_source.html#l00183">183</a> of file <a class="el" href="InstCombineShifts_8cpp_source.html">InstCombineShifts.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombineWorklist_8h_source.html#l00038">llvm::InstCombineWorklist::Add()</a>, <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</a>, <a class="el" href="InstCombine_8h_source.html#l00086">llvm::InstCombiner::Builder</a>, <a class="el" href="CallingConv_8h_source.html#l00031">llvm::CallingConv::C</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00871">llvm::ConstantFoldConstantExpression()</a>, <a class="el" href="IRBuilder_8h_source.html#l00720">llvm::IRBuilder< preserveNames, T, Inserter >::CreateAnd()</a>, <a class="el" href="IRBuilder_8h_source.html#l00684">llvm::IRBuilder< preserveNames, T, Inserter >::CreateLShr()</a>, <a class="el" href="IRBuilder_8h_source.html#l00665">llvm::IRBuilder< preserveNames, T, Inserter >::CreateShl()</a>, <a class="el" href="Constants_8cpp_source.html#l00460">llvm::ConstantInt::get()</a>, <a class="el" href="Value_8cpp_source.html#l00468">llvm::Value::getCo
 ntext()</a>, <a class="el" href="InstCombine_8h_source.html#l00100">llvm::InstCombiner::getDataLayout()</a>, <a class="el" href="APInt_8h_source.html#l00479">llvm::APInt::getHighBitsSet()</a>, <a class="el" href="Instructions_8h_source.html#l02045">llvm::PHINode::getIncomingValue()</a>, <a class="el" href="APInt_8h_source.html#l00495">llvm::APInt::getLowBitsSet()</a>, <a class="el" href="Constants_8cpp_source.html#l00090">llvm::Constant::getNullValue()</a>, <a class="el" href="Instructions_8h_source.html#l02041">llvm::PHINode::getNumIncomingValues()</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="Type_8cpp_source.html#l00134">llvm::Type::getScalarSizeInBits()</a>, <a class="el" href="InstCombine_8h_source.html#l00102">llvm::InstCombiner::getTargetLibraryInfo()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getTy
 pe()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="Constants_8h_source.html#l00116">llvm::ConstantInt::getZExtValue()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</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="InstVisitor_8h_source.html#l00164">llvm::PHI</a>, <a class="el" href="MCInstrDesc_8h_source.html#l00110">llvm::MCID::Select</a>, <a class="el" href="Instructions_8cpp_source.html#l01997">llvm::BinaryOperator::setHasNoSignedWrap()</a>, <a class="el" href="Instructions_8cpp_source.html#l01993">llvm::BinaryOperator::setHasNoUnsignedWrap()</a>, <a class="el" href="Instructions_8h_source.html#l02048">llvm::PHINode::setIncomingValue()</a>, <a class="el" href="Instructions_8cpp_
 source.html#l02001">llvm::BinaryOperator::setIsExact()</a>, <a class="el" href="User_8h_source.html#l00092">llvm::User::setOperand()</a>, <a class="el" href="Value_8cpp_source.html#l00233">llvm::Value::takeName()</a>, <a class="el" href="InstCombine_8h_source.html#l00081">llvm::InstCombiner::Worklist</a>, and <a class="el" href="APInt_8h_source.html#l01771">llvm::APIntOps::Xor()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstCombineShifts_8cpp_source.html#l00312">llvm::InstCombiner::FoldShiftByConstant()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InstCombineShifts_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineShifts_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,49 @@
+<map id="G" name="G">
+<area shape="rect" href="$InstCombine_8h.html" title="InstCombine.h" alt="" coords="1544,84,1656,111"/>
+<area shape="rect" href="$IntrinsicInst_8h.html" title="llvm/IntrinsicInst.h" alt="" coords="1071,239,1207,265"/>
+<area shape="rect" href="$ConstantFolding_8h.html" title="llvm/Analysis/ConstantFolding.h" alt="" coords="2199,316,2420,343"/>
+<area shape="rect" href="$InstructionSimplify_8h.html" title="llvm/Analysis/InstructionSimplify.h" alt="" coords="1680,84,1915,111"/>
+<area shape="rect" href="$PatternMatch_8h.html" title="llvm/Support/PatternMatch.h" alt="" coords="353,161,556,188"/>
+<area shape="rect" href="$InstCombineWorklist_8h.html" title="InstCombineWorklist.h" alt="" coords="2877,393,3037,420"/>
+<area shape="rect" href="$IRBuilder_8h.html" title="llvm/IRBuilder.h" alt="" coords="1649,161,1767,188"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="2392,471,2483,497"/>
+<area shape="rect" href="$Operator_8h.html" title="llvm/Operator.h" alt="" coords="43,239,163,265"/>
+<area shape="rect" href="$ValueTracking_8h.html" title="llvm/Analysis/ValueTracking.h" alt="" coords="2507,471,2712,497"/>
+<area shape="rect" href="$InstVisitor_8h.html" title="llvm/Support/InstVisitor.h" alt="" coords="792,161,971,188"/>
+<area shape="rect" href="$TargetFolder_8h.html" title="llvm/Support/TargetFolder.h" alt="" coords="1879,239,2073,265"/>
+<area shape="rect" href="$SimplifyLibCalls_8h.html" title="llvm/Transforms/Utils/SimplifyLibCalls.h" alt="" coords="1359,161,1625,188"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="1159,471,1289,497"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="3120,471,3280,497"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="2112,703,2285,729"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="2205,625,2373,652"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="2760,471,2920,497"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="2744,548,2944,575"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1852,625,2001,652"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="841,625,1025,652"/>
+<area shape="rect" href="$Instructions_8h.html" title="llvm/Instructions.h" alt="" coords="440,316,576,343"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="959,471,1084,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1835,548,1979,575"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="959,393,1089,420"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="2352,393,2488,420"/>
+<area shape="rect" href="$LLVMContext_8h.html" title="llvm/LLVMContext.h" alt="" coords="2035,625,2181,652"/>
+<area shape="rect" href="$ConstantFolder_8h.html" title="llvm/Support/ConstantFolder.h" alt="" coords="1391,239,1604,265"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="1215,393,1340,420"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="20,471,167,497"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="536,548,741,575"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="444,471,569,497"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="545,393,681,420"/>
+<area shape="rect" href="$OperandTraits_8h.html" title="llvm/OperandTraits.h" alt="" coords="1415,471,1567,497"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="48,548,139,575"/>
+<area shape="rect" href="$PassSupport_8h.html" title="llvm/PassSupport.h" alt="" coords="2525,548,2669,575"/>
+<area shape="rect" href="$PassAnalysisSupport_8h.html" title="llvm/PassAnalysisSupport.h" alt="" coords="2205,548,2400,575"/>
+<area shape="rect" href="$Constants_8h.html" title="llvm/Constants.h" alt="" coords="1577,316,1705,343"/>
+<area shape="rect" href="$Constant_8h.html" title="llvm/Constant.h" alt="" coords="1591,471,1711,497"/>
+<area shape="rect" href="$APInt_8h.html" title="llvm/ADT/APInt.h" alt="" coords="1735,471,1860,497"/>
+<area shape="rect" href="$APFloat_8h.html" title="llvm/ADT/APFloat.h" alt="" coords="1679,393,1820,420"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="824,316,939,343"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="1332,316,1452,343"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="1465,393,1604,420"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="756,393,884,420"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="545,239,655,265"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="679,239,844,265"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCombineSimplifyDemanded_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineSimplifyDemanded_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineSimplifyDemanded_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineSimplifyDemanded_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,42 @@
+<map id="G" name="G">
+<area shape="rect" href="$InstCombine_8h.html" title="InstCombine.h" alt="" coords="1237,84,1349,111"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="1921,316,2057,343"/>
+<area shape="rect" href="$IntrinsicInst_8h.html" title="llvm/IntrinsicInst.h" alt="" coords="1204,239,1340,265"/>
+<area shape="rect" href="$InstCombineWorklist_8h.html" title="InstCombineWorklist.h" alt="" coords="2181,393,2341,420"/>
+<area shape="rect" href="$IRBuilder_8h.html" title="llvm/IRBuilder.h" alt="" coords="867,239,984,265"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="1784,393,1875,420"/>
+<area shape="rect" href="$Operator_8h.html" title="llvm/Operator.h" alt="" coords="1623,316,1743,343"/>
+<area shape="rect" href="$ValueTracking_8h.html" title="llvm/Analysis/ValueTracking.h" alt="" coords="43,393,248,420"/>
+<area shape="rect" href="$InstVisitor_8h.html" title="llvm/Support/InstVisitor.h" alt="" coords="671,161,849,188"/>
+<area shape="rect" href="$TargetFolder_8h.html" title="llvm/Support/TargetFolder.h" alt="" coords="1404,316,1599,343"/>
+<area shape="rect" href="$SimplifyLibCalls_8h.html" title="llvm/Transforms/Utils/SimplifyLibCalls.h" alt="" coords="939,161,1205,188"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="1064,471,1195,497"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="2343,471,2503,497"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="2137,703,2311,729"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="1357,548,1525,575"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="1855,548,2015,575"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="1623,548,1823,575"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="1853,625,2016,652"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="1237,703,1424,729"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="465,780,649,807"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="2141,625,2331,652"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="747,625,896,652"/>
+<area shape="rect" href="$Instructions_8h.html" title="llvm/Instructions.h" alt="" coords="817,316,953,343"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="392,471,517,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="744,471,888,497"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="525,393,656,420"/>
+<area shape="rect" href="$LLVMContext_8h.html" title="llvm/LLVMContext.h" alt="" coords="2577,548,2724,575"/>
+<area shape="rect" href="$ConstantFolder_8h.html" title="llvm/Support/ConstantFolder.h" alt="" coords="977,316,1191,343"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="984,393,1109,420"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="1219,471,1365,497"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="595,548,800,575"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="1141,548,1232,575"/>
+<area shape="rect" href="$PassSupport_8h.html" title="llvm/PassSupport.h" alt="" coords="1709,471,1853,497"/>
+<area shape="rect" href="$PassAnalysisSupport_8h.html" title="llvm/PassAnalysisSupport.h" alt="" coords="1491,471,1685,497"/>
+<area shape="rect" href="$Constants_8h.html" title="llvm/Constants.h" alt="" coords="1184,393,1312,420"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="1215,316,1329,343"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="471,316,591,343"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="544,239,653,265"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="677,239,843,265"/>
+<area shape="rect" href="$ConstantFolding_8h.html" title="llvm/Analysis/ConstantFolding.h" alt="" coords="1387,393,1608,420"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCombineWorklist_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombineWorklist_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombineWorklist_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombineWorklist_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,162 @@
+<!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: InstCombineWorklist.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_22ea62e2015f6a823fddac4ac38ba517.html">Transforms</a>      </li>
+      <li class="navelem"><a class="el" href="dir_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstCombineWorklist.h</div>  </div>
+</div>
+<div class="contents">
+<a href="InstCombineWorklist_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===- InstCombineWorklist.h - Worklist for the InstCombine pass ----------===//</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">#ifndef INSTCOMBINE_WORKLIST_H</span>
+<a name="l00011"></a>00011 <span class="preprocessor"></span><span class="preprocessor">#define INSTCOMBINE_WORKLIST_H</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span>
+<a name="l00013"></a><a class="code" href="InstCombineWorklist_8h.html#ad78e062f62e0d6e453941fb4ca843e4d">00013</a> <span class="preprocessor">#define DEBUG_TYPE "instcombine"</span>
+<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="Instruction_8h.html">llvm/Instruction.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="Compiler_8h.html">llvm/Support/Compiler.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="SmallVector_8h.html">llvm/ADT/SmallVector.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="DenseMap_8h.html">llvm/ADT/DenseMap.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.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="comment"></span>
+<a name="l00023"></a>00023 <span class="comment">/// InstCombineWorklist - This is the worklist management logic for</span>
+<a name="l00024"></a>00024 <span class="comment">/// InstCombine.</span>
+<a name="l00025"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html">00025</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="Compiler_8h.html#a662e21bcce5c9c71b6cc511fa04f900f">LLVM_LIBRARY_VISIBILITY</a> <a class="code" href="classllvm_1_1InstCombineWorklist.html">InstCombineWorklist</a> {
+<a name="l00026"></a>00026   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Instruction*, 256></a> Worklist;
+<a name="l00027"></a>00027   <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<Instruction*, unsigned></a> WorklistMap;
+<a name="l00028"></a>00028   
+<a name="l00029"></a>00029   <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html">InstCombineWorklist</a>&RHS) <a class="code" href="Compiler_8h.html#aacca75352b8e153274310c374564eb01">LLVM_DELETED_FUNCTION</a>;
+<a name="l00030"></a>00030   <a class="code" href="classllvm_1_1InstCombineWorklist.html">InstCombineWorklist</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html">InstCombineWorklist</a>&) <a class="code" href="Compiler_8h.html#aacca75352b8e153274310c374564eb01">LLVM_DELETED_FUNCTION</a>;
+<a name="l00031"></a>00031 <span class="keyword">public</span>:
+<a name="l00032"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a670d6a09468f3dfec03ad829ca6ab13e">00032</a>   <a class="code" href="classllvm_1_1InstCombineWorklist.html#a670d6a09468f3dfec03ad829ca6ab13e">InstCombineWorklist</a>() {}
+<a name="l00033"></a>00033   
+<a name="l00034"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#adf5f1ed6710777a1ba2570268fb26cab">00034</a>   <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#adf5f1ed6710777a1ba2570268fb26cab">isEmpty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Worklist.empty(); }
+<a name="l00035"></a>00035   <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">  /// Add - Add the specified instruction to the worklist if it isn't already</span>
+<a name="l00037"></a>00037 <span class="comment">  /// in it.</span>
+<a name="l00038"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a371049452a97755a1b39dea46017439a">00038</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#a371049452a97755a1b39dea46017439a">Add</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00039"></a>00039     <span class="keywordflow">if</span> (WorklistMap.insert(std::make_pair(I, Worklist.size())).second) {
+<a name="l00040"></a>00040       <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"IC: ADD: "</span> << *I << <span class="charliteral">'\n'</span>);
+<a name="l00041"></a>00041       Worklist.push_back(I);
+<a name="l00042"></a>00042     }
+<a name="l00043"></a>00043   }
+<a name="l00044"></a>00044   
+<a name="l00045"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#ab1b72040519c61e4f4b9d81806c68461">00045</a>   <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#ab1b72040519c61e4f4b9d81806c68461">AddValue</a>(<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a> *V) {
+<a name="l00046"></a>00046     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = dyn_cast<Instruction>(V))
+<a name="l00047"></a>00047       Add(<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00048"></a>00048   }
+<a name="l00049"></a>00049   <span class="comment"></span>
+<a name="l00050"></a>00050 <span class="comment">  /// AddInitialGroup - Add the specified batch of stuff in reverse order.</span>
+<a name="l00051"></a>00051 <span class="comment">  /// which should only be done when the worklist is empty and when the group</span>
+<a name="l00052"></a>00052 <span class="comment">  /// has no duplicates.</span>
+<a name="l00053"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a57c8e1e6503c4ef44f00954dfdbaf0da">00053</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#a57c8e1e6503c4ef44f00954dfdbaf0da">AddInitialGroup</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<span class="keyword">const</span> *<a class="code" href="namespacellvm_1_1tgtok.html#abbc5259d649363016626e2529fabe0c5afef9bccea014fbcc9d61070cb7dbb5ff">List</a>, <span class="keywordtype">unsigned</span> NumEntries) {
+<a name="l00054"></a>00054     assert(Worklist.empty() && <span class="stringliteral">"Worklist must be empty to add initial group"</span>);
+<a name="l00055"></a>00055     Worklist.reserve(NumEntries+16);
+<a name="l00056"></a>00056     WorklistMap.resize(NumEntries);
+<a name="l00057"></a>00057     <a class="code" href="Debug_8h.html#aef41e8aaf4c60819b30faf396cdf4978">DEBUG</a>(<a class="code" href="namespacellvm.html#ab8e34eca3b0817ef7a127913fbf6d9e4">errs</a>() << <span class="stringliteral">"IC: ADDING: "</span> << NumEntries << <span class="stringliteral">" instrs to worklist\n"</span>);
+<a name="l00058"></a>00058     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Idx = 0; NumEntries; --NumEntries) {
+<a name="l00059"></a>00059       <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = List[NumEntries-1];
+<a name="l00060"></a>00060       WorklistMap.insert(std::make_pair(I, Idx++));
+<a name="l00061"></a>00061       Worklist.push_back(I);
+<a name="l00062"></a>00062     }
+<a name="l00063"></a>00063   }
+<a name="l00064"></a>00064   
+<a name="l00065"></a>00065   <span class="comment">// Remove - remove I from the worklist if it exists.</span>
+<a name="l00066"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#ada88488f444d4fd5670e7772f2396e98">00066</a>   <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#ada88488f444d4fd5670e7772f2396e98">Remove</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00067"></a>00067     <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<Instruction*, unsigned>::iterator</a> It = WorklistMap.<a class="code" href="classllvm_1_1DenseMapBase.html#a21cf94357e53cd1069aba475266fdb63">find</a>(I);
+<a name="l00068"></a>00068     <span class="keywordflow">if</span> (It == WorklistMap.<a class="code" href="classllvm_1_1DenseMapBase.html#a321e37d79af8b4287f8a1dcf9aff9c01">end</a>()) <span class="keywordflow">return</span>; <span class="comment">// Not in worklist.</span>
+<a name="l00069"></a>00069     
+<a name="l00070"></a>00070     <span class="comment">// Don't bother moving everything down, just null out the slot.</span>
+<a name="l00071"></a>00071     Worklist[It->second] = 0;
+<a name="l00072"></a>00072     
+<a name="l00073"></a>00073     WorklistMap.erase(It);
+<a name="l00074"></a>00074   }
+<a name="l00075"></a>00075   
+<a name="l00076"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a20c4af328e8bb139a6132de6c3c6d4bc">00076</a>   <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="classllvm_1_1InstCombineWorklist.html#a20c4af328e8bb139a6132de6c3c6d4bc">RemoveOne</a>() {
+<a name="l00077"></a>00077     <a class="code" href="classllvm_1_1Instruction.html">Instruction</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = Worklist.back();
+<a name="l00078"></a>00078     Worklist.pop_back();
+<a name="l00079"></a>00079     WorklistMap.erase(I);
+<a name="l00080"></a>00080     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00081"></a>00081   }
+<a name="l00082"></a>00082   <span class="comment"></span>
+<a name="l00083"></a>00083 <span class="comment">  /// AddUsersToWorkList - When an instruction is simplified, add all users of</span>
+<a name="l00084"></a>00084 <span class="comment">  /// the instruction to the work lists because they might get more simplified</span>
+<a name="l00085"></a>00085 <span class="comment">  /// now.</span>
+<a name="l00086"></a>00086 <span class="comment">  ///</span>
+<a name="l00087"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a8bc2d436e1e97f005da67386b6a5cfb0">00087</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#a8bc2d436e1e97f005da67386b6a5cfb0">AddUsersToWorkList</a>(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> &<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l00088"></a>00088     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1value__use__iterator.html">Value::use_iterator</a> UI = I.<a class="code" href="classllvm_1_1Value.html#a413abcab8dbc3900fc2fde96a5d8fca6">use_begin</a>(), UE = I.<a class="code" href="classllvm_1_1Value.html#ad86469939d2a8bdd4169be9403b89f5a">use_end</a>();
+<a name="l00089"></a>00089          UI != UE; ++UI)
+<a name="l00090"></a>00090       Add(cast<Instruction>(*UI));
+<a name="l00091"></a>00091   }
+<a name="l00092"></a>00092   
+<a name="l00093"></a>00093   <span class="comment"></span>
+<a name="l00094"></a>00094 <span class="comment">  /// Zap - check that the worklist is empty and nuke the backing store for</span>
+<a name="l00095"></a>00095 <span class="comment">  /// the map if it is large.</span>
+<a name="l00096"></a><a class="code" href="classllvm_1_1InstCombineWorklist.html#a9a607d3d573fc7b395d75e1c70c67385">00096</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InstCombineWorklist.html#a9a607d3d573fc7b395d75e1c70c67385">Zap</a>() {
+<a name="l00097"></a>00097     assert(WorklistMap.empty() && <span class="stringliteral">"Worklist empty, but map not?"</span>);
+<a name="l00098"></a>00098     
+<a name="l00099"></a>00099     <span class="comment">// Do an explicit clear, this shrinks the map if needed.</span>
+<a name="l00100"></a>00100     WorklistMap.clear();
+<a name="l00101"></a>00101   }
+<a name="l00102"></a>00102 };
+<a name="l00103"></a>00103   
+<a name="l00104"></a>00104 } <span class="comment">// end namespace llvm.</span>
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/InstCombine_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h.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: InstCombine.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_22ea62e2015f6a823fddac4ac38ba517.html">Transforms</a>      </li>
+      <li class="navelem"><a class="el" href="dir_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">InstCombine.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="InstCombineWorklist_8h_source.html">InstCombineWorklist.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="IntrinsicInst_8h_source.html">llvm/IntrinsicInst.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="Pass_8h_source.html">llvm/Pass.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="InstVisitor_8h_source.html">llvm/Support/InstVisitor.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetFolder_8h_source.html">llvm/Support/TargetFolder.h</a>"</code><br/>
+<code>#include "<a class="el" href="SimplifyLibCalls_8h_source.html">llvm/Transforms/Utils/SimplifyLibCalls.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstCombine.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstCombine_8h__incl.png" border="0" usemap="#InstCombine_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="InstCombine_8h__dep__incl.png" border="0" usemap="#InstCombine_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="InstCombine_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_1InstCombineIRInserter.html">llvm::InstCombineIRInserter</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1InstCombiner.html">llvm::InstCombiner</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1InstCombiner.html" title="InstCombiner - The -instcombine pass.">InstCombiner</a> - The -instcombine pass.  <a href="classllvm_1_1InstCombiner.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097">llvm::SelectPatternFlavor</a> { <br/>
+  <a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097aee3dafa9fac8f6fa1e1110ef463cc452">llvm::SPF_UNKNOWN</a> =  0, 
+<a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097abfed1bd97e2e6b014cbe76e02930d54b">llvm::SPF_SMIN</a>, 
+<a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097a6afb3549f5028760be1bbf8ae7c04d73">llvm::SPF_UMIN</a>, 
+<a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097ac8062350ff8114c3ffe79a339f2a1ece">llvm::SPF_SMAX</a>, 
+<br/>
+  <a class="el" href="namespacellvm.html#a6bf471c1030973649c2e426afc212097a7d51d0dcfc2cc79738c77f8f5fa37138">llvm::SPF_UMAX</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classunsigned.html">unsigned</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a7618d7ef63ad3ee589da4e8c4c6e8d35">llvm::getComplexity</a> (Value *V)</td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InstCombine_8h__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCombine_8h__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,43 @@
+<map id="G" name="G">
+<area shape="rect" href="$InstCombineWorklist_8h.html" title="InstCombineWorklist.h" alt="" coords="205,316,365,343"/>
+<area shape="rect" href="$IRBuilder_8h.html" title="llvm/IRBuilder.h" alt="" coords="1141,161,1259,188"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="603,471,693,497"/>
+<area shape="rect" href="$IntrinsicInst_8h.html" title="llvm/IntrinsicInst.h" alt="" coords="1989,161,2125,188"/>
+<area shape="rect" href="$Operator_8h.html" title="llvm/Operator.h" alt="" coords="2772,239,2892,265"/>
+<area shape="rect" href="$ValueTracking_8h.html" title="llvm/Analysis/ValueTracking.h" alt="" coords="2589,316,2795,343"/>
+<area shape="rect" href="$InstVisitor_8h.html" title="llvm/Support/InstVisitor.h" alt="" coords="2084,84,2263,111"/>
+<area shape="rect" href="$TargetFolder_8h.html" title="llvm/Support/TargetFolder.h" alt="" coords="1744,239,1939,265"/>
+<area shape="rect" href="$SimplifyLibCalls_8h.html" title="llvm/Transforms/Utils/SimplifyLibCalls.h" alt="" coords="2691,84,2957,111"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="1973,393,2104,420"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="325,780,499,807"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="205,393,365,420"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="856,625,1024,652"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="639,625,799,652"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="256,548,456,575"/>
+<area shape="rect" href="$User_8h.html" title="llvm/User.h" alt="" coords="1675,471,1765,497"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="2045,471,2197,497"/>
+<area shape="rect" href="$DebugLoc_8h.html" title="llvm/Support/DebugLoc.h" alt="" coords="1840,471,2021,497"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="1525,548,1731,575"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1048,625,1197,652"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="1035,703,1221,729"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="1804,780,1988,807"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="416,703,579,729"/>
+<area shape="rect" href="$Instructions_8h.html" title="llvm/Instructions.h" alt="" coords="1296,239,1432,265"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="1373,471,1499,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1389,393,1533,420"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="2232,316,2363,343"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="960,393,1096,420"/>
+<area shape="rect" href="$LLVMContext_8h.html" title="llvm/LLVMContext.h" alt="" coords="43,625,189,652"/>
+<area shape="rect" href="$ConstantFolder_8h.html" title="llvm/Support/ConstantFolder.h" alt="" coords="1507,239,1720,265"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="1693,316,1819,343"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="1719,393,1865,420"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="2539,471,2629,497"/>
+<area shape="rect" href="$PassSupport_8h.html" title="llvm/PassSupport.h" alt="" coords="480,548,624,575"/>
+<area shape="rect" href="$PassAnalysisSupport_8h.html" title="llvm/PassAnalysisSupport.h" alt="" coords="648,548,843,575"/>
+<area shape="rect" href="$Constants_8h.html" title="llvm/Constants.h" alt="" coords="1491,316,1619,343"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="2299,239,2413,265"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="2088,316,2208,343"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="2304,161,2413,188"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="1800,161,1965,188"/>
+<area shape="rect" href="$ConstantFolding_8h.html" title="llvm/Analysis/ConstantFolding.h" alt="" coords="1843,316,2064,343"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,43 @@
+<map id="G" name="G">
+<area shape="rect" href="$Analysis_2Passes_8h.html" title="llvm/Analysis/Passes.h" alt="" coords="361,84,524,111"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="599,316,689,343"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="1299,239,1413,265"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="1428,471,1633,497"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="3136,84,3296,111"/>
+<area shape="rect" href="$InstVisitor_8h.html" title="llvm/Support/InstVisitor.h" alt="" coords="1372,84,1551,111"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="2820,471,3020,497"/>
+<area shape="rect" href="$Statistic_8h.html" title="llvm/ADT/Statistic.h" alt="" coords="315,393,459,420"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="1533,625,1707,652"/>
+<area shape="rect" href="$PassSupport_8h.html" title="llvm/PassSupport.h" alt="" coords="559,393,703,420"/>
+<area shape="rect" href="$PassAnalysisSupport_8h.html" title="llvm/PassAnalysisSupport.h" alt="" coords="1041,471,1236,497"/>
+<area shape="rect" href="$PassRegistry_8h.html" title="llvm/PassRegistry.h" alt="" coords="879,471,1017,497"/>
+<area shape="rect" href="$InitializePasses_8h.html" title="llvm/InitializePasses.h" alt="" coords="495,471,652,497"/>
+<area shape="rect" href="$Atomic_8h.html" title="llvm/Support/Atomic.h" alt="" coords="116,471,279,497"/>
+<area shape="rect" href="$Valgrind_8h.html" title="llvm/Support/Valgrind.h" alt="" coords="303,471,471,497"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1847,548,1996,575"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="1861,625,2048,652"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="2424,703,2608,729"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="2020,548,2188,575"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="1237,316,1376,343"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="1805,316,1941,343"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="2557,316,2688,343"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="1603,316,1731,343"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="1765,393,1891,420"/>
+<area shape="rect" href="$Constant_8h.html" title="llvm/Constant.h" alt="" coords="1247,393,1367,420"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="2463,393,2593,420"/>
+<area shape="rect" href="$SymbolTableListTraits_8h.html" title="llvm/SymbolTableListTraits.h" alt="" coords="2763,393,2960,420"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="2212,548,2327,575"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="1991,393,2116,420"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="2124,471,2276,497"/>
+<area shape="rect" href="$Value_8h.html" title="llvm/Value.h" alt="" coords="1572,548,1671,575"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="1759,471,1948,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1260,471,1404,497"/>
+<area shape="rect" href="$Instructions_8h.html" title="llvm/Instructions.h" alt="" coords="1911,239,2047,265"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="1097,239,1217,265"/>
+<area shape="rect" href="$IntrinsicInst_8h.html" title="llvm/IntrinsicInst.h" alt="" coords="1393,161,1529,188"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="1553,161,1663,188"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="1896,161,2061,188"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="2408,316,2533,343"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="2191,393,2337,420"/>
+<area shape="rect" href="$IntegersSubset_8h.html" title="llvm/Support/IntegersSubset.h" alt="" coords="2016,316,2232,343"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InstCount_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,36 @@
+<map id="G" name="G">
+<area shape="rect" href="$MemoryBuiltins_8h.html" title="MemoryBuiltins.h" alt="" coords="1008,84,1139,111"/>
+<area shape="rect" href="$InlineCost_8cpp.html" title="InlineCost.cpp" alt="" coords="3883,84,3992,111"/>
+<area shape="rect" href="$InstCount_8cpp.html" title="InstCount.cpp" alt="" coords="4016,84,4125,111"/>
+<area shape="rect" href="$Lint_8cpp.html" title="Lint.cpp" alt="" coords="4149,84,4221,111"/>
+<area shape="rect" href="$lib_2ExecutionEngine_2Interpreter_2Interpreter_8h.html" title="Interpreter.h" alt="" coords="4245,84,4344,111"/>
+<area shape="rect" href="$InstCombine_8h.html" title="InstCombine.h" alt="" coords="2863,84,2975,111"/>
+<area shape="rect" href="$SCCP_8cpp.html" title="SCCP.cpp" alt="" coords="4368,84,4448,111"/>
+<area shape="rect" href="$SROA_8cpp.html" title="SROA.cpp" alt="" coords="4472,84,4555,111"/>
+<area shape="rect" href="$Verifier_8cpp.html" title="Verifier.cpp" alt="" coords="4579,84,4669,111"/>
+<area shape="rect" href="$BasicAliasAnalysis_8cpp.html" title="BasicAliasAnalysis.cpp" alt="" coords="992,161,1155,188"/>
+<area shape="rect" href="$GlobalsModRef_8cpp.html" title="GlobalsModRef.cpp" alt="" coords="1179,161,1317,188"/>
+<area shape="rect" href="$MemoryBuiltins_8cpp.html" title="MemoryBuiltins.cpp" alt="" coords="1341,161,1488,188"/>
+<area shape="rect" href="$MemoryDependenceAnalysis_8cpp.html" title="MemoryDependenceAnalysis.cpp" alt="" coords="5,161,237,188"/>
+<area shape="rect" href="$InstCombineCalls_8cpp.html" title="InstCombineCalls.cpp" alt="" coords="1512,161,1669,188"/>
+<area shape="rect" href="$InstCombineCompares_8cpp.html" title="InstCombineCompares.cpp" alt="" coords="1693,161,1888,188"/>
+<area shape="rect" href="$InstructionCombining_8cpp.html" title="InstructionCombining.cpp" alt="" coords="1912,161,2096,188"/>
+<area shape="rect" href="$BoundsChecking_8cpp.html" title="BoundsChecking.cpp" alt="" coords="261,161,416,188"/>
+<area shape="rect" href="$GlobalOpt_8cpp.html" title="GlobalOpt.cpp" alt="" coords="440,161,552,188"/>
+<area shape="rect" href="$DeadStoreElimination_8cpp.html" title="DeadStoreElimination.cpp" alt="" coords="576,161,763,188"/>
+<area shape="rect" href="$GVN_8cpp.html" title="GVN.cpp" alt="" coords="787,161,864,188"/>
+<area shape="rect" href="$Local_8cpp.html" title="Local.cpp" alt="" coords="888,161,968,188"/>
+<area shape="rect" href="$Execution_8cpp.html" title="Execution.cpp" alt="" coords="4240,161,4349,188"/>
+<area shape="rect" href="$ExternalFunctions_8cpp.html" title="ExternalFunctions.cpp" alt="" coords="4373,161,4533,188"/>
+<area shape="rect" href="$Interpreter_8cpp.html" title="Interpreter.cpp" alt="" coords="4557,161,4672,188"/>
+<area shape="rect" href="$InstCombineAddSub_8cpp.html" title="InstCombineAddSub.cpp" alt="" coords="3163,161,3341,188"/>
+<area shape="rect" href="$InstCombineAndOrXor_8cpp.html" title="InstCombineAndOrXor.cpp" alt="" coords="3365,161,3552,188"/>
+<area shape="rect" href="$InstCombineCasts_8cpp.html" title="InstCombineCasts.cpp" alt="" coords="3576,161,3739,188"/>
+<area shape="rect" href="$InstCombineLoadStoreAlloca_8cpp.html" title="InstCombineLoadStoreAlloca.cpp" alt="" coords="3763,161,3995,188"/>
+<area shape="rect" href="$InstCombineMulDivRem_8cpp.html" title="InstCombineMulDivRem.cpp" alt="" coords="4019,161,4216,188"/>
+<area shape="rect" href="$InstCombinePHI_8cpp.html" title="InstCombinePHI.cpp" alt="" coords="2120,161,2269,188"/>
+<area shape="rect" href="$InstCombineSelect_8cpp.html" title="InstCombineSelect.cpp" alt="" coords="2293,161,2461,188"/>
+<area shape="rect" href="$InstCombineShifts_8cpp.html" title="InstCombineShifts.cpp" alt="" coords="2485,161,2648,188"/>
+<area shape="rect" href="$InstCombineSimplifyDemanded_8cpp.html" title="InstCombineSimplifyDemanded.cpp" alt="" coords="2672,161,2920,188"/>
+<area shape="rect" href="$InstCombineVectorOps_8cpp.html" title="InstCombineVectorOps.cpp" alt="" coords="2944,161,3139,188"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,42 @@
+<map id="G" name="G">
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="1544,239,1659,265"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="1960,471,2165,497"/>
+<area shape="rect" href="$Instructions_8h.html" title="llvm/Instructions.h" alt="" coords="1065,161,1201,188"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="1736,161,1856,188"/>
+<area shape="rect" href="$IntrinsicInst_8h.html" title="llvm/IntrinsicInst.h" alt="" coords="1623,84,1759,111"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="2264,161,2373,188"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="904,84,1069,111"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="2275,393,2413,420"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="1371,316,1507,343"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="773,316,904,343"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="963,703,1136,729"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="1824,316,1952,343"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="1171,393,1296,420"/>
+<area shape="rect" href="$Constant_8h.html" title="llvm/Constant.h" alt="" coords="1640,471,1760,497"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="965,393,1096,420"/>
+<area shape="rect" href="$SymbolTableListTraits_8h.html" title="llvm/SymbolTableListTraits.h" alt="" coords="693,393,891,420"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="645,548,760,575"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="1573,393,1699,420"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="596,703,780,729"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="2413,471,2565,497"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1315,548,1464,575"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="1245,625,1432,652"/>
+<area shape="rect" href="$Value_8h.html" title="llvm/Value.h" alt="" coords="2291,471,2389,497"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="955,471,1144,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1269,471,1413,497"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="784,548,952,575"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="968,625,1131,652"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="1071,316,1196,343"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="320,393,467,420"/>
+<area shape="rect" href="$IntegersSubset_8h.html" title="llvm/Support/IntegersSubset.h" alt="" coords="483,316,699,343"/>
+<area shape="rect" href="$IntegersSubsetMapping_8h.html" title="llvm/Support/IntegersSubsetMapping.h" alt="" coords="456,239,725,265"/>
+<area shape="rect" href="$OperandTraits_8h.html" title="llvm/OperandTraits.h" alt="" coords="1784,471,1936,497"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="133,548,224,575"/>
+<area shape="rect" href="$Constants_8h.html" title="llvm/Constants.h" alt="" coords="1421,393,1549,420"/>
+<area shape="rect" href="$LLVMContext_8h.html" title="llvm/LLVMContext.h" alt="" coords="400,548,547,575"/>
+<area shape="rect" href="$GlobalVariable_8h.html" title="llvm/GlobalVariable.h" alt="" coords="2152,316,2307,343"/>
+<area shape="rect" href="$GlobalAlias_8h.html" title="llvm/GlobalAlias.h" alt="" coords="2381,316,2515,343"/>
+<area shape="rect" href="$Metadata_8h.html" title="llvm/Metadata.h" alt="" coords="2027,393,2149,420"/>
+<area shape="rect" href="$OwningPtr_8h.html" title="llvm/ADT/OwningPtr.h" alt="" coords="2341,548,2496,575"/>
+<area shape="rect" href="$PointerIntPair_8h.html" title="llvm/ADT/PointerIntPair.h" alt="" coords="5,239,181,265"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstVisitor_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,344 @@
+<!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: InstVisitor.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_b423301f639fc46b24b2c9f122fcaff7.html">Support</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstVisitor.h</div>  </div>
+</div>
+<div class="contents">
+<a href="InstVisitor_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/Support/InstVisitor.h - Define instruction visitors -*- 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 
+<a name="l00010"></a>00010 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef LLVM_SUPPORT_INSTVISITOR_H</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_SUPPORT_INSTVISITOR_H</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include "<a class="code" href="Function_8h.html">llvm/Function.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="Instructions_8h.html">llvm/Instructions.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="Intrinsics_8h.html">llvm/Intrinsics.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="IntrinsicInst_8h.html">llvm/IntrinsicInst.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="Module_8h.html">llvm/Module.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="CallSite_8h.html">llvm/Support/CallSite.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.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="comment">// We operate on opaque instruction classes, so forward declare all instruction</span>
+<a name="l00025"></a>00025 <span class="comment">// types now...</span>
+<a name="l00026"></a>00026 <span class="comment">//</span>
+<a name="l00027"></a><a class="code" href="InstVisitor_8h.html#acec6f7e3c8f55141a25830332307d3ea">00027</a> <span class="preprocessor">#define HANDLE_INST(NUM, OPCODE, CLASS)   class CLASS;</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include "llvm/Instruction.def"</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="preprocessor">#define DELEGATE(CLASS_TO_VISIT) \</span>
+<a name="l00031"></a>00031 <span class="preprocessor">  return static_cast<SubClass*>(this)-> \</span>
+<a name="l00032"></a>00032 <span class="preprocessor">               visit##CLASS_TO_VISIT(static_cast<CLASS_TO_VISIT&>(I))</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="comment"></span>
+<a name="l00035"></a>00035 <span class="comment">/// @brief Base class for instruction visitors</span>
+<a name="l00036"></a>00036 <span class="comment">///</span>
+<a name="l00037"></a>00037 <span class="comment">/// Instruction visitors are used when you want to perform different actions</span>
+<a name="l00038"></a>00038 <span class="comment">/// for different kinds of instructions without having to use lots of casts</span>
+<a name="l00039"></a>00039 <span class="comment">/// and a big switch statement (in your code, that is).</span>
+<a name="l00040"></a>00040 <span class="comment">///</span>
+<a name="l00041"></a>00041 <span class="comment">/// To define your own visitor, inherit from this class, specifying your</span>
+<a name="l00042"></a>00042 <span class="comment">/// new type for the 'SubClass' template parameter, and "override" visitXXX</span>
+<a name="l00043"></a>00043 <span class="comment">/// functions in your class. I say "override" because this class is defined</span>
+<a name="l00044"></a>00044 <span class="comment">/// in terms of statically resolved overloading, not virtual functions.</span>
+<a name="l00045"></a>00045 <span class="comment">///</span>
+<a name="l00046"></a>00046 <span class="comment">/// For example, here is a visitor that counts the number of malloc</span>
+<a name="l00047"></a>00047 <span class="comment">/// instructions processed:</span>
+<a name="l00048"></a>00048 <span class="comment">///</span>
+<a name="l00049"></a>00049 <span class="comment">///  /// Declare the class.  Note that we derive from InstVisitor instantiated</span>
+<a name="l00050"></a>00050 <span class="comment">///  /// with _our new subclasses_ type.</span>
+<a name="l00051"></a>00051 <span class="comment">///  ///</span>
+<a name="l00052"></a>00052 <span class="comment">///  struct CountAllocaVisitor : public InstVisitor<CountAllocaVisitor> {</span>
+<a name="l00053"></a>00053 <span class="comment">///    unsigned Count;</span>
+<a name="l00054"></a>00054 <span class="comment">///    CountAllocaVisitor() : Count(0) {}</span>
+<a name="l00055"></a>00055 <span class="comment">///</span>
+<a name="l00056"></a>00056 <span class="comment">///    void visitAllocaInst(AllocaInst &AI) { ++Count; }</span>
+<a name="l00057"></a>00057 <span class="comment">///  };</span>
+<a name="l00058"></a>00058 <span class="comment">///</span>
+<a name="l00059"></a>00059 <span class="comment">///  And this class would be used like this:</span>
+<a name="l00060"></a>00060 <span class="comment">///    CountAllocaVisitor CAV;</span>
+<a name="l00061"></a>00061 <span class="comment">///    CAV.visit(function);</span>
+<a name="l00062"></a>00062 <span class="comment">///    NumAllocas = CAV.Count;</span>
+<a name="l00063"></a>00063 <span class="comment">///</span>
+<a name="l00064"></a>00064 <span class="comment">/// The defined has 'visit' methods for Instruction, and also for BasicBlock,</span>
+<a name="l00065"></a>00065 <span class="comment">/// Function, and Module, which recursively process all contained instructions.</span>
+<a name="l00066"></a>00066 <span class="comment">///</span>
+<a name="l00067"></a>00067 <span class="comment">/// Note that if you don't implement visitXXX for some instruction type,</span>
+<a name="l00068"></a>00068 <span class="comment">/// the visitXXX method for instruction superclass will be invoked. So</span>
+<a name="l00069"></a>00069 <span class="comment">/// if instructions are added in the future, they will be automatically</span>
+<a name="l00070"></a>00070 <span class="comment">/// supported, if you handle one of their superclasses.</span>
+<a name="l00071"></a>00071 <span class="comment">///</span>
+<a name="l00072"></a>00072 <span class="comment">/// The optional second template argument specifies the type that instruction</span>
+<a name="l00073"></a>00073 <span class="comment">/// visitation functions should return. If you specify this, you *MUST* provide</span>
+<a name="l00074"></a>00074 <span class="comment">/// an implementation of visitInstruction though!.</span>
+<a name="l00075"></a>00075 <span class="comment">///</span>
+<a name="l00076"></a>00076 <span class="comment">/// Note that this class is specifically designed as a template to avoid</span>
+<a name="l00077"></a>00077 <span class="comment">/// virtual function call overhead.  Defining and using an InstVisitor is just</span>
+<a name="l00078"></a>00078 <span class="comment">/// as efficient as having your own switch statement over the instruction</span>
+<a name="l00079"></a>00079 <span class="comment">/// opcode.</span>
+<a name="l00080"></a>00080 <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> SubClass, <span class="keyword">typename</span> RetTy=<span class="keywordtype">void</span>>
+<a name="l00081"></a>00081 <span class="keyword">class </span><a class="code" href="classInstVisitor.html">InstVisitor</a> {
+<a name="l00082"></a>00082   <span class="comment">//===--------------------------------------------------------------------===//</span>
+<a name="l00083"></a>00083   <span class="comment">// Interface code - This is the public interface of the InstVisitor that you</span>
+<a name="l00084"></a>00084   <span class="comment">// use to visit instructions...</span>
+<a name="l00085"></a>00085   <span class="comment">//</span>
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 <span class="keyword">public</span>:
+<a name="l00088"></a>00088   <span class="comment">// Generic visit method - Allow visitation to all instructions in a range</span>
+<a name="l00089"></a>00089   <span class="keyword">template</span><<span class="keyword">class</span> Iterator>
+<a name="l00090"></a>00090   <span class="keywordtype">void</span> visit(Iterator Start, Iterator End) {
+<a name="l00091"></a>00091     <span class="keywordflow">while</span> (Start != End)
+<a name="l00092"></a>00092       <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visit(*Start++);
+<a name="l00093"></a>00093   }
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095   <span class="comment">// Define visitors for functions and basic blocks...</span>
+<a name="l00096"></a>00096   <span class="comment">//</span>
+<a name="l00097"></a>00097   <span class="keywordtype">void</span> visit(Module &M) {
+<a name="l00098"></a>00098     <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visitModule(M);
+<a name="l00099"></a>00099     visit(M.begin(), M.end());
+<a name="l00100"></a>00100   }
+<a name="l00101"></a>00101   <span class="keywordtype">void</span> visit(Function &<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>) {
+<a name="l00102"></a>00102     <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visitFunction(F);
+<a name="l00103"></a>00103     visit(F.begin(), F.end());
+<a name="l00104"></a>00104   }
+<a name="l00105"></a>00105   <span class="keywordtype">void</span> visit(<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a> &BB) {
+<a name="l00106"></a>00106     <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visitBasicBlock(BB);
+<a name="l00107"></a>00107     visit(BB.begin(), BB.end());
+<a name="l00108"></a>00108   }
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110   <span class="comment">// Forwarding functions so that the user can visit with pointers AND refs.</span>
+<a name="l00111"></a>00111   <span class="keywordtype">void</span> visit(Module       *M)  { visit(*M); }
+<a name="l00112"></a>00112   <span class="keywordtype">void</span> visit(Function     *F)  { visit(*F); }
+<a name="l00113"></a>00113   <span class="keywordtype">void</span> visit(<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a>   *BB) { visit(*BB); }
+<a name="l00114"></a>00114   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visit(Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)  { <span class="keywordflow">return</span> visit(*I); }
+<a name="l00115"></a>00115 
+<a name="l00116"></a>00116   <span class="comment">// visit - Finally, code to visit an instruction...</span>
+<a name="l00117"></a>00117   <span class="comment">//</span>
+<a name="l00118"></a>00118   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visit(Instruction &I) {
+<a name="l00119"></a>00119     <span class="keywordflow">switch</span> (I.getOpcode()) {
+<a name="l00120"></a>00120     <span class="keywordflow">default</span>: <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unknown instruction type encountered!"</span>);
+<a name="l00121"></a>00121       <span class="comment">// Build the switch statement using the Instruction.def file...</span>
+<a name="l00122"></a>00122 <span class="preprocessor">#define HANDLE_INST(NUM, OPCODE, CLASS) \</span>
+<a name="l00123"></a>00123 <span class="preprocessor">    case Instruction::OPCODE: return \</span>
+<a name="l00124"></a><a class="code" href="namespacellvm.html#a5d76973fd2e5e0fd234e129d3fb03db0">00124</a> <span class="preprocessor">           static_cast<SubClass*>(this)-> \</span>
+<a name="l00125"></a>00125 <span class="preprocessor">                      visit##OPCODE(static_cast<CLASS&>(I));</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#include "llvm/Instruction.def"</span>
+<a name="l00127"></a>00127     }
+<a name="l00128"></a>00128   }
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130   <span class="comment">//===--------------------------------------------------------------------===//</span>
+<a name="l00131"></a>00131   <span class="comment">// Visitation functions... these functions provide default fallbacks in case</span>
+<a name="l00132"></a>00132   <span class="comment">// the user does not specify what to do for a particular instruction type.</span>
+<a name="l00133"></a><a class="code" href="namespacellvm.html#a046d5352df590c864fee454e53ac31c6">00133</a>   <span class="comment">// The default behavior is to generalize the instruction type to its subtype</span>
+<a name="l00134"></a>00134   <span class="comment">// and try visiting the subtype.  All of this should be inlined perfectly,</span>
+<a name="l00135"></a>00135   <span class="comment">// because there are no virtual functions to get in the way.</span>
+<a name="l00136"></a>00136   <span class="comment">//</span>
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138   <span class="comment">// When visiting a module, function or basic block directly, these methods get</span>
+<a name="l00139"></a>00139   <span class="comment">// called to indicate when transitioning into a new unit.</span>
+<a name="l00140"></a>00140   <span class="comment">//</span>
+<a name="l00141"></a>00141   <span class="keywordtype">void</span> visitModule    (<a class="code" href="classllvm_1_1Module.html" title="The main container class for the LLVM Intermediate Representation.">Module</a> &M) {}
+<a name="l00142"></a>00142   <span class="keywordtype">void</span> visitFunction  (Function &F) {}
+<a name="l00143"></a>00143   <span class="keywordtype">void</span> visitBasicBlock(<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a> &BB) {}
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145   <span class="comment">// Define instruction specific visitor functions that can be overridden to</span>
+<a name="l00146"></a><a class="code" href="namespacellvm.html#a3da04da2a51c5da491960f875a3222ad">00146</a>   <span class="comment">// handle SPECIFIC instructions.  These functions automatically define</span>
+<a name="l00147"></a>00147   <span class="comment">// visitMul to proxy to visitBinaryOperator for instance in case the user does</span>
+<a name="l00148"></a><a class="code" href="namespacellvm.html#ae2dfc57500e32ee6f5ac871f7ec55d5b">00148</a>   <span class="comment">// not need this generality.</span>
+<a name="l00149"></a>00149   <span class="comment">//</span>
+<a name="l00150"></a><a class="code" href="namespacellvm.html#a3677968984dd841410ed46288fd5ab6c">00150</a>   <span class="comment">// These functions can also implement fan-out, when a single opcode and</span>
+<a name="l00151"></a>00151   <span class="comment">// instruction have multiple more specific Instruction subclasses. The Call</span>
+<a name="l00152"></a><a class="code" href="namespacellvm.html#aa7d131dc7d18431127ae9fe7d4429fa7">00152</a>   <span class="comment">// instruction currently supports this. We implement that by redirecting that</span>
+<a name="l00153"></a>00153   <span class="comment">// instruction to a special delegation helper.</span>
+<a name="l00154"></a><a class="code" href="namespacellvm.html#a24e13352d9c828e3de6682f4baae88fd">00154</a> <span class="preprocessor">#define HANDLE_INST(NUM, OPCODE, CLASS) \</span>
+<a name="l00155"></a>00155 <span class="preprocessor">    RetTy visit##OPCODE(CLASS &I) { \</span>
+<a name="l00156"></a><a class="code" href="namespacellvm.html#a20744d4958a3cd24012862024a8b5851">00156</a> <span class="preprocessor">      if (NUM == Instruction::Call) \</span>
+<a name="l00157"></a>00157 <span class="preprocessor">        return delegateCallInst(I); \</span>
+<a name="l00158"></a>00158 <span class="preprocessor">      else \</span>
+<a name="l00159"></a>00159 <span class="preprocessor">        DELEGATE(CLASS); \</span>
+<a name="l00160"></a>00160 <span class="preprocessor">    }</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#include "llvm/Instruction.def"</span>
+<a name="l00162"></a><a class="code" href="namespacellvm.html#a6a4ce50f71e29df6dd1920cf067a2eb5">00162</a> 
+<a name="l00163"></a>00163   <span class="comment">// Specific Instruction type classes... note that all of the casts are</span>
+<a name="l00164"></a><a class="code" href="namespacellvm.html#a332cde6eadc39e042b35937d137c83f6">00164</a>   <span class="comment">// necessary because we use the instruction classes as opaque types...</span>
+<a name="l00165"></a>00165   <span class="comment">//</span>
+<a name="l00166"></a><a class="code" href="namespacellvm.html#af3ab12efdd6b4902d711e72b7a81f13b">00166</a>   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitReturnInst(<a class="code" href="classllvm_1_1ReturnInst.html">ReturnInst</a> &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(<a class="code" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a>);}
+<a name="l00167"></a>00167   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitBranchInst(BranchInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(TerminatorInst);}
+<a name="l00168"></a><a class="code" href="namespacellvm.html#a248efaa9105a526e587d9603d7675985">00168</a>   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitSwitchInst(<a class="code" href="classllvm_1_1SwitchInst.html">SwitchInst</a> &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(<a class="code" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a>);}
+<a name="l00169"></a>00169   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitIndirectBrInst(IndirectBrInst &I)    { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(TerminatorInst);}
+<a name="l00170"></a><a class="code" href="namespacellvm.html#ab381a6bd4190ac0c92dd12b7bcf8670b">00170</a>   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitResumeInst(<a class="code" href="classllvm_1_1ResumeInst.html">ResumeInst</a> &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(<a class="code" href="classllvm_1_1TerminatorInst.html">TerminatorInst</a>);}
+<a name="l00171"></a>00171   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitUnreachableInst(UnreachableInst &I)  { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(TerminatorInst);}
+<a name="l00172"></a><a class="code" href="namespacellvm.html#adf8e6afb8f89abc3900677224e37e9fc">00172</a>   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitICmpInst(<a class="code" href="classllvm_1_1ICmpInst.html" title="Represent an integer comparison operator.">ICmpInst</a> &I)                { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(<a class="code" href="classllvm_1_1CmpInst.html" title="Abstract base class of comparison instructions.">CmpInst</a>);}
+<a name="l00173"></a>00173   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFCmpInst(FCmpInst &I)                { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CmpInst);}
+<a name="l00174"></a><a class="code" href="namespacellvm.html#a76c28bb2ffedc276a40a8898166e0d3a">00174</a>   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitAllocaInst(<a class="code" href="classllvm_1_1AllocaInst.html">AllocaInst</a> &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(<a class="code" href="classllvm_1_1UnaryInstruction.html">UnaryInstruction</a>);}
+<a name="l00175"></a>00175   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitLoadInst(LoadInst     &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(UnaryInstruction);}
+<a name="l00176"></a>00176   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitStoreInst(StoreInst   &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00177"></a>00177   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitAtomicCmpXchgInst(AtomicCmpXchgInst &I) { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00178"></a>00178   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitAtomicRMWInst(AtomicRMWInst &I)      { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00179"></a>00179   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFenceInst(FenceInst   &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00180"></a>00180   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitGetElementPtrInst(GetElementPtrInst &I){ <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00181"></a>00181   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitPHINode(PHINode       &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00182"></a>00182   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitTruncInst(TruncInst &I)              { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00183"></a>00183   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitZExtInst(ZExtInst &I)                { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00184"></a>00184   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitSExtInst(SExtInst &I)                { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00185"></a>00185   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFPTruncInst(FPTruncInst &I)          { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00186"></a>00186   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFPExtInst(FPExtInst &I)              { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00187"></a>00187   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFPToUIInst(FPToUIInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00188"></a>00188   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitFPToSIInst(FPToSIInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00189"></a>00189   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitUIToFPInst(UIToFPInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00190"></a>00190   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitSIToFPInst(SIToFPInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00191"></a>00191   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitPtrToIntInst(PtrToIntInst &I)        { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00192"></a>00192   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitIntToPtrInst(IntToPtrInst &I)        { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00193"></a>00193   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitBitCastInst(BitCastInst &I)          { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CastInst);}
+<a name="l00194"></a>00194   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitSelectInst(SelectInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00195"></a>00195   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitVAArgInst(VAArgInst   &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(UnaryInstruction);}
+<a name="l00196"></a>00196   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitExtractElementInst(ExtractElementInst &I) { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00197"></a>00197   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitInsertElementInst(InsertElementInst &I) { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00198"></a>00198   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitShuffleVectorInst(ShuffleVectorInst &I) { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00199"></a>00199   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitExtractValueInst(ExtractValueInst &I){ <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(UnaryInstruction);}
+<a name="l00200"></a>00200   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitInsertValueInst(InsertValueInst &I)  { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction); }
+<a name="l00201"></a>00201   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitLandingPadInst(LandingPadInst &I)    { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction); }
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203   <span class="comment">// Handle the special instrinsic instruction classes.</span>
+<a name="l00204"></a>00204   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitDbgDeclareInst(DbgDeclareInst &I)    { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(DbgInfoIntrinsic);}
+<a name="l00205"></a>00205   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitDbgValueInst(DbgValueInst &I)        { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(DbgInfoIntrinsic);}
+<a name="l00206"></a>00206   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitDbgInfoIntrinsic(DbgInfoIntrinsic &I) { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst); }
+<a name="l00207"></a>00207   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitMemSetInst(MemSetInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemIntrinsic); }
+<a name="l00208"></a>00208   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitMemCpyInst(MemCpyInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemTransferInst); }
+<a name="l00209"></a>00209   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitMemMoveInst(MemMoveInst &I)          { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemTransferInst); }
+<a name="l00210"></a>00210   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitMemTransferInst(MemTransferInst &I)  { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemIntrinsic); }
+<a name="l00211"></a>00211   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitMemIntrinsic(MemIntrinsic &I)        { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst); }
+<a name="l00212"></a>00212   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitVAStartInst(VAStartInst &I)          { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst); }
+<a name="l00213"></a>00213   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitVAEndInst(VAEndInst &I)              { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst); }
+<a name="l00214"></a>00214   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitVACopyInst(VACopyInst &I)            { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst); }
+<a name="l00215"></a>00215   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitIntrinsicInst(IntrinsicInst &I)      { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CallInst); }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217   <span class="comment">// Call and Invoke are slightly different as they delegate first through</span>
+<a name="l00218"></a>00218   <span class="comment">// a generic CallSite visitor.</span>
+<a name="l00219"></a>00219   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitCallInst(CallInst &I) {
+<a name="l00220"></a>00220     <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visitCallSite(&I);
+<a name="l00221"></a>00221   }
+<a name="l00222"></a>00222   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitInvokeInst(InvokeInst &I) {
+<a name="l00223"></a>00223     <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>SubClass*<span class="keyword">></span>(<span class="keyword">this</span>)->visitCallSite(&I);
+<a name="l00224"></a>00224   }
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226   <span class="comment">// Next level propagators: If the user does not overload a specific</span>
+<a name="l00227"></a>00227   <span class="comment">// instruction type, they can overload one of these to get the whole class</span>
+<a name="l00228"></a>00228   <span class="comment">// of instructions...</span>
+<a name="l00229"></a>00229   <span class="comment">//</span>
+<a name="l00230"></a>00230   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitCastInst(CastInst &I)                { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(UnaryInstruction);}
+<a name="l00231"></a>00231   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitBinaryOperator(BinaryOperator &I)    { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00232"></a>00232   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitCmpInst(CmpInst &I)                  { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00233"></a>00233   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitTerminatorInst(TerminatorInst &I)    { <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00234"></a>00234   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitUnaryInstruction(UnaryInstruction &I){ <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);}
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236   <span class="comment">// Provide a special visitor for a 'callsite' that visits both calls and</span>
+<a name="l00237"></a>00237   <span class="comment">// invokes. When unimplemented, properly delegates to either the terminator or</span>
+<a name="l00238"></a>00238   <span class="comment">// regular instruction visitor.</span>
+<a name="l00239"></a>00239   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> visitCallSite(CallSite CS) {
+<a name="l00240"></a>00240     assert(CS);
+<a name="l00241"></a>00241     Instruction &I = *CS.getInstruction();
+<a name="l00242"></a>00242     <span class="keywordflow">if</span> (CS.isCall())
+<a name="l00243"></a>00243       <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(Instruction);
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245     assert(CS.isInvoke());
+<a name="l00246"></a>00246     <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(TerminatorInst);
+<a name="l00247"></a>00247   }
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249   <span class="comment">// If the user wants a 'default' case, they can choose to override this</span>
+<a name="l00250"></a>00250   <span class="comment">// function.  If this function is not overloaded in the user's subclass, then</span>
+<a name="l00251"></a>00251   <span class="comment">// this instruction just gets ignored.</span>
+<a name="l00252"></a>00252   <span class="comment">//</span>
+<a name="l00253"></a>00253   <span class="comment">// Note that you MUST override this function if your return type is not void.</span>
+<a name="l00254"></a><a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">00254</a>   <span class="comment">//</span>
+<a name="l00255"></a>00255   <span class="keywordtype">void</span> visitInstruction(<a class="code" href="classllvm_1_1Instruction.html">Instruction</a> &I) {}  <span class="comment">// Ignore unhandled instructions</span>
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257 <span class="keyword">private</span>:
+<a name="l00258"></a>00258   <span class="comment">// Special helper function to delegate to CallInst subclass visitors.</span>
+<a name="l00259"></a>00259   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> delegateCallInst(CallInst &I) {
+<a name="l00260"></a>00260     <span class="keywordflow">if</span> (<span class="keyword">const</span> Function *F = I.getCalledFunction()) {
+<a name="l00261"></a>00261       <span class="keywordflow">switch</span> ((<a class="code" href="namespacellvm_1_1Intrinsic.html#a73349916f7e54a6b988a3646c7a02e90">Intrinsic::ID</a>)F->getIntrinsicID()) {
+<a name="l00262"></a>00262       <span class="keywordflow">default</span>:                     <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(IntrinsicInst);
+<a name="l00263"></a>00263       <span class="keywordflow">case</span> Intrinsic::dbg_declare: <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(DbgDeclareInst);
+<a name="l00264"></a>00264       <span class="keywordflow">case</span> Intrinsic::dbg_value:   <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(DbgValueInst);
+<a name="l00265"></a>00265       <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fad5203242bc89eaa644dc7b7ba2371c1d" title="void *memcpy(void *s1, const void *s2, size_t n);">Intrinsic::memcpy</a>:      <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemCpyInst);
+<a name="l00266"></a>00266       <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9e02525b88a00a1d0e8dcded032acbee" title="void *memmove(void *s1, const void *s2, size_t n);">Intrinsic::memmove</a>:     <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemMoveInst);
+<a name="l00267"></a>00267       <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9f7f1b6be1144152902121f2463d0368" title="void *memset(void *b, int c, size_t len);">Intrinsic::memset</a>:      <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(MemSetInst);
+<a name="l00268"></a>00268       <span class="keywordflow">case</span> Intrinsic::vastart:     <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(VAStartInst);
+<a name="l00269"></a>00269       <span class="keywordflow">case</span> Intrinsic::vaend:       <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(VAEndInst);
+<a name="l00270"></a>00270       <span class="keywordflow">case</span> Intrinsic::vacopy:      <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(VACopyInst);
+<a name="l00271"></a>00271       <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1Intrinsic.html#a73349916f7e54a6b988a3646c7a02e90aab5fb650050f184fa7c19c26abde5226">Intrinsic::not_intrinsic</a>: <span class="keywordflow">break</span>;
+<a name="l00272"></a>00272       }
+<a name="l00273"></a>00273     }
+<a name="l00274"></a>00274     <a class="code" href="InstVisitor_8h.html#a1731d8b09e6c62e50d2e39be54d910ec">DELEGATE</a>(CallInst);
+<a name="l00275"></a>00275   }
+<a name="l00276"></a>00276 
+<a name="l00277"></a>00277   <span class="comment">// An overload that will never actually be called, it is used only from dead</span>
+<a name="l00278"></a>00278   <span class="comment">// code in the dispatching from opcodes to instruction subclasses.</span>
+<a name="l00279"></a>00279   <a class="code" href="namespacellvm.html#ab83a048107217f63353d29f525d4794b">RetTy</a> delegateCallInst(Instruction &I) {
+<a name="l00280"></a>00280     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"delegateCallInst called for non-CallInst"</span>);
+<a name="l00281"></a>00281   }
+<a name="l00282"></a>00282 };
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 <span class="preprocessor">#undef DELEGATE</span>
+<a name="l00285"></a>00285 <span class="preprocessor"></span>
+<a name="l00286"></a>00286 } <span class="comment">// End llvm namespace</span>
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34:54 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/InstrEmitter_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,47 @@
+<map id="G" name="G">
+<area shape="rect" href="$InstrEmitter_8h.html" title="InstrEmitter.h" alt="" coords="2743,84,2849,111"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="1863,393,2052,420"/>
+<area shape="rect" href="$Target_2TargetMachine_8h.html" title="llvm/Target/TargetMachine.h" alt="" coords="464,239,661,265"/>
+<area shape="rect" href="$SDNodeDbgValue_8h.html" title="SDNodeDbgValue.h" alt="" coords="2395,239,2541,265"/>
+<area shape="rect" href="$MachineConstantPool_8h.html" title="llvm/CodeGen/MachineConstantPool.h" alt="" coords="4492,161,4756,188"/>
+<area shape="rect" href="$MachineFunction_8h.html" title="llvm/CodeGen/MachineFunction.h" alt="" coords="2228,161,2460,188"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="856,316,1061,343"/>
+<area shape="rect" href="$MachineInstrBuilder_8h.html" title="llvm/CodeGen/MachineInstrBuilder.h" alt="" coords="2212,84,2463,111"/>
+<area shape="rect" href="$MachineRegisterInfo_8h.html" title="llvm/CodeGen/MachineRegisterInfo.h" alt="" coords="3311,161,3564,188"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="2616,239,2752,265"/>
+<area shape="rect" href="$TargetInstrInfo_8h.html" title="llvm/Target/TargetInstrInfo.h" alt="" coords="2924,84,3119,111"/>
+<area shape="rect" href="$TargetLowering_8h.html" title="llvm/Target/TargetLowering.h" alt="" coords="1472,161,1672,188"/>
+<area shape="rect" href="$Statistic_8h.html" title="llvm/ADT/Statistic.h" alt="" coords="3193,84,3337,111"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="3361,84,3521,111"/>
+<area shape="rect" href="$SelectionDAG_8h.html" title="llvm/CodeGen/SelectionDAG.h" alt="" coords="2689,161,2903,188"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="3064,316,3224,343"/>
+<area shape="rect" href="$MachineBasicBlock_8h.html" title="llvm/CodeGen/MachineBasicBlock.h" alt="" coords="4203,316,4451,343"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="2344,316,2459,343"/>
+<area shape="rect" href="$DenseSet_8h.html" title="llvm/ADT/DenseSet.h" alt="" coords="3651,239,3805,265"/>
+<area shape="rect" href="$SelectionDAGNodes_8h.html" title="llvm/CodeGen/SelectionDAGNodes.h" alt="" coords="2064,239,2320,265"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="2533,316,2701,343"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="1881,548,2065,575"/>
+<area shape="rect" href="$DebugLoc_8h.html" title="llvm/Support/DebugLoc.h" alt="" coords="1987,316,2168,343"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="549,471,640,497"/>
+<area shape="rect" href="$CodeGen_8h.html" title="llvm/Support/CodeGen.h" alt="" coords="195,316,371,343"/>
+<area shape="rect" href="$TargetOptions_8h.html" title="llvm/Target/TargetOptions.h" alt="" coords="203,471,397,497"/>
+<area shape="rect" href="$TargetTransformInfo_8h.html" title="llvm/TargetTransformInfo.h" alt="" coords="493,393,680,420"/>
+<area shape="rect" href="$TargetTransformImpl_8h.html" title="llvm/Target/TargetTransformImpl.h" alt="" coords="445,316,680,343"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="996,393,1145,420"/>
+<area shape="rect" href="$AddressingMode_8h.html" title="llvm/AddressingMode.h" alt="" coords="735,471,903,497"/>
+<area shape="rect" href="$Allocator_8h.html" title="llvm/Support/Allocator.h" alt="" coords="1688,316,1861,343"/>
+<area shape="rect" href="$Recycler_8h.html" title="llvm/Support/Recycler.h" alt="" coords="1720,239,1888,265"/>
+<area shape="rect" href="$TargetRegisterInfo_8h.html" title="llvm/Target/TargetRegisterInfo.h" alt="" coords="3829,239,4048,265"/>
+<area shape="rect" href="$MachineInstrBundle_8h.html" title="llvm/CodeGen/MachineInstrBundle.h" alt="" coords="4072,239,4323,265"/>
+<area shape="rect" href="$BitVector_8h.html" title="llvm/ADT/BitVector.h" alt="" coords="3232,239,3381,265"/>
+<area shape="rect" href="$IndexedMap_8h.html" title="llvm/ADT/IndexedMap.h" alt="" coords="3405,239,3576,265"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="1379,316,1515,343"/>
+<area shape="rect" href="$SmallSet_8h.html" title="llvm/ADT/SmallSet.h" alt="" coords="3080,161,3232,188"/>
+<area shape="rect" href="$MCInstrInfo_8h.html" title="llvm/MC/MCInstrInfo.h" alt="" coords="4715,393,4872,420"/>
+<area shape="rect" href="$DFAPacketizer_8h.html" title="llvm/CodeGen/DFAPacketizer.h" alt="" coords="4347,239,4563,265"/>
+<area shape="rect" href="$InlineAsm_8h.html" title="llvm/InlineAsm.h" alt="" coords="1229,239,1355,265"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="1539,316,1664,343"/>
+<area shape="rect" href="$CallSite_8h.html" title="llvm/Support/CallSite.h" alt="" coords="1429,239,1595,265"/>
+<area shape="rect" href="$RuntimeLibcalls_8h.html" title="llvm/CodeGen/RuntimeLibcalls.h" alt="" coords="931,239,1155,265"/>
+<area shape="rect" href="$TargetCallingConv_8h.html" title="llvm/Target/TargetCallingConv.h" alt="" coords="1136,316,1355,343"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstrEmitter_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: InstrEmitter.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_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="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a>  </div>
+  <div class="headertitle">
+<div class="title">InstrEmitter.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="SelectionDAG_8h_source.html">llvm/CodeGen/SelectionDAG.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineBasicBlock_8h_source.html">llvm/CodeGen/MachineBasicBlock.h</a>"</code><br/>
+<code>#include "<a class="el" href="DenseMap_8h_source.html">llvm/ADT/DenseMap.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstrEmitter.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstrEmitter_8h__incl.png" border="0" usemap="#InstrEmitter_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="InstrEmitter_8h__dep__incl.png" border="0" usemap="#InstrEmitter_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="InstrEmitter_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_1InstrEmitter.html">llvm::InstrEmitter</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:30 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/InstrTypes_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstrTypes_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstrTypes_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstrTypes_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,262 @@
+<!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: InstrTypes.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>
+    </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">InstrTypes.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="Instruction_8h_source.html">llvm/Instruction.h</a>"</code><br/>
+<code>#include "<a class="el" href="OperandTraits_8h_source.html">llvm/OperandTraits.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="Twine_8h_source.html">llvm/ADT/Twine.h</a>"</code><br/>
+<code>#include "llvm/Instruction.def"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstrTypes.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstrTypes_8h__incl.png" border="0" usemap="#InstrTypes_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="InstrTypes_8h__dep__incl.png" border="0" usemap="#InstrTypes_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="InstrTypes_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_1TerminatorInst.html">llvm::TerminatorInst</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1UnaryInstruction.html">llvm::UnaryInstruction</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1OperandTraits_3_01UnaryInstruction_01_4.html">llvm::OperandTraits< UnaryInstruction ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1BinaryOperator.html">llvm::BinaryOperator</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1OperandTraits_3_01BinaryOperator_01_4.html">llvm::OperandTraits< BinaryOperator ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1CastInst.html">llvm::CastInst</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class of casting instructions.  <a href="classllvm_1_1CastInst.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1CmpInst.html">llvm::CmpInst</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Abstract base class of comparison instructions.  <a href="classllvm_1_1CmpInst.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_1OperandTraits_3_01CmpInst_01_4.html">llvm::OperandTraits< CmpInst ></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="InstrTypes_8h.html#a775c73e59af0b55df367cde0e0e89762">HANDLE_BINARY_INST</a>(N, OPC, CLASS)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="InstrTypes_8h.html#a775c73e59af0b55df367cde0e0e89762">HANDLE_BINARY_INST</a>(N, OPC, CLASS)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="InstrTypes_8h.html#a775c73e59af0b55df367cde0e0e89762">HANDLE_BINARY_INST</a>(N, OPC, CLASS)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="InstrTypes_8h.html#a919068ab0273ba84ee85358ee68176ee">DEFINE_HELPERS</a>(OPC, NUWNSWEXACT)</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a919068ab0273ba84ee85358ee68176ee"></a><!-- doxytag: member="InstrTypes.h::DEFINE_HELPERS" ref="a919068ab0273ba84ee85358ee68176ee" args="(OPC, NUWNSWEXACT)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEFINE_HELPERS</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">OPC, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">NUWNSWEXACT </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> BinaryOperator *Create ## NUWNSWEXACT ## OPC                        \
+           (Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a> = <span class="stringliteral">""</span>) {                  \
+    return Create ## NUWNSWEXACT(Instruction::OPC, V1, <a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>);            \
+  }                                                                          \
+  static BinaryOperator *Create ## NUWNSWEXACT ## OPC                        \
+           (Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a> *BB) {       \
+    return Create ## NUWNSWEXACT(Instruction::OPC, V1, <a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, BB);        \
+  }                                                                          \
+  static BinaryOperator *Create ## NUWNSWEXACT ## OPC                        \
+           (Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {       \
+    return Create ## NUWNSWEXACT(Instruction::OPC, V1, <a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);         \
+  }
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a775c73e59af0b55df367cde0e0e89762"></a><!-- doxytag: member="InstrTypes.h::HANDLE_BINARY_INST" ref="a775c73e59af0b55df367cde0e0e89762" args="(N, OPC, CLASS)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HANDLE_BINARY_INST</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">N, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">OPC, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">CLASS </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> BinaryOperator *Create##OPC(Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, \
+                                     <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a> = <span class="stringliteral">""</span>) {\
+    return Create(Instruction::OPC, V1, V2, <a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>);\
+  }
+</pre></div><p>Create* - These methods just forward to Create, and are useful when you statically know what type of instruction you're going to create. These helpers just save some typing. </p>
+
+<p>Definition at line <a class="el" href="InstrTypes_8h_source.html#l00187">187</a> of file <a class="el" href="InstrTypes_8h_source.html">InstrTypes.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a775c73e59af0b55df367cde0e0e89762"></a><!-- doxytag: member="InstrTypes.h::HANDLE_BINARY_INST" ref="a775c73e59af0b55df367cde0e0e89762" args="(N, OPC, CLASS)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HANDLE_BINARY_INST</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">N, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">OPC, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">CLASS </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> BinaryOperator *Create##OPC(Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, \
+                                     <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a8472e46f9e4db168c5610ecdfb05dbaf" title="Various leaf nodes.">BasicBlock</a> *BB) {\
+    return Create(Instruction::OPC, V1, V2, Name, BB);\
+  }
+</pre></div><p>Create* - These methods just forward to Create, and are useful when you statically know what type of instruction you're going to create. These helpers just save some typing. </p>
+
+<p>Definition at line <a class="el" href="InstrTypes_8h_source.html#l00187">187</a> of file <a class="el" href="InstrTypes_8h_source.html">InstrTypes.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a775c73e59af0b55df367cde0e0e89762"></a><!-- doxytag: member="InstrTypes.h::HANDLE_BINARY_INST" ref="a775c73e59af0b55df367cde0e0e89762" args="(N, OPC, CLASS)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HANDLE_BINARY_INST</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">N, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">OPC, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">CLASS </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> BinaryOperator *Create##OPC(Value *V1, Value *<a class="code" href="namespacellvm_1_1NVPTX_1_1PTXLdStInstCode.html#a91119cbee2be000c528a690252aee07ca24244a27b634ef3e256ab3c64c6fecd4">V2</a>, \
+                                     <span class="keyword">const</span> Twine &<a class="code" href="namespacellvm_1_1GraphProgram.html#a0ad4685976f8c4d4a697a53fbe05d10b">Name</a>, Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {\
+    return Create(Instruction::OPC, V1, V2, Name, I);\
+  }
+</pre></div><p>Create* - These methods just forward to Create, and are useful when you statically know what type of instruction you're going to create. These helpers just save some typing. </p>
+
+<p>Definition at line <a class="el" href="InstrTypes_8h_source.html#l00187">187</a> of file <a class="el" href="InstrTypes_8h_source.html">InstrTypes.h</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InstructionCombining_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstructionCombining_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstructionCombining_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstructionCombining_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,844 @@
+<!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: InstructionCombining.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_09c12503c252eb886e96f43c24bde98c.html">InstCombine</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Defines</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">InstructionCombining.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="InstCombine_8h_source.html">InstCombine.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="ConstantFolding_8h_source.html">llvm/Analysis/ConstantFolding.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="MemoryBuiltins_8h_source.html">llvm/Analysis/MemoryBuiltins.h</a>"</code><br/>
+<code>#include "<a class="el" href="DataLayout_8h_source.html">llvm/DataLayout.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetLibraryInfo_8h_source.html">llvm/Target/TargetLibraryInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="Local_8h_source.html">llvm/Transforms/Utils/Local.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="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="GetElementPtrTypeIterator_8h_source.html">llvm/Support/GetElementPtrTypeIterator.h</a>"</code><br/>
+<code>#include "<a class="el" href="PatternMatch_8h_source.html">llvm/Support/PatternMatch.h</a>"</code><br/>
+<code>#include "<a class="el" href="ValueHandle_8h_source.html">llvm/Support/ValueHandle.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="StringSwitch_8h_source.html">llvm/ADT/StringSwitch.h</a>"</code><br/>
+<code>#include "<a class="el" href="Initialization_8h_source.html">llvm-c/Initialization.h</a>"</code><br/>
+<code>#include <algorithm></code><br/>
+<code>#include <climits></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InstructionCombining.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="InstructionCombining_8cpp__incl.png" border="0" usemap="#InstructionCombining_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="InstructionCombining_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="InstructionCombining_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a>   "instcombine"</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="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a> { <a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fceca81e079acf8b55d4547c8c56a1aff358a">Unknown_Personality</a>, 
+<a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcecae42a316fa16964a2189a63eafb02321d">GNU_Ada_Personality</a>, 
+<a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fceca6a371cd3d7534a425c90e324bbed75aa">GNU_CXX_Personality</a>, 
+<a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcecaaeef37b5503975660ff3cb350bc5b162">GNU_ObjC_Personality</a>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a0cb157e7251482c582e36d8c63893ae1">STATISTIC</a> (NumCombined,"Number of insts combined")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#accf487e45a5c966eb1c593fdb95e85fc">STATISTIC</a> (NumConstProp,"Number of constant folds")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a8e510c6c6881628f8a86783d134c9435">STATISTIC</a> (NumDeadInst,"Number of dead inst eliminated")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a412162b08b10d3d9fee53d142cabdd5d">STATISTIC</a> (NumSunkInst,"Number of <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> sunk")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a9311e2e4f77e6e0d678e9f9873b72736">STATISTIC</a> (NumExpand,"Number of expansions")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a3ec71a5d54020c62d4c7ae3711195e9c">STATISTIC</a> (NumFactor,"Number of factorizations")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a44567246f382fe3974c9d5056b172b91">STATISTIC</a> (NumReassoc,"Number of reassociations")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LLVMCInitialization.html#gaf7d731d72d80afb7917f7cd548da8298">LLVMInitializeInstCombine</a> (<a class="el" href="group__LLVMCCoreTypes.html#gab1ca1ff855478bc0f33874a1182e4b94">LLVMPassRegistryRef</a> R)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a3475a57398d86c1748bdd006dfc0c4f3">INITIALIZE_PASS_BEGIN</a> (<a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a>,"instcombine","Combine redundant <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a>", false, <a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a>) INITIALIZE_PASS_END(<a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</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="InstructionCombining_8cpp.html#ad6b4395aa43cd570081d8ef779730d81">MaintainNoSignedWrap</a> (<a class="el" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> &I, <a class="el" href="classllvm_1_1Value.html">Value</a> *B, <a class="el" href="classllvm_1_1Value.html">Value</a> *C)</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="InstructionCombining_8cpp.html#afa4bb891679df17d0d41dc77417d28f5">LeftDistributesOverRight</a> (<a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> LOp, <a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> ROp)</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="InstructionCombining_8cpp.html#aaeaff568610aa9560be815db546329dc">RightDistributesOverLeft</a> (<a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> LOp, <a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> ROp)</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="InstructionCombining_8cpp.html#a6435fba4effd1a8feeb1307acc4041ea">FoldOperationIntoSelectOperand</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> &I, <a class="el" href="classllvm_1_1Value.html">Value</a> *SO, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> *IC)</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="InstructionCombining_8cpp.html#a27dc41c474e5376ef7d1865735cfb3dd">shouldMergeGEPs</a> (<a class="el" href="classllvm_1_1GEPOperator.html">GEPOperator</a> &GEP, <a class="el" href="classllvm_1_1GEPOperator.html">GEPOperator</a> &Src)</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="InstructionCombining_8cpp.html#a22f50a59f6de5223d536d8b5fc5cd91c">isAllocSiteRemovable</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *AI, <a class="el" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl</a>< <a class="el" href="classllvm_1_1WeakVH.html">WeakVH</a> > &<a class="el" href="IVUsers_8cpp.html#a4e5b9edb51eec9dbca592075eb64dfcb">Users</a>, const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#aba1a7ea04978c1d1d7f0dd865b24a213">RecognizePersonality</a> (<a class="el" href="classllvm_1_1Value.html">Value</a> *Pers)</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="InstructionCombining_8cpp.html#aa4790342aeb6f773552d018e0bcf410b">isCatchAll</a> (<a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a> Personality, <a class="el" href="classllvm_1_1Constant.html">Constant</a> *TypeInfo)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">isCatchAll - Return 'true' if the given typeinfo will match anything.  <a href="#aa4790342aeb6f773552d018e0bcf410b"></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="InstructionCombining_8cpp.html#a13d41ea63582902162e0efd8a78a5ad5">shorter_filter</a> (const <a class="el" href="classllvm_1_1Value.html">Value</a> *LHS, const <a class="el" href="classllvm_1_1Value.html">Value</a> *RHS)</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="InstructionCombining_8cpp.html#a1ea2b997ffc11a09339f80ef8287c8d5">TryToSinkInstruction</a> (<a class="el" href="classllvm_1_1Instruction.html">Instruction</a> *I, <a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> *DestBlock)</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="InstructionCombining_8cpp.html#a758068c5c175fc10dcd4b9086abfdfba">AddReachableCodeToWorklist</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> *, 64 > &Visited, <a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> &IC, const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> *TD, const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> *TLI)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a7d4d7e39548303ef4c1f5a0ed13a9c23">instcombine</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Combine redundant </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#a9360db2a972441c49cdbbabb5b20cc27">instructions</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Combine redundant </td><td class="memItemRight" valign="bottom"><a class="el" href="InstructionCombining_8cpp.html#ac735dc0034fb289533e5dc1a10a6c9ce">false</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="InstructionCombining.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_TYPE   "instcombine"</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00036">36</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a7b411f919e9298c8e86fae1794c3fcec"></a><!-- doxytag: member="InstructionCombining.cpp::Personality_Type" ref="a7b411f919e9298c8e86fae1794c3fcec" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a7b411f919e9298c8e86fae1794c3fceca81e079acf8b55d4547c8c56a1aff358a"></a><!-- doxytag: member="Unknown_Personality" ref="a7b411f919e9298c8e86fae1794c3fceca81e079acf8b55d4547c8c56a1aff358a" args="" -->Unknown_Personality</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a7b411f919e9298c8e86fae1794c3fcecae42a316fa16964a2189a63eafb02321d"></a><!-- doxytag: member="GNU_Ada_Personality" ref="a7b411f919e9298c8e86fae1794c3fcecae42a316fa16964a2189a63eafb02321d" args="" -->GNU_Ada_Personality</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a7b411f919e9298c8e86fae1794c3fceca6a371cd3d7534a425c90e324bbed75aa"></a><!-- doxytag: member="GNU_CXX_Personality" ref="a7b411f919e9298c8e86fae1794c3fceca6a371cd3d7534a425c90e324bbed75aa" args="" -->GNU_CXX_Personality</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a7b411f919e9298c8e86fae1794c3fcecaaeef37b5503975660ff3cb350bc5b162"></a><!-- doxytag: member="GNU_ObjC_Personality" ref="a7b411f919e9298c8e86fae1794c3fcecaaeef37b5503975660ff3cb350bc5b162" args="" -->GNU_ObjC_Personality</em> </td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l01719">1719</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a758068c5c175fc10dcd4b9086abfdfba"></a><!-- doxytag: member="InstructionCombining.cpp::AddReachableCodeToWorklist" ref="a758068c5c175fc10dcd4b9086abfdfba" args="(BasicBlock *BB, SmallPtrSet< BasicBlock *, 64 > &Visited, InstCombiner &IC, const DataLayout *TD, const TargetLibraryInfo *TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> AddReachableCodeToWorklist </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> *, 64 > & </td>
+          <td class="paramname"><em>Visited</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> & </td>
+          <td class="paramname"><em>IC</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1DataLayout.html">DataLayout</a> * </td>
+          <td class="paramname"><em>TD</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> * </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>AddReachableCodeToWorklist - Walk the function in depth-first order, adding all reachable code to the worklist.</p>
+<p>This has a couple of tricks to make the code faster and more powerful. In particular, we constant fold and DCE instructions as we go, to avoid adding them to the worklist (this significantly speeds up instcombine on code where many instructions are dead or constant). Additionally, if we find a branch whose condition is a known constant, we only visit the reachable successors. </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l02103">2103</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombineWorklist_8h_source.html#l00053">llvm::InstCombineWorklist::AddInitialGroup()</a>, <a class="el" href="BasicBlock_8h_source.html#l00189">llvm::BasicBlock::begin()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00871">llvm::ConstantFoldConstantExpression()</a>, <a class="el" href="ConstantFolding_8cpp_source.html#l00798">llvm::ConstantFoldInstruction()</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#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="raw__ostream_8cpp_source.html#l00674">llvm::errs()</a>, <a class="el" href="Instructions_8h_source.html#l01452">llvm::SelectInst::getCondition()</a>
 , <a class="el" href="Instructions_8h_source.html#l02380">llvm::BranchInst::getCondition()</a>, <a class="el" href="InstrTypes_8h_source.html#l00059">llvm::TerminatorInst::getNumSuccessors()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</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="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="Local_8cpp_source.html#l00268">llvm::isInstructionTriviallyDead()</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="SmallVector_8h_source.html#l00424">llvm::SmallVectorImpl< 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="Value_8cpp_source.html#l00297">llvm::Value::replaceAllUsesWith()</a>, <a class="el" href="SmallVector_8h_source.html#l00126">llvm::SmallVectorTemplateCommon< T >::size()</a>, <a class="el" href="Value_8h_source.html#l00144">llvm::Value::use_empty()</a>, and <a class="el" href="InstCombine_8h_source.html#l00081">llvm::InstCombiner::Worklist</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l02208">llvm::InstCombiner::DoOneIteration()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6435fba4effd1a8feeb1307acc4041ea"></a><!-- doxytag: member="InstructionCombining.cpp::FoldOperationIntoSelectOperand" ref="a6435fba4effd1a8feeb1307acc4041ea" args="(Instruction &I, Value *SO, InstCombiner *IC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classllvm_1_1Value.html">Value</a>* FoldOperationIntoSelectOperand </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> & </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>SO</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> * </td>
+          <td class="paramname"><em>IC</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="InstructionCombining_8cpp_source.html#l00528">528</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="InstCombine_8h_source.html#l00086">llvm::InstCombiner::Builder</a>, <a class="el" href="IRBuilder_8h_source.html#l00765">llvm::IRBuilder< preserveNames, T, Inserter >::CreateBinOp()</a>, <a class="el" href="IRBuilder_8h_source.html#l01085">llvm::IRBuilder< preserveNames, T, Inserter >::CreateCast()</a>, <a class="el" href="IRBuilder_8h_source.html#l01200">llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmp()</a>, <a class="el" href="Constants_8cpp_source.html#l01610">llvm::ConstantExpr::get()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="Instruction_8h_source.html#l00082">llvm::Instruction::getOpcode()</a>, <a class="el" href="User_8h_source.html#l00088">llvm::User::getOperand()</a>, <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, and <a class="el" href="
 OwningPtr_8h_source.html#l00084">llvm::swap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3475a57398d86c1748bdd006dfc0c4f3"></a><!-- doxytag: member="InstructionCombining.cpp::INITIALIZE_PASS_BEGIN" ref="a3475a57398d86c1748bdd006dfc0c4f3" args="(InstCombiner,"instcombine","Combine redundant instructions", false, false) INITIALIZE_PASS_END(InstCombiner" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">INITIALIZE_PASS_BEGIN </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1InstCombiner.html">InstCombiner</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"instcombine" </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Combine redundant <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</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 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">
+
+</div>
+</div>
+<a class="anchor" id="a22f50a59f6de5223d536d8b5fc5cd91c"></a><!-- doxytag: member="InstructionCombining.cpp::isAllocSiteRemovable" ref="a22f50a59f6de5223d536d8b5fc5cd91c" args="(Instruction *AI, SmallVectorImpl< WeakVH > &Users, const TargetLibraryInfo *TLI)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isAllocSiteRemovable </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>AI</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_1WeakVH.html">WeakVH</a> > & </td>
+          <td class="paramname"><em>Users</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1TargetLibraryInfo.html">TargetLibraryInfo</a> * </td>
+          <td class="paramname"><em>TLI</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l01359">1359</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="CallingConvLower_8h_source.html#l00149">llvm::Call</a>, <a class="el" href="SmallVector_8h_source.html#l00055">llvm::SmallVectorBase::empty()</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="Instructions_8h_source.html#l00347">llvm::StoreInst::getPointerOperand()</a>, <a class="el" href="IntrinsicInst_8h_source.html#l00120">llvm::MemIntrinsic::getRawDest()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="InstVisitor_8h_source.html#l00162">llvm::ICmp</a>, <a class="el" href="Instructions_8h_source.html#l00994">llvm::ICmpInst::isEquality()</a>, <a class="el" href="MemoryBuiltins_8cpp_source.html#l00301">llvm::isFreeCall()</a>, <a class="el" href="IntrinsicInst_8h_source.html#l00134">llvm::MemIntrinsic::isVolatile()</a>, <a class="el" href="Instruct
 ions_8h_source.html#l00288">llvm::StoreInst::isVolatile()</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, <a class="el" href="TargetLibraryInfo_8h_source.html#l00218">llvm::LibFunc::memcpy</a>, <a class="el" href="TargetLibraryInfo_8h_source.html#l00220">llvm::LibFunc::memmove</a>, <a class="el" href="TargetLibraryInfo_8h_source.html#l00222">llvm::LibFunc::memset</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00034">llvm::ARMCC::MI</a>, <a class="el" href="SmallVector_8h_source.html#l00424">llvm::SmallVectorImpl< T >::pop_back_val()</a>, <a class="el" href="SmallVector_8h_source.html#l00231">llvm::SmallVectorTemplateBase< T, isPodLike >::push_back()</a>, <a class="el" href="SparcInstrInfo_8h_source.html#l00032">llvm::SPII::Store</a>, <a class="el" href="Value_8h_source.html#l00145">llvm::Value::use_begin()</a>, and <a class="el" href="Value_8h_source.html#l00147">llvm::Value::use_end()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l01436">llvm::InstCombiner::visitAllocSite()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4790342aeb6f773552d018e0bcf410b"></a><!-- doxytag: member="InstructionCombining.cpp::isCatchAll" ref="aa4790342aeb6f773552d018e0bcf410b" args="(Personality_Type Personality, Constant *TypeInfo)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> isCatchAll </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a> </td>
+          <td class="paramname"><em>Personality</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Constant.html">Constant</a> * </td>
+          <td class="paramname"><em>TypeInfo</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>isCatchAll - Return 'true' if the given typeinfo will match anything. </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l01741">1741</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="InstructionCombining_8cpp_source.html#l01721">GNU_Ada_Personality</a>, <a class="el" href="InstructionCombining_8cpp_source.html#l01722">GNU_CXX_Personality</a>, <a class="el" href="InstructionCombining_8cpp_source.html#l01723">GNU_ObjC_Personality</a>, <a class="el" href="Constants_8cpp_source.html#l00054">llvm::Constant::isNullValue()</a>, <a class="el" href="ErrorHandling_8h_source.html#l00098">llvm_unreachable</a>, and <a class="el" href="InstructionCombining_8cpp_source.html#l01720">Unknown_Personality</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l01763">llvm::InstCombiner::visitLandingPadInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa4bb891679df17d0d41dc77417d28f5"></a><!-- doxytag: member="InstructionCombining.cpp::LeftDistributesOverRight" ref="afa4bb891679df17d0d41dc77417d28f5" args="(Instruction::BinaryOps LOp, Instruction::BinaryOps ROp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> LeftDistributesOverRight </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> </td>
+          <td class="paramname"><em>LOp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> </td>
+          <td class="paramname"><em>ROp</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>LeftDistributesOverRight - Whether "X LOp (Y ROp Z)" is always equal to "(X LOp Y) ROp (X LOp Z)". </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00321">321</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8h_source.html#l01759">llvm::APIntOps::And()</a>, <a class="el" href="APInt_8h_source.html#l01765">llvm::APIntOps::Or()</a>, and <a class="el" href="APInt_8h_source.html#l01771">llvm::APIntOps::Xor()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l00360">RightDistributesOverLeft()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad6b4395aa43cd570081d8ef779730d81"></a><!-- doxytag: member="InstructionCombining.cpp::MaintainNoSignedWrap" ref="ad6b4395aa43cd570081d8ef779730d81" args="(BinaryOperator &I, Value *B, Value *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> MaintainNoSignedWrap </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1BinaryOperator.html">BinaryOperator</a> & </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>C</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="InstructionCombining_8cpp_source.html#l00126">126</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.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="InstrTypes_8h_source.html#l00336">llvm::BinaryOperator::getOpcode()</a>, <a class="el" href="Constants_8h_source.html#l00104">llvm::ConstantInt::getValue()</a>, <a class="el" href="Operator_8h_source.html#l00105">llvm::OverflowingBinaryOperator::hasNoSignedWrap()</a>, <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>, <a class="el" href="APInt_8cpp_source.html#l01956">llvm::APInt::sadd_ov()</a>, and <a class="el" href="APInt_8cpp_source.html#l01969">llvm::APInt::ssub_ov()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba1a7ea04978c1d1d7f0dd865b24a213"></a><!-- doxytag: member="InstructionCombining.cpp::RecognizePersonality" ref="aba1a7ea04978c1d1d7f0dd865b24a213" args="(Value *Pers)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="InstructionCombining_8cpp.html#a7b411f919e9298c8e86fae1794c3fcec">Personality_Type</a> RecognizePersonality </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>Pers</em></td><td>)</td>
+          <td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>RecognizePersonality - See if the given exception handling personality function is one that we understand. If so, return a description of it; otherwise return Unknown_Personality. </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l01729">1729</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="StringSwitch_8h_source.html#l00055">llvm::StringSwitch< T, R >::Case()</a>, <a class="el" href="StringSwitch_8h_source.html#l00111">llvm::StringSwitch< T, R >::Default()</a>, <a class="el" href="Casting_8h_source.html#l00233">llvm::dyn_cast()</a>, <a class="el" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F()</a>, <a class="el" href="Value_8cpp_source.html#l00164">llvm::Value::getName()</a>, <a class="el" href="InstructionCombining_8cpp_source.html#l01721">GNU_Ada_Personality</a>, <a class="el" href="InstructionCombining_8cpp_source.html#l01722">GNU_CXX_Personality</a>, <a class="el" href="InstructionCombining_8cpp_source.html#l01723">GNU_ObjC_Personality</a>, <a class="el" href="Value_8cpp_source.html#l00376">llvm::Value::stripPointerCasts()</a>, and <a class="el" href="InstructionCombining_8cpp_source.html#l01720">Unknown_Personality</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l01763">llvm::InstCombiner::visitLandingPadInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaeaff568610aa9560be815db546329dc"></a><!-- doxytag: member="InstructionCombining.cpp::RightDistributesOverLeft" ref="aaeaff568610aa9560be815db546329dc" args="(Instruction::BinaryOps LOp, Instruction::BinaryOps ROp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> RightDistributesOverLeft </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> </td>
+          <td class="paramname"><em>LOp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html#ac26154a24f393f523c87cc5f8239f36c">Instruction::BinaryOps</a> </td>
+          <td class="paramname"><em>ROp</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>RightDistributesOverLeft - Whether "(X LOp Y) ROp Z" is always equal to "(X ROp Z) LOp (Y ROp Z)". </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00360">360</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="Instruction_8h_source.html#l00215">llvm::Instruction::isCommutative()</a>, and <a class="el" href="InstructionCombining_8cpp_source.html#l00321">LeftDistributesOverRight()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13d41ea63582902162e0efd8a78a5ad5"></a><!-- doxytag: member="InstructionCombining.cpp::shorter_filter" ref="a13d41ea63582902162e0efd8a78a5ad5" args="(const Value *LHS, const Value *RHS)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> shorter_filter </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>LHS</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classllvm_1_1Value.html">Value</a> * </td>
+          <td class="paramname"><em>RHS</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="InstructionCombining_8cpp_source.html#l01756">1756</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="Value_8h_source.html#l00106">llvm::Value::getType()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l01763">llvm::InstCombiner::visitLandingPadInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a27dc41c474e5376ef7d1865735cfb3dd"></a><!-- doxytag: member="InstructionCombining.cpp::shouldMergeGEPs" ref="a27dc41c474e5376ef7d1865735cfb3dd" args="(GEPOperator &GEP, GEPOperator &Src)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> shouldMergeGEPs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1GEPOperator.html">GEPOperator</a> & </td>
+          <td class="paramname"><em>GEP</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1GEPOperator.html">GEPOperator</a> & </td>
+          <td class="paramname"><em>Src</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="InstructionCombining_8cpp_source.html#l00798">798</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="Operator_8h_source.html#l00290">llvm::GEPOperator::hasAllZeroIndices()</a>, and <a class="el" href="Value_8h_source.html#l00156">llvm::Value::hasOneUse()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l01046">llvm::InstCombiner::visitGetElementPtrInst()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cb157e7251482c582e36d8c63893ae1"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a0cb157e7251482c582e36d8c63893ae1" args="(NumCombined,"Number of insts combined")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumCombined </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of insts combined" </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="accf487e45a5c966eb1c593fdb95e85fc"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="accf487e45a5c966eb1c593fdb95e85fc" args="(NumConstProp,"Number of constant folds")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumConstProp </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of constant folds" </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="a8e510c6c6881628f8a86783d134c9435"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a8e510c6c6881628f8a86783d134c9435" args="(NumDeadInst,"Number of dead inst eliminated")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumDeadInst </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of dead inst eliminated" </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="a412162b08b10d3d9fee53d142cabdd5d"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a412162b08b10d3d9fee53d142cabdd5d" args="(NumSunkInst,"Number of instructions sunk")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumSunkInst </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a> sunk" </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="a9311e2e4f77e6e0d678e9f9873b72736"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a9311e2e4f77e6e0d678e9f9873b72736" args="(NumExpand,"Number of expansions")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumExpand </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of expansions" </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="a3ec71a5d54020c62d4c7ae3711195e9c"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a3ec71a5d54020c62d4c7ae3711195e9c" args="(NumFactor,"Number of factorizations")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumFactor </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of factorizations" </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="a44567246f382fe3974c9d5056b172b91"></a><!-- doxytag: member="InstructionCombining.cpp::STATISTIC" ref="a44567246f382fe3974c9d5056b172b91" args="(NumReassoc,"Number of reassociations")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumReassoc </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of reassociations" </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="a1ea2b997ffc11a09339f80ef8287c8d5"></a><!-- doxytag: member="InstructionCombining.cpp::TryToSinkInstruction" ref="a1ea2b997ffc11a09339f80ef8287c8d5" args="(Instruction *I, BasicBlock *DestBlock)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> TryToSinkInstruction </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1Instruction.html">Instruction</a> * </td>
+          <td class="paramname"><em>I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classllvm_1_1BasicBlock.html">BasicBlock</a> * </td>
+          <td class="paramname"><em>DestBlock</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>TryToSinkInstruction - Try to move the specified instruction from its current block into the beginning of DestBlock, which can only happen if it's safe to move the instruction past all of the instructions between it and the end of its block. </p>
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l02065">2065</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+<p>References <a class="el" href="BasicBlock_8h_source.html#l00191">llvm::BasicBlock::end()</a>, <a class="el" href="Function_8h_source.html#l00335">llvm::Function::getEntryBlock()</a>, <a class="el" href="BasicBlock_8cpp_source.html#l00170">llvm::BasicBlock::getFirstInsertionPt()</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="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="Instruction_8h_source.html#l00264">llvm::Instruction::mayHaveSideEffects()</a>, <a class="el" href="Instruction_8cpp_source.html#l00330">llvm::Instruction::mayReadFromMemory()</a>, and <a class="el" href="Instruction_8cpp_source.html#l00090">llvm::Instruction::moveBefore()</a>.</p>
+
+<p>Referenced by <a class="el" href="InstructionCombining_8cpp_source.html#l02208">llvm::InstCombiner::DoOneIteration()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ac735dc0034fb289533e5dc1a10a6c9ce"></a><!-- doxytag: member="InstructionCombining.cpp::false" ref="ac735dc0034fb289533e5dc1a10a6c9ce" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Combine redundant <a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00081">81</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d4d7e39548303ef4c1f5a0ed13a9c23"></a><!-- doxytag: member="InstructionCombining.cpp::instcombine" ref="a7d4d7e39548303ef4c1f5a0ed13a9c23" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="InstructionCombining_8cpp.html#a7d4d7e39548303ef4c1f5a0ed13a9c23">instcombine</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00081">81</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9360db2a972441c49cdbbabb5b20cc27"></a><!-- doxytag: member="InstructionCombining.cpp::instructions" ref="a9360db2a972441c49cdbbabb5b20cc27" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Combine redundant <a class="el" href="SimplifyInstructions_8cpp.html#afbf38da490ab8cea559fee0c9081db06">instructions</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="InstructionCombining_8cpp_source.html#l00081">81</a> of file <a class="el" href="InstructionCombining_8cpp_source.html">InstructionCombining.cpp</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InstructionCombining_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstructionCombining_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InstructionCombining_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InstructionSimplify_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,274 @@
+<!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: InstructionSimplify.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_a884da034f1b4859d4f2a35ae0ac2045.html">Analysis</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InstructionSimplify.h</div>  </div>
+</div>
+<div class="contents">
+<a href="InstructionSimplify_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- InstructionSimplify.h - Fold instructions into simpler forms ------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file declares routines for folding instructions into simpler forms</span>
+<a name="l00011"></a>00011 <span class="comment">// that do not require creating new instructions.  This does constant folding</span>
+<a name="l00012"></a>00012 <span class="comment">// ("add i32 1, 1" -> "2") but can also handle non-constant operands, either</span>
+<a name="l00013"></a>00013 <span class="comment">// returning a constant ("and i32 %x, 0" -> "0") or an already existing value</span>
+<a name="l00014"></a>00014 <span class="comment">// ("and i32 %x, %x" -> "%x").  If the simplification is also an instruction</span>
+<a name="l00015"></a>00015 <span class="comment">// then it dominates the original instruction.</span>
+<a name="l00016"></a>00016 <span class="comment">//</span>
+<a name="l00017"></a>00017 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00018"></a>00018 
+<a name="l00019"></a>00019 <span class="preprocessor">#ifndef LLVM_ANALYSIS_INSTRUCTIONSIMPLIFY_H</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_ANALYSIS_INSTRUCTIONSIMPLIFY_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span>
+<a name="l00022"></a>00022 <span class="keyword">namespace </span>llvm {
+<a name="l00023"></a>00023   <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00024"></a>00024   <span class="keyword">class </span>ArrayRef;
+<a name="l00025"></a>00025   <span class="keyword">class </span>DominatorTree;
+<a name="l00026"></a>00026   <span class="keyword">class </span>Instruction;
+<a name="l00027"></a>00027   <span class="keyword">class </span>DataLayout;
+<a name="l00028"></a>00028   <span class="keyword">class </span>TargetLibraryInfo;
+<a name="l00029"></a>00029   <span class="keyword">class </span><a class="code" href="namespacellvm_1_1HexagonII.html#a9bebdf970b4f51041ed3dee5d558a807">Type</a>;
+<a name="l00030"></a>00030   <span class="keyword">class </span>Value;
+<a name="l00031"></a>00031 <span class="comment"></span>
+<a name="l00032"></a>00032 <span class="comment">  /// SimplifyAddInst - Given operands for an Add, see if we can</span>
+<a name="l00033"></a>00033 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00034"></a>00034 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a3466991e08873b107383c9d32fe581d2">SimplifyAddInst</a>(Value *LHS, Value *RHS, <span class="keywordtype">bool</span> isNSW, <span class="keywordtype">bool</span> isNUW,
+<a name="l00035"></a>00035                          <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00036"></a>00036                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00037"></a>00037                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00038"></a>00038 <span class="comment"></span>
+<a name="l00039"></a>00039 <span class="comment">  /// SimplifySubInst - Given operands for a Sub, see if we can</span>
+<a name="l00040"></a>00040 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00041"></a>00041 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a238dbee2124dc0bd7d658ad63fbad616">SimplifySubInst</a>(Value *LHS, Value *RHS, <span class="keywordtype">bool</span> isNSW, <span class="keywordtype">bool</span> isNUW,
+<a name="l00042"></a>00042                          <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00043"></a>00043                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00044"></a>00044                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00045"></a>00045 <span class="comment"></span>
+<a name="l00046"></a>00046 <span class="comment">  /// SimplifyMulInst - Given operands for a Mul, see if we can</span>
+<a name="l00047"></a>00047 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00048"></a>00048 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a16e6b2e2a8b7efd5ce9a39f39f045502">SimplifyMulInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00049"></a>00049                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00050"></a>00050                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00051"></a>00051 <span class="comment"></span>
+<a name="l00052"></a>00052 <span class="comment">  /// SimplifySDivInst - Given operands for an SDiv, see if we can</span>
+<a name="l00053"></a>00053 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00054"></a>00054 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a4da5b3524ef6e4182893b97b5d8aadad">SimplifySDivInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00055"></a>00055                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00056"></a>00056                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00057"></a>00057 <span class="comment"></span>
+<a name="l00058"></a>00058 <span class="comment">  /// SimplifyUDivInst - Given operands for a UDiv, see if we can</span>
+<a name="l00059"></a>00059 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00060"></a>00060 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ad7ee9212902791ff198d39227fb73f9e">SimplifyUDivInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00061"></a>00061                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00062"></a>00062                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00063"></a>00063 <span class="comment"></span>
+<a name="l00064"></a>00064 <span class="comment">  /// SimplifyFDivInst - Given operands for an FDiv, see if we can</span>
+<a name="l00065"></a>00065 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00066"></a>00066 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a1077d93bf3babca286b7a389f78e70cb">SimplifyFDivInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00067"></a>00067                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00068"></a>00068                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00069"></a>00069 <span class="comment"></span>
+<a name="l00070"></a>00070 <span class="comment">  /// SimplifySRemInst - Given operands for an SRem, see if we can</span>
+<a name="l00071"></a>00071 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00072"></a>00072 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ac5f8ec2a1bbffc4a64095b4745be2804">SimplifySRemInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00073"></a>00073                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00074"></a>00074                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00075"></a>00075 <span class="comment"></span>
+<a name="l00076"></a>00076 <span class="comment">  /// SimplifyURemInst - Given operands for a URem, see if we can</span>
+<a name="l00077"></a>00077 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00078"></a>00078 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#acf46bab8eca4c3c7204079f2cf80ab35">SimplifyURemInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00079"></a>00079                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00080"></a>00080                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00081"></a>00081 <span class="comment"></span>
+<a name="l00082"></a>00082 <span class="comment">  /// SimplifyFRemInst - Given operands for an FRem, see if we can</span>
+<a name="l00083"></a>00083 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00084"></a>00084 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a973f98a5bc51515b4348eb9207dd2e8a">SimplifyFRemInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00085"></a>00085                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00086"></a>00086                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00087"></a>00087 <span class="comment"></span>
+<a name="l00088"></a>00088 <span class="comment">  /// SimplifyShlInst - Given operands for a Shl, see if we can</span>
+<a name="l00089"></a>00089 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00090"></a>00090 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a2ec75001a2ff23312dba513b2f2bd044">SimplifyShlInst</a>(Value *Op0, Value *Op1, <span class="keywordtype">bool</span> isNSW, <span class="keywordtype">bool</span> isNUW,
+<a name="l00091"></a>00091                          <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00092"></a>00092                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00093"></a>00093                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00094"></a>00094 <span class="comment"></span>
+<a name="l00095"></a>00095 <span class="comment">  /// SimplifyLShrInst - Given operands for a LShr, see if we can</span>
+<a name="l00096"></a>00096 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00097"></a>00097 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a5f77cf32ac3d55776431dade50fc2b46">SimplifyLShrInst</a>(Value *Op0, Value *Op1, <span class="keywordtype">bool</span> isExact,
+<a name="l00098"></a>00098                           <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00099"></a>00099                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00100"></a>00100                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00101"></a>00101 <span class="comment"></span>
+<a name="l00102"></a>00102 <span class="comment">  /// SimplifyAShrInst - Given operands for a AShr, see if we can</span>
+<a name="l00103"></a>00103 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00104"></a>00104 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a0547bdf9e4fb916625839c190ef09266">SimplifyAShrInst</a>(Value *Op0, Value *Op1, <span class="keywordtype">bool</span> isExact,
+<a name="l00105"></a>00105                           <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00106"></a>00106                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00107"></a>00107                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00108"></a>00108 <span class="comment"></span>
+<a name="l00109"></a>00109 <span class="comment">  /// SimplifyAndInst - Given operands for an And, see if we can</span>
+<a name="l00110"></a>00110 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00111"></a>00111 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ac53bb620387e76f170ba633e4e6d813a">SimplifyAndInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00112"></a>00112                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00113"></a>00113                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00114"></a>00114 <span class="comment"></span>
+<a name="l00115"></a>00115 <span class="comment">  /// SimplifyOrInst - Given operands for an Or, see if we can</span>
+<a name="l00116"></a>00116 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00117"></a>00117 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a35e45224cbdc6cd5bf6a988db6b61e82">SimplifyOrInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00118"></a>00118                         <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00119"></a>00119                         <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00120"></a>00120 <span class="comment"></span>
+<a name="l00121"></a>00121 <span class="comment">  /// SimplifyXorInst - Given operands for a Xor, see if we can</span>
+<a name="l00122"></a>00122 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00123"></a>00123 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ae1b36d4d04580bacd19ea0c6f039d222">SimplifyXorInst</a>(Value *LHS, Value *RHS, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00124"></a>00124                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00125"></a>00125                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00126"></a>00126 <span class="comment"></span>
+<a name="l00127"></a>00127 <span class="comment">  /// SimplifyICmpInst - Given operands for an ICmpInst, see if we can</span>
+<a name="l00128"></a>00128 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00129"></a>00129 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a06316e4ad9eb44b69c40619212d5132d">SimplifyICmpInst</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classPredicate.html">Predicate</a>, Value *LHS, Value *RHS,
+<a name="l00130"></a>00130                           <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00131"></a>00131                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00132"></a>00132                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00133"></a>00133 <span class="comment"></span>
+<a name="l00134"></a>00134 <span class="comment">  /// SimplifyFCmpInst - Given operands for an FCmpInst, see if we can</span>
+<a name="l00135"></a>00135 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00136"></a>00136 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ad2b02aaa059147fe5a834a84b7d74374">SimplifyFCmpInst</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classPredicate.html">Predicate</a>, Value *LHS, Value *RHS,
+<a name="l00137"></a>00137                           <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00138"></a>00138                           <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00139"></a>00139                           <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00140"></a>00140 <span class="comment"></span>
+<a name="l00141"></a>00141 <span class="comment">  /// SimplifySelectInst - Given operands for a SelectInst, see if we can fold</span>
+<a name="l00142"></a>00142 <span class="comment">  /// the result.  If not, this returns null.</span>
+<a name="l00143"></a>00143 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#ab5ee1b3d80978be1bf429bb2f15d4954">SimplifySelectInst</a>(Value *Cond, Value *TrueVal, Value *FalseVal,
+<a name="l00144"></a>00144                             <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00145"></a>00145                             <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00146"></a>00146                             <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00147"></a>00147 <span class="comment"></span>
+<a name="l00148"></a>00148 <span class="comment">  /// SimplifyGEPInst - Given operands for an GetElementPtrInst, see if we can</span>
+<a name="l00149"></a>00149 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00150"></a>00150 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a7fba1a9b7761f82c4e9da63290d71af5">SimplifyGEPInst</a>(ArrayRef<Value *> Ops, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00151"></a>00151                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00152"></a>00152                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00153"></a>00153 <span class="comment"></span>
+<a name="l00154"></a>00154 <span class="comment">  /// SimplifyInsertValueInst - Given operands for an InsertValueInst, see if we</span>
+<a name="l00155"></a>00155 <span class="comment">  /// can fold the result.  If not, this returns null.</span>
+<a name="l00156"></a>00156 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a48d32fc3193ea5fa46bc005179beeab1">SimplifyInsertValueInst</a>(Value *Agg, Value *Val,
+<a name="l00157"></a>00157                                  ArrayRef<unsigned> Idxs,
+<a name="l00158"></a>00158                                  <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00159"></a>00159                                  <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00160"></a>00160                                  <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00161"></a>00161 <span class="comment"></span>
+<a name="l00162"></a>00162 <span class="comment">  /// SimplifyTruncInst - Given operands for an TruncInst, see if we can fold</span>
+<a name="l00163"></a>00163 <span class="comment">  /// the result.  If not, this returns null.</span>
+<a name="l00164"></a>00164 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a520763107fcd73bc701d36cf8eff4330">SimplifyTruncInst</a>(Value *Op, <a class="code" href="namespacellvm_1_1HexagonII.html#a9bebdf970b4f51041ed3dee5d558a807">Type</a> *Ty, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00165"></a>00165                            <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00166"></a>00166                            <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168   <span class="comment">//=== Helper functions for higher up the class hierarchy.</span>
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="comment"></span>
+<a name="l00171"></a>00171 <span class="comment">  /// SimplifyCmpInst - Given operands for a CmpInst, see if we can</span>
+<a name="l00172"></a>00172 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00173"></a>00173 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a842dbe70b763270b02de0473c3cc890d">SimplifyCmpInst</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classPredicate.html">Predicate</a>, Value *LHS, Value *RHS,
+<a name="l00174"></a>00174                          <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00175"></a>00175                          <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00176"></a>00176                          <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00177"></a>00177 <span class="comment"></span>
+<a name="l00178"></a>00178 <span class="comment">  /// SimplifyBinOp - Given operands for a BinaryOperator, see if we can</span>
+<a name="l00179"></a>00179 <span class="comment">  /// fold the result.  If not, this returns null.</span>
+<a name="l00180"></a>00180 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a9a0b7acac205af164daef4017f9d193d">SimplifyBinOp</a>(<span class="keywordtype">unsigned</span> Opcode, Value *LHS, Value *RHS,
+<a name="l00181"></a>00181                        <span class="keyword">const</span> DataLayout *TD = 0, 
+<a name="l00182"></a>00182                        <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00183"></a>00183                        <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00184"></a>00184 <span class="comment"></span>
+<a name="l00185"></a>00185 <span class="comment">  /// SimplifyInstruction - See if we can compute a simplified version of this</span>
+<a name="l00186"></a>00186 <span class="comment">  /// instruction.  If not, this returns null.</span>
+<a name="l00187"></a>00187 <span class="comment"></span>  Value *<a class="code" href="namespacellvm.html#a50f8f41fccbea466816345520e9bfabb">SimplifyInstruction</a>(Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>, <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00188"></a>00188                              <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00189"></a>00189                              <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191 <span class="comment"></span>
+<a name="l00192"></a>00192 <span class="comment">  /// \brief Replace all uses of 'I' with 'SimpleV' and simplify the uses</span>
+<a name="l00193"></a>00193 <span class="comment">  /// recursively.</span>
+<a name="l00194"></a>00194 <span class="comment">  ///</span>
+<a name="l00195"></a>00195 <span class="comment">  /// This first performs a normal RAUW of I with SimpleV. It then recursively</span>
+<a name="l00196"></a>00196 <span class="comment">  /// attempts to simplify those users updated by the operation. The 'I'</span>
+<a name="l00197"></a>00197 <span class="comment">  /// instruction must not be equal to the simplified value 'SimpleV'.</span>
+<a name="l00198"></a>00198 <span class="comment">  ///</span>
+<a name="l00199"></a>00199 <span class="comment">  /// The function returns true if any simplifications were performed.</span>
+<a name="l00200"></a>00200 <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#a75689d3e1098e4a4e5f915c89c6db541" title="Replace all uses of 'I' with 'SimpleV' and simplify the uses recursively.">replaceAndRecursivelySimplify</a>(Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>, Value *SimpleV,
+<a name="l00201"></a>00201                                      <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00202"></a>00202                                      <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00203"></a>00203                                      <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00204"></a>00204 <span class="comment"></span>
+<a name="l00205"></a>00205 <span class="comment">  /// \brief Recursively attempt to simplify an instruction.</span>
+<a name="l00206"></a>00206 <span class="comment">  ///</span>
+<a name="l00207"></a>00207 <span class="comment">  /// This routine uses SimplifyInstruction to simplify 'I', and if successful</span>
+<a name="l00208"></a>00208 <span class="comment">  /// replaces uses of 'I' with the simplified value. It then recurses on each</span>
+<a name="l00209"></a>00209 <span class="comment">  /// of the users impacted. It returns true if any simplifications were</span>
+<a name="l00210"></a>00210 <span class="comment">  /// performed.</span>
+<a name="l00211"></a>00211 <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#aa52d9a03afda2daa106d41ff5db565f7" title="Recursively attempt to simplify an instruction.">recursivelySimplifyInstruction</a>(Instruction *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>,
+<a name="l00212"></a>00212                                       <span class="keyword">const</span> DataLayout *TD = 0,
+<a name="l00213"></a>00213                                       <span class="keyword">const</span> TargetLibraryInfo *TLI = 0,
+<a name="l00214"></a>00214                                       <span class="keyword">const</span> DominatorTree *DT = 0);
+<a name="l00215"></a>00215 } <span class="comment">// end namespace llvm</span>
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 <span class="preprocessor">#endif</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34:54 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/Instruction_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Instruction_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/Instruction_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/Instrumentation_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Instrumentation_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Instrumentation_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Instrumentation_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,72 @@
+<!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: Instrumentation.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_a27da379c0207135ed34ab2f42b9226e.html">Instrumentation</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Instrumentation.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="InitializePasses_8h_source.html">llvm/InitializePasses.h</a>"</code><br/>
+<code>#include "<a class="el" href="Initialization_8h_source.html">llvm-c/Initialization.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for Instrumentation.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="Instrumentation_8cpp__incl.png" border="0" usemap="#Instrumentation_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="Instrumentation_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="group__LLVMCInitialization.html#ga0e012e2e794306e66e35974f4da22607">LLVMInitializeInstrumentation</a> (<a class="el" href="group__LLVMCCoreTypes.html#gab1ca1ff855478bc0f33874a1182e4b94">LLVMPassRegistryRef</a> R)</td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/IntEqClasses_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,8 @@
+<map id="G" name="G">
+<area shape="rect" href="$IntEqClasses_8h.html" title="llvm/ADT/IntEqClasses.h" alt="" coords="544,84,717,111"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="547,161,715,188"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="92,239,255,265"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="5,316,179,343"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="329,239,516,265"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="331,316,515,343"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: IntEqClasses.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">IntEqClasses.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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for IntEqClasses.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="IntEqClasses_8h__incl.png" border="0" usemap="#IntEqClasses_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="IntEqClasses_8h__dep__incl.png" border="0" usemap="#IntEqClasses_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="IntEqClasses_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_1IntEqClasses.html">llvm::IntEqClasses</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:30 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/IntEqClasses_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntEqClasses_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h__dep__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h__dep__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h__dep__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h__dep__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,3 @@
+<map id="G" name="G">
+<area shape="rect" href="$IntegerDivision_8cpp.html" title="IntegerDivision.cpp" alt="" coords="5,84,147,111"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntegerDivision_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,105 @@
+<!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: IntegerDivision.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">IntegerDivision.h</div>  </div>
+</div>
+<div class="contents">
+<a href="IntegerDivision_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/IntegerDivision.h ------------------*- 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 an implementation of 32bit integer division for targets</span>
+<a name="l00011"></a>00011 <span class="comment">// that don't have native support. It's largely derived from compiler-rt's</span>
+<a name="l00012"></a>00012 <span class="comment">// implementation of __udivsi3, but hand-tuned for targets that prefer less</span>
+<a name="l00013"></a>00013 <span class="comment">// control flow.</span>
+<a name="l00014"></a>00014 <span class="comment">//</span>
+<a name="l00015"></a>00015 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00016"></a>00016 
+<a name="l00017"></a>00017 <span class="preprocessor">#ifndef TRANSFORMS_UTILS_INTEGERDIVISION_H</span>
+<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define TRANSFORMS_UTILS_INTEGERDIVISION_H</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span>
+<a name="l00020"></a>00020 <span class="keyword">namespace </span>llvm {
+<a name="l00021"></a>00021   <span class="keyword">class </span>BinaryOperator;
+<a name="l00022"></a>00022 }
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="keyword">namespace </span>llvm {
+<a name="l00025"></a>00025 <span class="comment"></span>
+<a name="l00026"></a>00026 <span class="comment">  /// Generate code to calculate the remainder of two integers, replacing Rem</span>
+<a name="l00027"></a>00027 <span class="comment">  /// with the generated code. This currently generates code using the udiv</span>
+<a name="l00028"></a>00028 <span class="comment">  /// expansion, but future work includes generating more specialized code,</span>
+<a name="l00029"></a>00029 <span class="comment">  /// e.g. when more information about the operands are known. Currently only</span>
+<a name="l00030"></a>00030 <span class="comment">  /// implements 32bit scalar division (due to udiv's limitation), but future</span>
+<a name="l00031"></a>00031 <span class="comment">  /// work is removing this limitation.</span>
+<a name="l00032"></a>00032 <span class="comment">  ///</span>
+<a name="l00033"></a>00033 <span class="comment">  /// @brief Replace Rem with generated code.</span>
+<a name="l00034"></a>00034 <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#ad0154d60f04a5d8549b44635852557f0" title="Replace Rem with generated code.">expandRemainder</a>(BinaryOperator *Rem);
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">  /// Generate code to divide two integers, replacing Div with the generated</span>
+<a name="l00037"></a>00037 <span class="comment">  /// code. This currently generates code similarly to compiler-rt's</span>
+<a name="l00038"></a>00038 <span class="comment">  /// implementations, but future work includes generating more specialized code</span>
+<a name="l00039"></a>00039 <span class="comment">  /// when more information about the operands are known. Currently only</span>
+<a name="l00040"></a>00040 <span class="comment">  /// implements 32bit scalar division, but future work is removing this</span>
+<a name="l00041"></a>00041 <span class="comment">  /// limitation.</span>
+<a name="l00042"></a>00042 <span class="comment">  ///</span>
+<a name="l00043"></a>00043 <span class="comment">  /// @brief Replace Div with generated code.</span>
+<a name="l00044"></a>00044 <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="namespacellvm.html#a08d3e8ce57fb65481a42b256d26c264d" title="Replace Div with generated code.">expandDivision</a>(BinaryOperator* Div);
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 } <span class="comment">// End llvm namespace</span>
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34:54 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/IntegersSubsetMapping_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h.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: IntegersSubsetMapping.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="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">IntegersSubsetMapping.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="IntegersSubset_8h_source.html">llvm/Support/IntegersSubset.h</a>"</code><br/>
+<code>#include <list></code><br/>
+<code>#include <map></code><br/>
+<code>#include <vector></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for IntegersSubsetMapping.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="IntegersSubsetMapping_8h__incl.png" border="0" usemap="#IntegersSubsetMapping_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="IntegersSubsetMapping_8h__dep__incl.png" border="0" usemap="#IntegersSubsetMapping_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="IntegersSubsetMapping_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_1IntegersSubsetMapping.html">llvm::IntegersSubsetMapping< SuccessorClass, IntegersSubsetTy, IntTy ></a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1IntegersSubsetMapping_1_1RangeEx.html">llvm::IntegersSubsetMapping< SuccessorClass, IntegersSubsetTy, IntTy >::RangeEx</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1IntegersSubsetMapping_1_1ClustersCmp.html">llvm::IntegersSubsetMapping< SuccessorClass, IntegersSubsetTy, IntTy >::ClustersCmp</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1IntegersSubsetMapping_1_1DiffStateMachine.html">llvm::IntegersSubsetMapping< SuccessorClass, IntegersSubsetTy, IntTy >::DiffStateMachine</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 IntegersSubsetMapping<br class="typebreak"/>
+< BasicBlock > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#ac7c6efdcf739c48a3ace9ddd3050d32b">llvm::IntegersSubsetToBB</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>IntegersSubsetMapping is mapping from A to B, where Items in A is subsets of integers, Items in B some pointers (Successors). If user which to add another subset for successor that is already exists in mapping, IntegersSubsetMapping merges existing subset with added one. </p>
+
+<p>Definition in file <a class="el" href="IntegersSubsetMapping_8h_source.html">IntegersSubsetMapping.h</a>.</p>
+</div></div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/IntegersSubsetMapping_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntegersSubsetMapping_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,135 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="IntegersSubsetMapping.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="Instructions.h",height=0.2,width=0.4,color="red",URL="$Instructions_8h.html"];
+  Node2 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="CallSite.h",height=0.2,width=0.4,color="red",URL="$CallSite_8h.html"];
+  Node3 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="CaptureTracking.h",height=0.2,width=0.4,color="red",URL="$CaptureTracking_8h.html"];
+  Node4 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="AliasAnalysis.cpp",height=0.2,width=0.4,color="black",URL="$AliasAnalysis_8cpp.html"];
+  Node4 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="BasicAliasAnalysis.cpp",height=0.2,width=0.4,color="black",URL="$BasicAliasAnalysis_8cpp.html"];
+  Node3 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="InstVisitor.h",height=0.2,width=0.4,color="red",URL="$InstVisitor_8h.html"];
+  Node3 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="Analysis.h",height=0.2,width=0.4,color="red",URL="$CodeGen_2Analysis_8h.html"];
+  Node8 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="Analysis.cpp",height=0.2,width=0.4,color="black",URL="$CodeGen_2Analysis_8cpp.html"];
+  Node8 -> 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"];
+  Node3 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="FunctionLoweringInfo.h",height=0.2,width=0.4,color="red",URL="$FunctionLoweringInfo_8h.html"];
+  Node11 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="CallGraph.cpp",height=0.2,width=0.4,color="black",URL="$CallGraph_8cpp.html"];
+  Node3 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="ProfileVerifierPass.cpp",height=0.2,width=0.4,color="black",URL="$ProfileVerifierPass_8cpp.html"];
+  Node3 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="DwarfEHPrepare.cpp",height=0.2,width=0.4,color="black",URL="$DwarfEHPrepare_8cpp.html"];
+  Node2 -> Node4 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node15 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="CFGPrinter.h",height=0.2,width=0.4,color="red",URL="$CFGPrinter_8h.html"];
+  Node2 -> Node16 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="DependenceAnalysis.h",height=0.2,width=0.4,color="red",URL="$DependenceAnalysis_8h.html"];
+  Node2 -> Node17 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="IRBuilder.h",height=0.2,width=0.4,color="red",URL="$IRBuilder_8h.html"];
+  Node2 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node18 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="IntrinsicInst.h",height=0.2,width=0.4,color="red",URL="$IntrinsicInst_8h.html"];
+  Node18 -> Node7 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node19 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="LinkAllVMCore.h",height=0.2,width=0.4,color="black",URL="$LinkAllVMCore_8h.html"];
+  Node18 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node20 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="AliasSetTracker.cpp",height=0.2,width=0.4,color="black",URL="$AliasSetTracker_8cpp.html"];
+  Node18 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node21 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="GlobalsModRef.cpp",height=0.2,width=0.4,color="black",URL="$GlobalsModRef_8cpp.html"];
+  Node18 -> Node22 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="LazyValueInfo.cpp",height=0.2,width=0.4,color="black",URL="$LazyValueInfo_8cpp.html"];
+  Node18 -> Node23 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="MemoryDependenceAnalysis.cpp",height=0.2,width=0.4,color="black",URL="$MemoryDependenceAnalysis_8cpp.html"];
+  Node18 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="ValueTracking.cpp",height=0.2,width=0.4,color="black",URL="$ValueTracking_8cpp.html"];
+  Node18 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node25 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="PathNumbering.h",height=0.2,width=0.4,color="red",URL="$PathNumbering_8h.html"];
+  Node25 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="PathNumbering.cpp",height=0.2,width=0.4,color="black",URL="$PathNumbering_8cpp.html"];
+  Node2 -> Node27 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="ScalarEvolution.h",height=0.2,width=0.4,color="red",URL="$ScalarEvolution_8h.html"];
+  Node2 -> Node8 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node11 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="SelectionDAGNodes.h",height=0.2,width=0.4,color="red",URL="$SelectionDAGNodes_8h.html"];
+  Node2 -> Node19 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node29 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="NoFolder.h",height=0.2,width=0.4,color="red",URL="$NoFolder_8h.html"];
+  Node2 -> Node30 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="PatternMatch.h",height=0.2,width=0.4,color="red",URL="$PatternMatch_8h.html"];
+  Node30 -> Node22 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node5 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node31 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="AliasAnalysisEvaluator.cpp",height=0.2,width=0.4,color="black",URL="$AliasAnalysisEvaluator_8cpp.html"];
+  Node2 -> Node32 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="AliasDebugger.cpp",height=0.2,width=0.4,color="black",URL="$AliasDebugger_8cpp.html"];
+  Node2 -> Node20 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node6 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node33 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="BranchProbabilityInfo.cpp",height=0.2,width=0.4,color="black",URL="$BranchProbabilityInfo_8cpp.html"];
+  Node2 -> Node34 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="ConstantFolding.cpp",height=0.2,width=0.4,color="black",URL="$ConstantFolding_8cpp.html"];
+  Node2 -> Node35 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="CostModel.cpp",height=0.2,width=0.4,color="black",URL="$CostModel_8cpp.html"];
+  Node2 -> Node12 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node21 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node36 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="IVUsers.cpp",height=0.2,width=0.4,color="black",URL="$IVUsers_8cpp.html"];
+  Node2 -> Node22 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node37 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="LoopInfo.cpp",height=0.2,width=0.4,color="black",URL="$LoopInfo_8cpp.html"];
+  Node2 -> Node38 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="MemoryBuiltins.cpp",height=0.2,width=0.4,color="black",URL="$MemoryBuiltins_8cpp.html"];
+  Node2 -> Node23 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node39 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="PHITransAddr.cpp",height=0.2,width=0.4,color="black",URL="$PHITransAddr_8cpp.html"];
+  Node2 -> Node40 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="PostDominators.cpp",height=0.2,width=0.4,color="black",URL="$PostDominators_8cpp.html"];
+  Node2 -> Node13 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node41 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="ScalarEvolution.cpp",height=0.2,width=0.4,color="black",URL="$ScalarEvolution_8cpp.html"];
+  Node2 -> Node42 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="SparsePropagation.cpp",height=0.2,width=0.4,color="black",URL="$SparsePropagation_8cpp.html"];
+  Node2 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node43 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="LLParser.h",height=0.2,width=0.4,color="red",URL="$LLParser_8h.html"];
+  Node43 -> Node44 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="LLParser.cpp",height=0.2,width=0.4,color="black",URL="$LLParser_8cpp.html"];
+  Node2 -> Node44 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node45 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="BitcodeWriter.cpp",height=0.2,width=0.4,color="black",URL="$BitcodeWriter_8cpp.html"];
+  Node2 -> Node46 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="ValueEnumerator.cpp",height=0.2,width=0.4,color="black",URL="$ValueEnumerator_8cpp.html"];
+  Node2 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node47 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="DwarfCompileUnit.cpp",height=0.2,width=0.4,color="black",URL="$DwarfCompileUnit_8cpp.html"];
+  Node2 -> Node48 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="DwarfDebug.cpp",height=0.2,width=0.4,color="black",URL="$DwarfDebug_8cpp.html"];
+  Node2 -> Node14 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node49 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="LocalStackSlotAllocation.cpp",height=0.2,width=0.4,color="black",URL="$LocalStackSlotAllocation_8cpp.html"];
+  Node2 -> Node50 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="MachineBranchProbabilityInfo.cpp",height=0.2,width=0.4,color="black",URL="$MachineBranchProbabilityInfo_8cpp.html"];
+  Node2 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/IntegersSubset_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntegersSubset_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntegersSubset_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,41 @@
+<map id="G" name="G">
+<area shape="rect" href="$config_8h.html" title="llvm/Config/config.h" alt="" coords="5,316,149,343"/>
+<area shape="rect" href="$JITEventListener_8h.html" title="llvm/ExecutionEngine/JITEventListener.h" alt="" coords="179,239,451,265"/>
+<area shape="rect" href="$DebugInfo_8h.html" title="llvm/DebugInfo.h" alt="" coords="1456,316,1584,343"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="2557,84,2672,111"/>
+<area shape="rect" href="$Metadata_8h.html" title="llvm/Metadata.h" alt="" coords="2035,239,2157,265"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="864,316,1024,343"/>
+<area shape="rect" href="$OwningPtr_8h.html" title="llvm/ADT/OwningPtr.h" alt="" coords="2785,393,2940,420"/>
+<area shape="rect" href="$MachineFunction_8h.html" title="llvm/CodeGen/MachineFunction.h" alt="" coords="1557,239,1789,265"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="2872,84,3032,111"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="1048,316,1248,343"/>
+<area shape="rect" href="$Errno_8h.html" title="llvm/Support/Errno.h" alt="" coords="2696,84,2848,111"/>
+<area shape="rect" href="$ValueHandle_8h.html" title="llvm/Support/ValueHandle.h" alt="" coords="1813,239,2011,265"/>
+<area shape="rect" href="$EventListenerCommon_8h.html" title="EventListenerCommon.h" alt="" coords="1645,161,1824,188"/>
+<area shape="rect" href="$IntelJITEventsWrapper_8h.html" title="IntelJITEventsWrapper.h" alt="" coords="3056,84,3224,111"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="921,548,1105,575"/>
+<area shape="rect" href="$DebugLoc_8h.html" title="llvm/Support/DebugLoc.h" alt="" coords="224,316,405,343"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="1591,393,1759,420"/>
+<area shape="rect" href="$SmallPtrSet_8h.html" title="llvm/ADT/SmallPtrSet.h" alt="" coords="1297,393,1465,420"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1073,393,1223,420"/>
+<area shape="rect" href="$Dwarf_8h.html" title="llvm/Support/Dwarf.h" alt="" coords="1833,393,1985,420"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="2393,471,2556,497"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="2509,548,2683,575"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="920,471,1107,497"/>
+<area shape="rect" href="$PointerLikeTypeTraits_8h.html" title="llvm/Support/PointerLikeTypeTraits.h" alt="" coords="547,471,795,497"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="2557,161,2696,188"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="2720,161,2856,188"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="1885,316,2016,343"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="2355,161,2483,188"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="2535,239,2660,265"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="2095,393,2209,420"/>
+<area shape="rect" href="$Value_8h.html" title="llvm/Value.h" alt="" coords="2451,316,2549,343"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="1709,316,1861,343"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="2633,471,2823,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="2040,316,2184,343"/>
+<area shape="rect" href="$FoldingSet_8h.html" title="llvm/ADT/FoldingSet.h" alt="" coords="1272,316,1432,343"/>
+<area shape="rect" href="$DenseMapInfo_8h.html" title="llvm/ADT/DenseMapInfo.h" alt="" coords="407,393,591,420"/>
+<area shape="rect" href="$MachineBasicBlock_8h.html" title="llvm/CodeGen/MachineBasicBlock.h" alt="" coords="275,471,523,497"/>
+<area shape="rect" href="$Allocator_8h.html" title="llvm/Support/Allocator.h" alt="" coords="2335,393,2508,420"/>
+<area shape="rect" href="$Recycler_8h.html" title="llvm/Support/Recycler.h" alt="" coords="2208,316,2376,343"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventListener_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,247 @@
+<!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: IntelJITEventListener.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_c92c51dc3debf4668a549c62f98ec4ab.html">ExecutionEngine</a>      </li>
+      <li class="navelem"><a class="el" href="dir_ae1087ce37bdaf4142f3c393376d4b01.html">IntelJITEvents</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">IntelJITEventListener.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="IntelJITEventListener_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- IntelJITEventListener.cpp - Tell Intel profiler about JITed code --===//</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 a JITEventListener object to tell Intel(R) VTune(TM)</span>
+<a name="l00011"></a>00011 <span class="comment">// Amplifier XE 2011 about JITted functions.</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">#include "<a class="code" href="config_8h.html">llvm/Config/config.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="JITEventListener_8h.html">llvm/ExecutionEngine/JITEventListener.h</a>"</span>
+<a name="l00017"></a>00017 
+<a name="l00018"></a><a class="code" href="IntelJITEventListener_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">00018</a> <span class="preprocessor">#define DEBUG_TYPE "amplifier-jit-event-listener"</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="DebugInfo_8h.html">llvm/DebugInfo.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="Function_8h.html">llvm/Function.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="Metadata_8h.html">llvm/Metadata.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="DenseMap_8h.html">llvm/ADT/DenseMap.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="OwningPtr_8h.html">llvm/ADT/OwningPtr.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="MachineFunction_8h.html">llvm/CodeGen/MachineFunction.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="Errno_8h.html">llvm/Support/Errno.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="ValueHandle_8h.html">llvm/Support/ValueHandle.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="EventListenerCommon_8h.html">EventListenerCommon.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="IntelJITEventsWrapper_8h.html">IntelJITEventsWrapper.h</a>"</span>
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">using namespace </span>llvm;
+<a name="l00033"></a>00033 <span class="keyword">using namespace </span>llvm::jitprofiling;
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>{
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="keyword">class </span>IntelJITEventListener : <span class="keyword">public</span> <a class="code" href="classllvm_1_1JITEventListener.html">JITEventListener</a> {
+<a name="l00038"></a>00038   <span class="keyword">typedef</span> <a class="code" href="classllvm_1_1DenseMap.html">DenseMap<void*, unsigned int></a> MethodIDMap;
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040   <a class="code" href="classllvm_1_1OwningPtr.html">OwningPtr<IntelJITEventsWrapper></a> <a class="code" href="namespacellvm_1_1ARMISD.html#a2e41e02d8e1c0ff6c5a48860e87476b9a029f48a0b5e0d471de85baca7745d1a0">Wrapper</a>;
+<a name="l00041"></a>00041   MethodIDMap MethodIDs;
+<a name="l00042"></a>00042   <a class="code" href="classllvm_1_1jitprofiling_1_1FilenameCache.html">FilenameCache</a> Filenames;
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">public</span>:
+<a name="l00045"></a>00045   IntelJITEventListener(<a class="code" href="classllvm_1_1IntelJITEventsWrapper.html">IntelJITEventsWrapper</a>* libraryWrapper) {
+<a name="l00046"></a>00046       <a class="code" href="namespacellvm_1_1ARMISD.html#a2e41e02d8e1c0ff6c5a48860e87476b9a029f48a0b5e0d471de85baca7745d1a0">Wrapper</a>.reset(libraryWrapper);
+<a name="l00047"></a>00047   }
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049   ~IntelJITEventListener() {
+<a name="l00050"></a>00050   }
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052   <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyFunctionEmitted(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> &<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>,
+<a name="l00053"></a>00053                                      <span class="keywordtype">void</span> *FnStart, <span class="keywordtype">size_t</span> FnSize,
+<a name="l00054"></a>00054                                      <span class="keyword">const</span> EmittedFunctionDetails &<a class="code" href="namespacellvm.html#a001cc4aac3499891ed5b27d7ecb1b227a5ab8cb6e633fed03b5033ec22383a309">Details</a>);
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056   <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyFreeingMachineCode(<span class="keywordtype">void</span> *OldPtr);
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058   <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyObjectEmitted(<span class="keyword">const</span> <a class="code" href="classllvm_1_1ObjectImage.html">ObjectImage</a> &Obj);
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060   <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyFreeingObject(<span class="keyword">const</span> <a class="code" href="classllvm_1_1ObjectImage.html">ObjectImage</a> &Obj);
+<a name="l00061"></a>00061 };
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063 <span class="keyword">static</span> <a class="code" href="struct__LineNumberInfo.html">LineNumberInfo</a> LineStartToIntelJITFormat(
+<a name="l00064"></a>00064     uintptr_t StartAddress,
+<a name="l00065"></a>00065     uintptr_t Address,
+<a name="l00066"></a>00066     <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> Loc) {
+<a name="l00067"></a>00067   <a class="code" href="struct__LineNumberInfo.html">LineNumberInfo</a> Result;
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069   Result.<a class="code" href="struct__LineNumberInfo.html#a05e4308f18790d0556bc28f3f916335e">Offset</a> = Address - StartAddress;
+<a name="l00070"></a>00070   Result.<a class="code" href="struct__LineNumberInfo.html#a7bc3b6e7a1f4b21576a71525ab9f4d86">LineNumber</a> = Loc.<a class="code" href="classllvm_1_1DebugLoc.html#ace5b91e09e7b0aa7d88a500993a7502c">getLine</a>();
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072   <span class="keywordflow">return</span> Result;
+<a name="l00073"></a>00073 }
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075 <span class="keyword">static</span> <a class="code" href="struct__iJIT__Method__Load.html">iJIT_Method_Load</a> FunctionDescToIntelJITFormat(
+<a name="l00076"></a>00076     <a class="code" href="classllvm_1_1IntelJITEventsWrapper.html">IntelJITEventsWrapper</a>& <a class="code" href="namespacellvm_1_1ARMISD.html#a2e41e02d8e1c0ff6c5a48860e87476b9a029f48a0b5e0d471de85baca7745d1a0">Wrapper</a>,
+<a name="l00077"></a>00077     <span class="keyword">const</span> <span class="keywordtype">char</span>* FnName,
+<a name="l00078"></a>00078     uintptr_t FnStart,
+<a name="l00079"></a>00079     <span class="keywordtype">size_t</span> FnSize) {
+<a name="l00080"></a>00080   <a class="code" href="struct__iJIT__Method__Load.html">iJIT_Method_Load</a> Result;
+<a name="l00081"></a>00081   <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9f7f1b6be1144152902121f2463d0368" title="void *memset(void *b, int c, size_t len);">memset</a>(&Result, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__iJIT__Method__Load.html">iJIT_Method_Load</a>));
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083   Result.<a class="code" href="struct__iJIT__Method__Load.html#a4749361629cb18a2134ffcfb7c5009c3">method_id</a> = Wrapper.<a class="code" href="classllvm_1_1IntelJITEventsWrapper.html#a95749bba7428b736cd8a118e7938b3e0">iJIT_GetNewMethodID</a>();
+<a name="l00084"></a>00084   Result.<a class="code" href="struct__iJIT__Method__Load.html#a5a199a135f5c11023ae612a4d78ad7c5">method_name</a> = <span class="keyword">const_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(FnName);
+<a name="l00085"></a>00085   Result.<a class="code" href="struct__iJIT__Method__Load.html#af528d810e75a9db278ee900432cd17c8">method_load_address</a> = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(FnStart);
+<a name="l00086"></a>00086   Result.<a class="code" href="struct__iJIT__Method__Load.html#ab68d7a5a9552ec49bd7baa01c03d1f72">method_size</a> = FnSize;
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088   Result.<a class="code" href="struct__iJIT__Method__Load.html#a4bc1739953218a3f24f919936c5aa262">class_id</a> = 0;
+<a name="l00089"></a>00089   Result.<a class="code" href="struct__iJIT__Method__Load.html#a59e7f7b3c5dccad3d6de566b0a0edd32">class_file_name</a> = NULL;
+<a name="l00090"></a>00090   Result.<a class="code" href="struct__iJIT__Method__Load.html#a990057599a1696b89c5e8e8bf4ad05f3">user_data</a> = NULL;
+<a name="l00091"></a>00091   Result.<a class="code" href="struct__iJIT__Method__Load.html#a8e116b5d71e7b98c6c85e6558d5896c6">user_data_size</a> = 0;
+<a name="l00092"></a>00092   Result.<a class="code" href="struct__iJIT__Method__Load.html#a3ce4f9e31a87a8ef08ccc32804aebd6c">env</a> = <a class="code" href="jitprofiling_8h.html#a95ebe83a5829131400c97607ca80c3eba5bdd71c0c65348e20edfde628c45e842">iJDE_JittingAPI</a>;
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094   <span class="keywordflow">return</span> Result;
+<a name="l00095"></a>00095 }
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="comment">// Adds the just-emitted function to the symbol table.</span>
+<a name="l00098"></a>00098 <span class="keywordtype">void</span> IntelJITEventListener::NotifyFunctionEmitted(
+<a name="l00099"></a>00099     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> &<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a>, <span class="keywordtype">void</span> *FnStart, <span class="keywordtype">size_t</span> FnSize,
+<a name="l00100"></a>00100     <span class="keyword">const</span> EmittedFunctionDetails &<a class="code" href="namespacellvm.html#a001cc4aac3499891ed5b27d7ecb1b227a5ab8cb6e633fed03b5033ec22383a309">Details</a>) {
+<a name="l00101"></a>00101   <a class="code" href="struct__iJIT__Method__Load.html">iJIT_Method_Load</a> FunctionMessage = FunctionDescToIntelJITFormat(*Wrapper,
+<a name="l00102"></a>00102                                       F.<a class="code" href="classllvm_1_1Value.html#ad452febc1ac0b394876e640ec03ffa38">getName</a>().<a class="code" href="classllvm_1_1StringRef.html#a7d9b88d042ae1da8afd5509875c90a04">data</a>(),
+<a name="l00103"></a>00103                                       <span class="keyword">reinterpret_cast<</span>uint64_t<span class="keyword">></span>(FnStart),
+<a name="l00104"></a>00104                                       FnSize);
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106   std::vector<LineNumberInfo> LineInfo;
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108   <span class="keywordflow">if</span> (!Details.LineStarts.empty()) {
+<a name="l00109"></a>00109     <span class="comment">// Now convert the line number information from the address/DebugLoc</span>
+<a name="l00110"></a>00110     <span class="comment">// format in Details to the offset/lineno in Intel JIT API format.</span>
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112     LineInfo.reserve(Details.LineStarts.size() + 1);
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114     <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> FirstLoc = Details.LineStarts[0].Loc;
+<a name="l00115"></a>00115     assert(!FirstLoc.<a class="code" href="classllvm_1_1DebugLoc.html#acb015270a969bc45af93da5d0ad45ba7" title="isUnknown - Return true if this is an unknown location.">isUnknown</a>()
+<a name="l00116"></a>00116            && <span class="stringliteral">"LineStarts should not contain unknown DebugLocs"</span>);
+<a name="l00117"></a>00117 
+<a name="l00118"></a>00118     <a class="code" href="classllvm_1_1MDNode.html" title="MDNode - a tuple of other values.">MDNode</a> *FirstLocScope = FirstLoc.<a class="code" href="classllvm_1_1DebugLoc.html#aa6c86151b0e4172d3d624661e1585f30">getScope</a>(F.<a class="code" href="classllvm_1_1Function.html#a2da53ac53516a3f16191f4c8a8eaa3e5">getContext</a>());
+<a name="l00119"></a>00119     <a class="code" href="classllvm_1_1DISubprogram.html" title="DISubprogram - This is a wrapper for a subprogram (e.g. a function).">DISubprogram</a> FunctionDI = <a class="code" href="namespacellvm.html#ae1ebfad5b4d793332a646a823b162171" title="getDISubprogram - Find subprogram that is enclosing this scope.">getDISubprogram</a>(FirstLocScope);
+<a name="l00120"></a>00120     <span class="keywordflow">if</span> (FunctionDI.<a class="code" href="classllvm_1_1DISubprogram.html#ad9903e08fde2a956e559f7207d90ce4c" title="Verify - Verify that a subprogram descriptor is well formed.">Verify</a>()) {
+<a name="l00121"></a>00121       FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a8dc975a3b54110af8007f2418477ac50">source_file_name</a> = <span class="keyword">const_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(
+<a name="l00122"></a>00122                                           Filenames.getFullPath(FirstLocScope));
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124       <a class="code" href="struct__LineNumberInfo.html">LineNumberInfo</a> FirstLine;
+<a name="l00125"></a>00125       FirstLine.<a class="code" href="struct__LineNumberInfo.html#a05e4308f18790d0556bc28f3f916335e">Offset</a> = 0;
+<a name="l00126"></a>00126       FirstLine.<a class="code" href="struct__LineNumberInfo.html#a7bc3b6e7a1f4b21576a71525ab9f4d86">LineNumber</a> = FunctionDI.<a class="code" href="classllvm_1_1DISubprogram.html#afbea43df029be5bff00a4a2f2bfa1d63">getLineNumber</a>();
+<a name="l00127"></a>00127       LineInfo.push_back(FirstLine);
+<a name="l00128"></a>00128     }
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130     <span class="keywordflow">for</span> (std::vector<EmittedFunctionDetails::LineStart>::const_iterator <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> =
+<a name="l00131"></a>00131           Details.LineStarts.begin(), E = Details.LineStarts.end();
+<a name="l00132"></a>00132           <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="l00133"></a>00133       <span class="comment">// This implementation ignores the DebugLoc filename because the Intel</span>
+<a name="l00134"></a>00134       <span class="comment">// JIT API does not support multiple source files associated with a single</span>
+<a name="l00135"></a>00135       <span class="comment">// JIT function</span>
+<a name="l00136"></a>00136       LineInfo.push_back(LineStartToIntelJITFormat(
+<a name="l00137"></a>00137                           reinterpret_cast<uintptr_t>(FnStart),
+<a name="l00138"></a>00138                           <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->Address,
+<a name="l00139"></a>00139                           <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->Loc));
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141       <span class="comment">// If we have no file name yet for the function, use the filename from</span>
+<a name="l00142"></a>00142       <span class="comment">// the first instruction that has one</span>
+<a name="l00143"></a>00143       <span class="keywordflow">if</span> (FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a8dc975a3b54110af8007f2418477ac50">source_file_name</a> == 0) {
+<a name="l00144"></a>00144         <a class="code" href="classllvm_1_1MDNode.html" title="MDNode - a tuple of other values.">MDNode</a> *scope = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>->Loc.getScope(
+<a name="l00145"></a>00145           Details.MF->getFunction()->getContext());
+<a name="l00146"></a>00146         FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a8dc975a3b54110af8007f2418477ac50">source_file_name</a> = <span class="keyword">const_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(
+<a name="l00147"></a>00147                                                   Filenames.getFullPath(scope));
+<a name="l00148"></a>00148       }
+<a name="l00149"></a>00149     }
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a18fba4fe0f235d81be7e6661c8de2890">line_number_size</a> = LineInfo.size();
+<a name="l00152"></a>00152     FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a8cc078c6201ccc6fd2e292e82cb061ae">line_number_table</a> = &*LineInfo.begin();
+<a name="l00153"></a>00153   } <span class="keywordflow">else</span> {
+<a name="l00154"></a>00154     FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a18fba4fe0f235d81be7e6661c8de2890">line_number_size</a> = 0;
+<a name="l00155"></a>00155     FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a8cc078c6201ccc6fd2e292e82cb061ae">line_number_table</a> = 0;
+<a name="l00156"></a>00156   }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158   Wrapper-><a class="code" href="classllvm_1_1IntelJITEventsWrapper.html#abe60f00b9e149fcf0da28a67f6f3b99e">iJIT_NotifyEvent</a>(<a class="code" href="jitprofiling_8h.html#a199e5cfae34a345dd07c5da4db615318aace21abae9888611f9fb6e6cf1922b20">iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED</a>,
+<a name="l00159"></a>00159                             &FunctionMessage);
+<a name="l00160"></a>00160   MethodIDs[FnStart] = FunctionMessage.<a class="code" href="struct__iJIT__Method__Load.html#a4749361629cb18a2134ffcfb7c5009c3">method_id</a>;
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163 <span class="keywordtype">void</span> IntelJITEventListener::NotifyFreeingMachineCode(<span class="keywordtype">void</span> *FnStart) {
+<a name="l00164"></a>00164   MethodIDMap::iterator <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = MethodIDs.find(FnStart);
+<a name="l00165"></a>00165   <span class="keywordflow">if</span> (I != MethodIDs.end()) {
+<a name="l00166"></a>00166     Wrapper-><a class="code" href="classllvm_1_1IntelJITEventsWrapper.html#abe60f00b9e149fcf0da28a67f6f3b99e">iJIT_NotifyEvent</a>(<a class="code" href="jitprofiling_8h.html#a199e5cfae34a345dd07c5da4db615318abaeae040e439fd0de07f2b09b4ae99d5">iJVM_EVENT_TYPE_METHOD_UNLOAD_START</a>, &I->second);
+<a name="l00167"></a>00167     MethodIDs.erase(I);
+<a name="l00168"></a>00168   }
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="keywordtype">void</span> IntelJITEventListener::NotifyObjectEmitted(<span class="keyword">const</span> <a class="code" href="classllvm_1_1ObjectImage.html">ObjectImage</a> &Obj) {
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174 <span class="keywordtype">void</span> IntelJITEventListener::NotifyFreeingObject(<span class="keyword">const</span> <a class="code" href="classllvm_1_1ObjectImage.html">ObjectImage</a> &Obj) {
+<a name="l00175"></a>00175 }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 }  <span class="comment">// anonymous namespace.</span>
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179 <span class="keyword">namespace </span>llvm {
+<a name="l00180"></a>00180 <a class="code" href="classllvm_1_1JITEventListener.html">JITEventListener</a> *<a class="code" href="classllvm_1_1JITEventListener.html#a8fc9cd1088989682b3d72a2560d0c577">JITEventListener::createIntelJITEventListener</a>() {
+<a name="l00181"></a>00181   <span class="keywordflow">return</span> <span class="keyword">new</span> IntelJITEventListener(<span class="keyword">new</span> <a class="code" href="classllvm_1_1IntelJITEventsWrapper.html">IntelJITEventsWrapper</a>);
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="comment">// for testing</span>
+<a name="l00185"></a>00185 <a class="code" href="classllvm_1_1JITEventListener.html">JITEventListener</a> *<a class="code" href="classllvm_1_1JITEventListener.html#a8fc9cd1088989682b3d72a2560d0c577">JITEventListener::createIntelJITEventListener</a>(
+<a name="l00186"></a>00186                                       <a class="code" href="classllvm_1_1IntelJITEventsWrapper.html">IntelJITEventsWrapper</a>* TestImpl) {
+<a name="l00187"></a>00187   <span class="keywordflow">return</span> <span class="keyword">new</span> IntelJITEventListener(TestImpl);
+<a name="l00188"></a>00188 }
+<a name="l00189"></a>00189 
+<a name="l00190"></a>00190 } <span class="comment">// namespace llvm</span>
+<a name="l00191"></a>00191 
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/IntelJITEventsWrapper_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventsWrapper_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventsWrapper_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventsWrapper_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: IntelJITEventsWrapper.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_c92c51dc3debf4668a549c62f98ec4ab.html">ExecutionEngine</a>      </li>
+      <li class="navelem"><a class="el" href="dir_ae1087ce37bdaf4142f3c393376d4b01.html">IntelJITEvents</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">IntelJITEventsWrapper.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="jitprofiling_8h_source.html">jitprofiling.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for IntelJITEventsWrapper.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="IntelJITEventsWrapper_8h__incl.png" border="0" usemap="#IntelJITEventsWrapper_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="IntelJITEventsWrapper_8h__dep__incl.png" border="0" usemap="#IntelJITEventsWrapper_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="IntelJITEventsWrapper_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_1IntelJITEventsWrapper.html">llvm::IntelJITEventsWrapper</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:30 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/IntelJITEventsWrapper_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventsWrapper_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntelJITEventsWrapper_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,87 @@
+<!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: InterferenceCache.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_f2244d21cf8bec63d11bfc1ad661d96f.html">CodeGen</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">InterferenceCache.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="LiveIntervalUnion_8h_source.html">LiveIntervalUnion.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for InterferenceCache.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="InterferenceCache_8h__incl.png" border="0" usemap="#InterferenceCache_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="InterferenceCache_8h__dep__incl.png" border="0" usemap="#InterferenceCache_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="InterferenceCache_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_1InterferenceCache.html">llvm::InterferenceCache</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>llvm::InterferenceCache::BlockInterference</b></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>llvm::InterferenceCache::Entry</b></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>llvm::InterferenceCache::Entry::RegUnitInfo</b></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1InterferenceCache_1_1Cursor.html">llvm::InterferenceCache::Cursor</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a> - The primary query interface for the block interference cache.  <a href="classllvm_1_1InterferenceCache_1_1Cursor.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/InterferenceCache_8h__dep__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__dep__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__dep__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__dep__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,4 @@
+<map id="G" name="G">
+<area shape="rect" href="$InterferenceCache_8cpp.html" title="InterferenceCache.cpp" alt="" coords="5,84,171,111"/>
+<area shape="rect" href="$RegAllocGreedy_8cpp.html" title="RegAllocGreedy.cpp" alt="" coords="195,84,339,111"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/InterferenceCache_8h_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,283 @@
+<!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: InterferenceCache.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_f2244d21cf8bec63d11bfc1ad661d96f.html">CodeGen</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">InterferenceCache.h</div>  </div>
+</div>
+<div class="contents">
+<a href="InterferenceCache_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- InterferenceCache.h - Caching per-block interference ---*- 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">// InterferenceCache remembers per-block interference from LiveIntervalUnions,</span>
+<a name="l00011"></a>00011 <span class="comment">// fixed RegUnit interference, and register masks.</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_CODEGEN_INTERFERENCECACHE</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define LLVM_CODEGEN_INTERFERENCECACHE</span>
+<a name="l00017"></a>00017 <span class="preprocessor"></span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="LiveIntervalUnion_8h.html">LiveIntervalUnion.h</a>"</span>
+<a name="l00019"></a>00019 
+<a name="l00020"></a>00020 <span class="keyword">namespace </span>llvm {
+<a name="l00021"></a>00021 
+<a name="l00022"></a>00022 <span class="keyword">class </span>LiveIntervals;
+<a name="l00023"></a>00023 
+<a name="l00024"></a><a class="code" href="classllvm_1_1InterferenceCache.html">00024</a> <span class="keyword">class </span><a class="code" href="classllvm_1_1InterferenceCache.html">InterferenceCache</a> {
+<a name="l00025"></a>00025   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> *TRI;
+<a name="l00026"></a>00026   <a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a> *LIUArray;
+<a name="l00027"></a>00027   <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> *MF;
+<a name="l00028"></a>00028 <span class="comment"></span>
+<a name="l00029"></a>00029 <span class="comment">  /// BlockInterference - information about the interference in a single basic</span>
+<a name="l00030"></a>00030 <span class="comment">  /// block.</span>
+<a name="l00031"></a>00031 <span class="comment"></span>  <span class="keyword">struct </span>BlockInterference {
+<a name="l00032"></a>00032     BlockInterference() : Tag(0) {}
+<a name="l00033"></a>00033     <span class="keywordtype">unsigned</span> Tag;
+<a name="l00034"></a>00034     <a class="code" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> First;
+<a name="l00035"></a>00035     <a class="code" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> Last;
+<a name="l00036"></a>00036   };
+<a name="l00037"></a>00037 <span class="comment"></span>
+<a name="l00038"></a>00038 <span class="comment">  /// Entry - A cache entry containing interference information for all aliases</span>
+<a name="l00039"></a>00039 <span class="comment">  /// of PhysReg in all basic blocks.</span>
+<a name="l00040"></a>00040 <span class="comment"></span>  <span class="keyword">class </span>Entry {<span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">    /// PhysReg - The register currently represented.</span>
+<a name="l00042"></a>00042 <span class="comment"></span>    <span class="keywordtype">unsigned</span> PhysReg;
+<a name="l00043"></a>00043 <span class="comment"></span>
+<a name="l00044"></a>00044 <span class="comment">    /// Tag - Cache tag is changed when any of the underlying LiveIntervalUnions</span>
+<a name="l00045"></a>00045 <span class="comment">    /// change.</span>
+<a name="l00046"></a>00046 <span class="comment"></span>    <span class="keywordtype">unsigned</span> Tag;
+<a name="l00047"></a>00047 <span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">    /// RefCount - The total number of Cursor instances referring to this Entry.</span>
+<a name="l00049"></a>00049 <span class="comment"></span>    <span class="keywordtype">unsigned</span> RefCount;
+<a name="l00050"></a>00050 <span class="comment"></span>
+<a name="l00051"></a>00051 <span class="comment">    /// MF - The current function.</span>
+<a name="l00052"></a>00052 <span class="comment"></span>    <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> *MF;
+<a name="l00053"></a>00053 <span class="comment"></span>
+<a name="l00054"></a>00054 <span class="comment">    /// Indexes - Mapping block numbers to SlotIndex ranges.</span>
+<a name="l00055"></a>00055 <span class="comment"></span>    <a class="code" href="classllvm_1_1SlotIndexes.html">SlotIndexes</a> *Indexes;
+<a name="l00056"></a>00056 <span class="comment"></span>
+<a name="l00057"></a>00057 <span class="comment">    /// LIS - Used for accessing register mask interference maps.</span>
+<a name="l00058"></a>00058 <span class="comment"></span>    <a class="code" href="classllvm_1_1LiveIntervals.html">LiveIntervals</a> *LIS;
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00060"></a>00060 <span class="comment">    /// PrevPos - The previous position the iterators were moved to.</span>
+<a name="l00061"></a>00061 <span class="comment"></span>    <a class="code" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> PrevPos;
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">    /// RegUnitInfo - Information tracked about each RegUnit in PhysReg.</span>
+<a name="l00064"></a>00064 <span class="comment">    /// When PrevPos is set, the iterators are valid as if advanceTo(PrevPos)</span>
+<a name="l00065"></a>00065 <span class="comment">    /// had just been called.</span>
+<a name="l00066"></a>00066 <span class="comment"></span>    <span class="keyword">struct </span>RegUnitInfo {<span class="comment"></span>
+<a name="l00067"></a>00067 <span class="comment">      /// Iterator pointing into the LiveIntervalUnion containing virtual</span>
+<a name="l00068"></a>00068 <span class="comment">      /// register interference.</span>
+<a name="l00069"></a>00069 <span class="comment"></span>      <a class="code" href="classllvm_1_1LiveIntervalUnion.html#a3c59b3b5c9561a80be4c4cc4a403fe34">LiveIntervalUnion::SegmentIter</a> VirtI;
+<a name="l00070"></a>00070 <span class="comment"></span>
+<a name="l00071"></a>00071 <span class="comment">      /// Tag of the LIU last time we looked.</span>
+<a name="l00072"></a>00072 <span class="comment"></span>      <span class="keywordtype">unsigned</span> VirtTag;
+<a name="l00073"></a>00073 <span class="comment"></span>
+<a name="l00074"></a>00074 <span class="comment">      /// Fixed interference in RegUnit.</span>
+<a name="l00075"></a>00075 <span class="comment"></span>      <a class="code" href="classllvm_1_1LiveInterval.html">LiveInterval</a> *Fixed;
+<a name="l00076"></a>00076 <span class="comment"></span>
+<a name="l00077"></a>00077 <span class="comment">      /// Iterator pointing into the fixed RegUnit interference.</span>
+<a name="l00078"></a>00078 <span class="comment"></span>      <a class="code" href="structllvm_1_1LiveRange.html">LiveInterval::iterator</a> FixedI;
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080       RegUnitInfo(<a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a> &LIU) : VirtTag(LIU.<a class="code" href="classllvm_1_1LiveIntervalUnion.html#a4f6fd57f9eae0091eeee410eadfd694b" title="getTag - Return an opaque tag representing the current state of the union.">getTag</a>()), Fixed(0) {
+<a name="l00081"></a>00081         VirtI.setMap(LIU.<a class="code" href="classllvm_1_1LiveIntervalUnion.html#a6386a1fc45f8f5d0e2ce70686ed02155">getMap</a>());
+<a name="l00082"></a>00082       }
+<a name="l00083"></a>00083     };
+<a name="l00084"></a>00084 <span class="comment"></span>
+<a name="l00085"></a>00085 <span class="comment">    /// Info for each RegUnit in PhysReg. It is very rare ofr a PHysReg to have</span>
+<a name="l00086"></a>00086 <span class="comment">    /// more than 4 RegUnits.</span>
+<a name="l00087"></a>00087 <span class="comment"></span>    <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<RegUnitInfo, 4></a> RegUnits;
+<a name="l00088"></a>00088 <span class="comment"></span>
+<a name="l00089"></a>00089 <span class="comment">    /// Blocks - Interference for each block in the function.</span>
+<a name="l00090"></a>00090 <span class="comment"></span>    <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<BlockInterference, 8></a> Blocks;
+<a name="l00091"></a>00091 <span class="comment"></span>
+<a name="l00092"></a>00092 <span class="comment">    /// update - Recompute Blocks[MBBNum]</span>
+<a name="l00093"></a>00093 <span class="comment"></span>    <span class="keywordtype">void</span> update(<span class="keywordtype">unsigned</span> MBBNum);
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095   <span class="keyword">public</span>:
+<a name="l00096"></a>00096     Entry() : PhysReg(0), Tag(0), RefCount(0), Indexes(0), LIS(0) {}
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098     <span class="keywordtype">void</span> clear(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> *mf, <a class="code" href="classllvm_1_1SlotIndexes.html">SlotIndexes</a> *indexes, <a class="code" href="classllvm_1_1LiveIntervals.html">LiveIntervals</a> *lis) {
+<a name="l00099"></a>00099       assert(!hasRefs() && <span class="stringliteral">"Cannot clear cache entry with references"</span>);
+<a name="l00100"></a>00100       PhysReg = 0;
+<a name="l00101"></a>00101       MF = mf;
+<a name="l00102"></a>00102       Indexes = indexes;
+<a name="l00103"></a>00103       LIS = lis;
+<a name="l00104"></a>00104     }
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106     <span class="keywordtype">unsigned</span> getPhysReg()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> PhysReg; }
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108     <span class="keywordtype">void</span> addRef(<span class="keywordtype">int</span> Delta) { RefCount += Delta; }
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110     <span class="keywordtype">bool</span> hasRefs()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RefCount > 0; }
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112     <span class="keywordtype">void</span> revalidate(<a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a> *LIUArray, <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> *TRI);
+<a name="l00113"></a>00113 <span class="comment"></span>
+<a name="l00114"></a>00114 <span class="comment">    /// valid - Return true if this is a valid entry for physReg.</span>
+<a name="l00115"></a>00115 <span class="comment"></span>    <span class="keywordtype">bool</span> valid(<a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a> *LIUArray, <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> *TRI);
+<a name="l00116"></a>00116 <span class="comment"></span>
+<a name="l00117"></a>00117 <span class="comment">    /// reset - Initialize entry to represent physReg's aliases.</span>
+<a name="l00118"></a>00118 <span class="comment"></span>    <span class="keywordtype">void</span> reset(<span class="keywordtype">unsigned</span> physReg,
+<a name="l00119"></a>00119                <a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a> *LIUArray,
+<a name="l00120"></a>00120                <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> *TRI,
+<a name="l00121"></a>00121                <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> *MF);
+<a name="l00122"></a>00122 <span class="comment"></span>
+<a name="l00123"></a>00123 <span class="comment">    /// get - Return an up to date BlockInterference.</span>
+<a name="l00124"></a>00124 <span class="comment"></span>    BlockInterference *<span class="keyword">get</span>(<span class="keywordtype">unsigned</span> MBBNum) {
+<a name="l00125"></a>00125       <span class="keywordflow">if</span> (Blocks[MBBNum].Tag != Tag)
+<a name="l00126"></a>00126         update(MBBNum);
+<a name="l00127"></a>00127       <span class="keywordflow">return</span> &Blocks[MBBNum];
+<a name="l00128"></a>00128     }
+<a name="l00129"></a>00129   };
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131   <span class="comment">// We don't keep a cache entry for every physical register, that would use too</span>
+<a name="l00132"></a>00132   <span class="comment">// much memory. Instead, a fixed number of cache entries are used in a round-</span>
+<a name="l00133"></a>00133   <span class="comment">// robin manner.</span>
+<a name="l00134"></a>00134   <span class="keyword">enum</span> { CacheEntries = 32 };
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136   <span class="comment">// Point to an entry for each physreg. The entry pointed to may not be up to</span>
+<a name="l00137"></a>00137   <span class="comment">// date, and it may have been reused for a different physreg.</span>
+<a name="l00138"></a>00138   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<unsigned char, 2></a> PhysRegEntries;
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140   <span class="comment">// Next round-robin entry to be picked.</span>
+<a name="l00141"></a>00141   <span class="keywordtype">unsigned</span> RoundRobin;
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143   <span class="comment">// The actual cache entries.</span>
+<a name="l00144"></a>00144   Entry Entries[CacheEntries];
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146   <span class="comment">// get - Get a valid entry for PhysReg.</span>
+<a name="l00147"></a>00147   Entry *<span class="keyword">get</span>(<span class="keywordtype">unsigned</span> PhysReg);
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="keyword">public</span>:
+<a name="l00150"></a><a class="code" href="classllvm_1_1InterferenceCache.html#a570149e17d73787398fca1512f05c7d6">00150</a>   <a class="code" href="classllvm_1_1InterferenceCache.html#a570149e17d73787398fca1512f05c7d6">InterferenceCache</a>() : TRI(0), LIUArray(0), MF(0), RoundRobin(0) {}
+<a name="l00151"></a>00151 <span class="comment"></span>
+<a name="l00152"></a>00152 <span class="comment">  /// init - Prepare cache for a new function.</span>
+<a name="l00153"></a>00153 <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InterferenceCache.html#ac20d7805f5da919d14d4d207a5785670" title="init - Prepare cache for a new function.">init</a>(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a>*, <a class="code" href="classllvm_1_1LiveIntervalUnion.html">LiveIntervalUnion</a>*, <a class="code" href="classllvm_1_1SlotIndexes.html">SlotIndexes</a>*, <a class="code" href="classllvm_1_1LiveIntervals.html">LiveIntervals</a>*,
+<a name="l00154"></a>00154             <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterInfo.html">TargetRegisterInfo</a> *);
+<a name="l00155"></a>00155 <span class="comment"></span>
+<a name="l00156"></a>00156 <span class="comment">  /// getMaxCursors - Return the maximum number of concurrent cursors that can</span>
+<a name="l00157"></a>00157 <span class="comment">  /// be supported.</span>
+<a name="l00158"></a><a class="code" href="classllvm_1_1InterferenceCache.html#a877edd82f1d68db14d72abc7f56f518f">00158</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1InterferenceCache.html#a877edd82f1d68db14d72abc7f56f518f">getMaxCursors</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> CacheEntries; }
+<a name="l00159"></a>00159 <span class="comment"></span>
+<a name="l00160"></a>00160 <span class="comment">  /// Cursor - The primary query interface for the block interference cache.</span>
+<a name="l00161"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html">00161</a> <span class="comment"></span>  <span class="keyword">class </span><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a> {
+<a name="l00162"></a>00162     Entry *CacheEntry;
+<a name="l00163"></a>00163     BlockInterference *Current;
+<a name="l00164"></a>00164     <span class="keyword">static</span> BlockInterference NoInterference;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     <span class="keywordtype">void</span> setEntry(Entry *E) {
+<a name="l00167"></a>00167       Current = 0;
+<a name="l00168"></a>00168       <span class="comment">// Update reference counts. Nothing happens when RefCount reaches 0, so</span>
+<a name="l00169"></a>00169       <span class="comment">// we don't have to check for E == CacheEntry etc.</span>
+<a name="l00170"></a>00170       <span class="keywordflow">if</span> (CacheEntry)
+<a name="l00171"></a>00171         CacheEntry->addRef(-1);
+<a name="l00172"></a>00172       CacheEntry = E;
+<a name="l00173"></a>00173       <span class="keywordflow">if</span> (CacheEntry)
+<a name="l00174"></a>00174         CacheEntry->addRef(+1);
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177   <span class="keyword">public</span>:<span class="comment"></span>
+<a name="l00178"></a>00178 <span class="comment">    /// Cursor - Create a dangling cursor.</span>
+<a name="l00179"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a1fcf03b9b0542e3c4be8086fa18278f7">00179</a> <span class="comment"></span>    <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a1fcf03b9b0542e3c4be8086fa18278f7" title="Cursor - Create a dangling cursor.">Cursor</a>() : CacheEntry(0), Current(0) {}
+<a name="l00180"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a060dacad6880105cf20d825899c972f6">00180</a>     <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a060dacad6880105cf20d825899c972f6">~Cursor</a>() { setEntry(0); }
+<a name="l00181"></a>00181 
+<a name="l00182"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a79007e62f19d3152b1a76485129b342e">00182</a>     <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a79007e62f19d3152b1a76485129b342e">Cursor</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a> &O) : CacheEntry(0), Current(0) {
+<a name="l00183"></a>00183       setEntry(O.CacheEntry);
+<a name="l00184"></a>00184     }
+<a name="l00185"></a>00185 
+<a name="l00186"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a2291985e01698d0773d4a693e6f5136a">00186</a>     <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a> &<a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a2291985e01698d0773d4a693e6f5136a">operator=</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a> &O) {
+<a name="l00187"></a>00187       setEntry(O.CacheEntry);
+<a name="l00188"></a>00188       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00189"></a>00189     }
+<a name="l00190"></a>00190 <span class="comment"></span>
+<a name="l00191"></a>00191 <span class="comment">    /// setPhysReg - Point this cursor to PhysReg's interference.</span>
+<a name="l00192"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a04d65cd676f91684c4babb8388e752f7">00192</a> <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a04d65cd676f91684c4babb8388e752f7" title="setPhysReg - Point this cursor to PhysReg's interference.">setPhysReg</a>(<a class="code" href="classllvm_1_1InterferenceCache.html">InterferenceCache</a> &Cache, <span class="keywordtype">unsigned</span> PhysReg) {
+<a name="l00193"></a>00193       <span class="comment">// Release reference before getting a new one. That guarantees we can</span>
+<a name="l00194"></a>00194       <span class="comment">// actually have CacheEntries live cursors.</span>
+<a name="l00195"></a>00195       setEntry(0);
+<a name="l00196"></a>00196       <span class="keywordflow">if</span> (PhysReg)
+<a name="l00197"></a>00197         setEntry(Cache.get(PhysReg));
+<a name="l00198"></a>00198     }
+<a name="l00199"></a>00199 <span class="comment"></span>
+<a name="l00200"></a>00200 <span class="comment">    /// moveTo - Move cursor to basic block MBBNum.</span>
+<a name="l00201"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a9983769d5d0bcab7fb0385864fc52621">00201</a> <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a9983769d5d0bcab7fb0385864fc52621" title="moveTo - Move cursor to basic block MBBNum.">moveToBlock</a>(<span class="keywordtype">unsigned</span> MBBNum) {
+<a name="l00202"></a>00202       Current = CacheEntry ? CacheEntry->get(MBBNum) : &NoInterference;
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 <span class="comment"></span>
+<a name="l00205"></a>00205 <span class="comment">    /// hasInterference - Return true if the current block has any interference.</span>
+<a name="l00206"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a898f7966b7db810dc1487ac6ca267fd2">00206</a> <span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a898f7966b7db810dc1487ac6ca267fd2" title="hasInterference - Return true if the current block has any interference.">hasInterference</a>() {
+<a name="l00207"></a>00207       <span class="keywordflow">return</span> Current->First.isValid();
+<a name="l00208"></a>00208     }
+<a name="l00209"></a>00209 <span class="comment"></span>
+<a name="l00210"></a>00210 <span class="comment">    /// first - Return the starting index of the first interfering range in the</span>
+<a name="l00211"></a>00211 <span class="comment">    /// current block.</span>
+<a name="l00212"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a00dd59b7037ee092a891c2ef1cd9e782">00212</a> <span class="comment"></span>    <a class="code" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a00dd59b7037ee092a891c2ef1cd9e782">first</a>() {
+<a name="l00213"></a>00213       <span class="keywordflow">return</span> Current->First;
+<a name="l00214"></a>00214     }
+<a name="l00215"></a>00215 <span class="comment"></span>
+<a name="l00216"></a>00216 <span class="comment">    /// last - Return the ending index of the last interfering range in the</span>
+<a name="l00217"></a>00217 <span class="comment">    /// current block.</span>
+<a name="l00218"></a><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a0166e26fb57071dbbb9f99570865616b">00218</a> <span class="comment"></span>    <a class="code" href="classllvm_1_1SlotIndex.html" title="SlotIndex - An opaque wrapper around machine indexes.">SlotIndex</a> <a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html#a0166e26fb57071dbbb9f99570865616b">last</a>() {
+<a name="l00219"></a>00219       <span class="keywordflow">return</span> Current->Last;
+<a name="l00220"></a>00220     }
+<a name="l00221"></a>00221   };
+<a name="l00222"></a>00222 
+<a name="l00223"></a><a class="code" href="classllvm_1_1InterferenceCache.html#a9591eb6f6543f40292912e27b74f4d27">00223</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classllvm_1_1InterferenceCache_1_1Cursor.html" title="Cursor - The primary query interface for the block interference cache.">Cursor</a>;
+<a name="l00224"></a>00224 };
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace llvm</span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:34: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/Internalize_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Internalize_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Internalize_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Internalize_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,270 @@
+<!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: Internalize.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_a5a75fb0df8cea8d1a0a6c9d8a132571.html">IPO</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">Internalize.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="CallGraph_8h_source.html">llvm/Analysis/CallGraph.h</a>"</code><br/>
+<code>#include "<a class="el" href="Transforms_2IPO_8h_source.html">llvm/Transforms/IPO.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="Module_8h_source.html">llvm/Module.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="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include "<a class="el" href="Statistic_8h_source.html">llvm/ADT/Statistic.h</a>"</code><br/>
+<code>#include <fstream></code><br/>
+<code>#include <set></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for Internalize.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="Internalize_8cpp__incl.png" border="0" usemap="#Internalize_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="Internalize_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="Internalize_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a>   "internalize"</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="Internalize_8cpp.html#ae63244022eba9159d32f3ea0c575fbf7">STATISTIC</a> (NumAliases,"Number of aliases internalized")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="Internalize_8cpp.html#a424bc714d38b4b4ccfe53715922a7d7d">STATISTIC</a> (NumFunctions,"Number of <a class="el" href="LoopExtractor_8cpp.html#ac6229e61e0214888a5ad66ac60cb36ec">functions</a> internalized")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="Internalize_8cpp.html#a79b0bdce7a9f3f244735d1a930a5b471">STATISTIC</a> (NumGlobals,"Number of global vars internalized")</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="Internalize_8cpp.html#a2c4ff9b20bc28f048ad17dae9c91b5ae">INITIALIZE_PASS</a> (InternalizePass,"internalize","Internalize Global Symbols", false, <a class="el" href="SimplifyInstructions_8cpp.html#a6dd713bd88673625bb181528a61bdc85">false</a>) InternalizePass</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>< std::string > </td><td class="memItemRight" valign="bottom"><a class="el" href="Internalize_8cpp.html#ae00185e9d2a09ceb4f02fe4a1f8ec2dd">APIFile</a> ("internalize-public-api-<a class="el" href="PathProfileInfo_8cpp.html#add64b5c8b8c45c8dabeaf9d771cc1534">file</a>", cl::value_desc("filename"), cl::desc("A <a class="el" href="PathProfileInfo_8cpp.html#add64b5c8b8c45c8dabeaf9d771cc1534">file</a> containing list of symbol names to preserve"))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classllvm_1_1cl_1_1list.html">cl::list</a>< std::string > </td><td class="memItemRight" valign="bottom"><a class="el" href="Internalize_8cpp.html#a99f445705aebb9eb31f74b6104954655">APIList</a> ("internalize-public-api-list", cl::value_desc("list"), cl::desc("A list of symbol names to preserve"), cl::CommaSeparated)</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="Internalize.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_TYPE   "internalize"</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="Internalize_8cpp_source.html#l00016">16</a> of file <a class="el" href="Internalize_8cpp_source.html">Internalize.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a2c4ff9b20bc28f048ad17dae9c91b5ae"></a><!-- doxytag: member="Internalize.cpp::INITIALIZE_PASS" ref="a2c4ff9b20bc28f048ad17dae9c91b5ae" args="(InternalizePass,"internalize","Internalize Global Symbols", false, false) InternalizePass" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">INITIALIZE_PASS </td>
+          <td>(</td>
+          <td class="paramtype">InternalizePass </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"internalize" </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Internalize Global Symbols" </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="Internalize_8cpp_source.html#l00063">63</a> of file <a class="el" href="Internalize_8cpp_source.html">Internalize.cpp</a>.</p>
+
+<p>References <a class="el" href="Internalize_8cpp.html#ae00185e9d2a09ceb4f02fe4a1f8ec2dd">APIFile</a>, <a class="el" href="Internalize_8cpp.html#a99f445705aebb9eb31f74b6104954655">APIList</a>, <a class="el" href="PassRegistry_8cpp_source.html#l00034">llvm::PassRegistry::getPassRegistry()</a>, and <a class="el" href="namespacellvm.html#a332ff40e923259bb54c70d0d8a74c451">llvm::initializeInternalizePassPass()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae63244022eba9159d32f3ea0c575fbf7"></a><!-- doxytag: member="Internalize.cpp::STATISTIC" ref="ae63244022eba9159d32f3ea0c575fbf7" args="(NumAliases,"Number of aliases internalized")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumAliases </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of aliases internalized" </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="a424bc714d38b4b4ccfe53715922a7d7d"></a><!-- doxytag: member="Internalize.cpp::STATISTIC" ref="a424bc714d38b4b4ccfe53715922a7d7d" args="(NumFunctions,"Number of functions internalized")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumFunctions </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of <a class="el" href="LoopExtractor_8cpp.html#ac6229e61e0214888a5ad66ac60cb36ec">functions</a> internalized" </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="a79b0bdce7a9f3f244735d1a930a5b471"></a><!-- doxytag: member="Internalize.cpp::STATISTIC" ref="a79b0bdce7a9f3f244735d1a930a5b471" args="(NumGlobals,"Number of global vars internalized")" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">STATISTIC </td>
+          <td>(</td>
+          <td class="paramtype">NumGlobals </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">"Number of global vars internalized" </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ae00185e9d2a09ceb4f02fe4a1f8ec2dd"></a><!-- doxytag: member="Internalize.cpp::APIFile" ref="ae00185e9d2a09ceb4f02fe4a1f8ec2dd" args="("internalize-public-api-file", cl::value_desc("filename"), cl::desc("A file containing list of symbol names to preserve"))" -->
+<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><std::string> <a class="el" href="Internalize_8cpp.html#ae00185e9d2a09ceb4f02fe4a1f8ec2dd">APIFile</a>("internalize-public-api-<a class="el" href="PathProfileInfo_8cpp.html#add64b5c8b8c45c8dabeaf9d771cc1534">file</a>", cl::value_desc("filename"), cl::desc("A <a class="el" href="PathProfileInfo_8cpp.html#add64b5c8b8c45c8dabeaf9d771cc1534">file</a> containing list of symbol names to preserve"))<code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="Internalize_8cpp_source.html#l00063">INITIALIZE_PASS()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a99f445705aebb9eb31f74b6104954655"></a><!-- doxytag: member="Internalize.cpp::APIList" ref="a99f445705aebb9eb31f74b6104954655" args="("internalize-public-api-list", cl::value_desc("list"), cl::desc("A list of symbol names to preserve"), cl::CommaSeparated)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classllvm_1_1cl_1_1list.html">cl::list</a><std::string> <a class="el" href="Internalize_8cpp.html#a99f445705aebb9eb31f74b6104954655">APIList</a>("internalize-public-api-list", cl::value_desc("list"), cl::desc("A list of symbol names to preserve"), cl::CommaSeparated)<code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="Internalize_8cpp_source.html#l00063">INITIALIZE_PASS()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/Internalize_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Internalize_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/Internalize_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,75 @@
+<!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: Interpreter.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_c92c51dc3debf4668a549c62f98ec4ab.html">ExecutionEngine</a>      </li>
+      <li class="navelem"><a class="el" href="dir_67e5f5b4ec08fa66f6c096161f4e9853.html">Interpreter</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interpreter.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "Interpreter.h"</code><br/>
+<code>#include "<a class="el" href="IntrinsicLowering_8h_source.html">llvm/CodeGen/IntrinsicLowering.h</a>"</code><br/>
+<code>#include "<a class="el" href="DerivedTypes_8h_source.html">llvm/DerivedTypes.h</a>"</code><br/>
+<code>#include "<a class="el" href="Module_8h_source.html">llvm/Module.h</a>"</code><br/>
+<code>#include <cstring></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for Interpreter.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="Interpreter_8cpp__incl.png" border="0" usemap="#Interpreter_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="Interpreter_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="group__LLVMCExecutionEngine.html#gacfb50cdd5f90d54ad40791117dfdc182">LLVMLinkInInterpreter</a> ()</td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:30 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/Interpreter_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Interpreter_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,38 @@
+<map id="G" name="G">
+<area shape="rect" href="$IntrinsicLowering_8h.html" title="llvm/CodeGen/IntrinsicLowering.h" alt="" coords="179,84,411,111"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="173,393,320,420"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="1433,84,1543,111"/>
+<area shape="rect" href="$Intrinsics_8h.html" title="llvm/Intrinsics.h" alt="" coords="463,393,583,420"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1856,471,2000,497"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="1613,548,1781,575"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="1716,625,1879,652"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="1507,703,1680,729"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="1279,625,1465,652"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="196,703,380,729"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="275,471,365,497"/>
+<area shape="rect" href="$Casting_8h.html" title="llvm/Support/Casting.h" alt="" coords="1323,548,1488,575"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="1505,161,1620,188"/>
+<area shape="rect" href="$GlobalVariable_8h.html" title="llvm/GlobalVariable.h" alt="" coords="1169,161,1324,188"/>
+<area shape="rect" href="$GlobalAlias_8h.html" title="llvm/GlobalAlias.h" alt="" coords="1348,161,1481,188"/>
+<area shape="rect" href="$Metadata_8h.html" title="llvm/Metadata.h" alt="" coords="1817,316,1940,343"/>
+<area shape="rect" href="$OwningPtr_8h.html" title="llvm/ADT/OwningPtr.h" alt="" coords="2089,548,2244,575"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="1345,239,1484,265"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="1559,239,1695,265"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="896,239,1027,265"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="1612,316,1740,343"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="1613,393,1739,420"/>
+<area shape="rect" href="$Constant_8h.html" title="llvm/Constant.h" alt="" coords="1356,316,1476,343"/>
+<area shape="rect" href="$User_8h.html" title="llvm/User.h" alt="" coords="1285,393,1376,420"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="803,471,1008,497"/>
+<area shape="rect" href="$Value_8h.html" title="llvm/Value.h" alt="" coords="1733,471,1832,497"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1011,548,1160,575"/>
+<area shape="rect" href="$Use_8h.html" title="llvm/Use.h" alt="" coords="1953,625,2041,652"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="1201,316,1332,343"/>
+<area shape="rect" href="$SymbolTableListTraits_8h.html" title="llvm/SymbolTableListTraits.h" alt="" coords="929,316,1127,343"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="1184,548,1299,575"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="779,393,904,420"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="1437,393,1589,420"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="1285,471,1475,497"/>
+<area shape="rect" href="$OperandTraits_8h.html" title="llvm/OperandTraits.h" alt="" coords="1119,239,1271,265"/>
+<area shape="rect" href="$FoldingSet_8h.html" title="llvm/ADT/FoldingSet.h" alt="" coords="1499,471,1659,497"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/IntervalIterator_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntervalIterator_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntervalIterator_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/IntervalMap_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,151 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="IntervalPartition.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/Analysis/IntervalIterator.h",height=0.2,width=0.4,color="black",URL="$IntervalIterator_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/Analysis/IntervalPartition.h",height=0.2,width=0.4,color="black",URL="$IntervalPartition_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Analysis/Interval.h",height=0.2,width=0.4,color="black",URL="$Interval_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/ADT/GraphTraits.h",height=0.2,width=0.4,color="black",URL="$GraphTraits_8h.html"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_8h.html"];
+  Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node7 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="black",URL="$PassSupport_8h.html"];
+  Node10 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/PassRegistry.h",height=0.2,width=0.4,color="black",URL="$PassRegistry_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="red",URL="$StringRef_8h.html"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="llvm/InitializePasses.h",height=0.2,width=0.4,color="black",URL="$InitializePasses_8h.html"];
+  Node10 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/Support/Atomic.h",height=0.2,width=0.4,color="black",URL="$Atomic_8h.html"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node17 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node17 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/Support/Valgrind.h",height=0.2,width=0.4,color="red",URL="$Valgrind_8h.html"];
+  Node21 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="black",URL="$PassAnalysisSupport_8h.html"];
+  Node22 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node23 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node23 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node22 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="map",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Function.h",height=0.2,width=0.4,color="black",URL="$Function_8h.html"];
+  Node27 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/GlobalValue.h",height=0.2,width=0.4,color="black",URL="$GlobalValue_8h.html"];
+  Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/Constant.h",height=0.2,width=0.4,color="black",URL="$Constant_8h.html"];
+  Node29 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/User.h",height=0.2,width=0.4,color="black",URL="$User_8h.html"];
+  Node30 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node31 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/Value.h",height=0.2,width=0.4,color="red",URL="$Value_8h.html"];
+  Node32 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/CallingConv.h",height=0.2,width=0.4,color="black",URL="$CallingConv_8h.html"];
+  Node27 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="llvm/BasicBlock.h",height=0.2,width=0.4,color="black",URL="$BasicBlock_8h.html"];
+  Node34 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/Instruction.h",height=0.2,width=0.4,color="black",URL="$Instruction_8h.html"];
+  Node35 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/ADT/ilist_node.h",height=0.2,width=0.4,color="black",URL="$ilist__node_8h.html"];
+  Node35 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Support/DebugLoc.h",height=0.2,width=0.4,color="black",URL="$DebugLoc_8h.html"];
+  Node35 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Instruction.def",height=0.2,width=0.4,color="grey75"];
+  Node34 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/SymbolTableListTraits.h",height=0.2,width=0.4,color="black",URL="$SymbolTableListTraits_8h.html"];
+  Node39 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/ADT/ilist.h",height=0.2,width=0.4,color="black",URL="$ilist_8h.html"];
+  Node40 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="black",URL="$Twine_8h.html"];
+  Node41 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Argument.h",height=0.2,width=0.4,color="black",URL="$Argument_8h.html"];
+  Node42 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/Attributes.h",height=0.2,width=0.4,color="black",URL="$Attributes_8h.html"];
+  Node43 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="red",URL="$MathExtras_8h.html"];
+  Node43 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="black",URL="$ArrayRef_8h.html"];
+  Node45 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/CFG.h",height=0.2,width=0.4,color="black",URL="$CFG_8h.html"];
+  Node46 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/InstrTypes.h",height=0.2,width=0.4,color="black",URL="$InstrTypes_8h.html"];
+  Node47 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/OperandTraits.h",height=0.2,width=0.4,color="black",URL="$OperandTraits_8h.html"];
+  Node48 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="red",URL="$DerivedTypes_8h.html"];
+  Node49 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="set",height=0.2,width=0.4,color="grey75"];
+  Node2 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8h__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8h__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8h__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/IntervalPartition_8h__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,90 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="IntervalPartition.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="llvm/Analysis/Interval.h",height=0.2,width=0.4,color="black",URL="$Interval_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/ADT/GraphTraits.h",height=0.2,width=0.4,color="black",URL="$GraphTraits_8h.html"];
+  Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/Pass.h",height=0.2,width=0.4,color="black",URL="$Pass_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="string",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="llvm/PassSupport.h",height=0.2,width=0.4,color="black",URL="$PassSupport_8h.html"];
+  Node8 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/PassRegistry.h",height=0.2,width=0.4,color="black",URL="$PassRegistry_8h.html"];
+  Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="black",URL="$type__traits_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node12 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node10 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/InitializePasses.h",height=0.2,width=0.4,color="black",URL="$InitializePasses_8h.html"];
+  Node8 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/Support/Atomic.h",height=0.2,width=0.4,color="black",URL="$Atomic_8h.html"];
+  Node24 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/Support/Valgrind.h",height=0.2,width=0.4,color="black",URL="$Valgrind_8h.html"];
+  Node25 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/Config/llvm-config.h",height=0.2,width=0.4,color="black",URL="$llvm-config_8h.html"];
+  Node25 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="stddef.h",height=0.2,width=0.4,color="grey75"];
+  Node8 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/PassAnalysisSupport.h",height=0.2,width=0.4,color="black",URL="$PassAnalysisSupport_8h.html"];
+  Node28 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="black",URL="$SmallVector_8h.html"];
+  Node29 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="black",URL="$AlignOf_8h.html"];
+  Node30 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="cstdlib",height=0.2,width=0.4,color="grey75"];
+  Node29 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node29 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="memory",height=0.2,width=0.4,color="grey75"];
+  Node28 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="map",height=0.2,width=0.4,color="grey75"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,37 @@
+<map id="G" name="G">
+<area shape="rect" href="$Interval_8h.html" title="llvm/Analysis/Interval.h" alt="" coords="1233,84,1399,111"/>
+<area shape="rect" href="$BasicBlock_8h.html" title="llvm/BasicBlock.h" alt="" coords="909,239,1040,265"/>
+<area shape="rect" href="$CFG_8h.html" title="llvm/Support/CFG.h" alt="" coords="1013,84,1157,111"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="265,471,465,497"/>
+<area shape="rect" href="$GraphTraits_8h.html" title="llvm/ADT/GraphTraits.h" alt="" coords="1233,161,1399,188"/>
+<area shape="rect" href="$Instruction_8h.html" title="llvm/Instruction.h" alt="" coords="881,316,1012,343"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="107,703,291,729"/>
+<area shape="rect" href="$SymbolTableListTraits_8h.html" title="llvm/SymbolTableListTraits.h" alt="" coords="1367,316,1564,343"/>
+<area shape="rect" href="$ilist_8h.html" title="llvm/ADT/ilist.h" alt="" coords="1335,548,1449,575"/>
+<area shape="rect" href="$Twine_8h.html" title="llvm/ADT/Twine.h" alt="" coords="705,393,831,420"/>
+<area shape="rect" href="$User_8h.html" title="llvm/User.h" alt="" coords="1436,393,1527,420"/>
+<area shape="rect" href="$ilist__node_8h.html" title="llvm/ADT/ilist_node.h" alt="" coords="1060,393,1212,420"/>
+<area shape="rect" href="$DebugLoc_8h.html" title="llvm/Support/DebugLoc.h" alt="" coords="855,393,1036,420"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="905,471,1111,497"/>
+<area shape="rect" href="$Value_8h.html" title="llvm/Value.h" alt="" coords="1335,471,1433,497"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="1727,625,1900,652"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="679,548,828,575"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="625,625,812,652"/>
+<area shape="rect" href="$Use_8h.html" title="llvm/Use.h" alt="" coords="1473,548,1561,575"/>
+<area shape="rect" href="$Casting_8h.html" title="llvm/Support/Casting.h" alt="" coords="852,548,1017,575"/>
+<area shape="rect" href="$PointerIntPair_8h.html" title="llvm/ADT/PointerIntPair.h" alt="" coords="1527,625,1703,652"/>
+<area shape="rect" href="$Function_8h.html" title="llvm/Function.h" alt="" coords="1095,161,1209,188"/>
+<area shape="rect" href="$InstrTypes_8h.html" title="llvm/InstrTypes.h" alt="" coords="737,239,863,265"/>
+<area shape="rect" href="$GlobalValue_8h.html" title="llvm/GlobalValue.h" alt="" coords="1649,239,1788,265"/>
+<area shape="rect" href="$CallingConv_8h.html" title="llvm/CallingConv.h" alt="" coords="1140,239,1276,265"/>
+<area shape="rect" href="$Argument_8h.html" title="llvm/Argument.h" alt="" coords="1039,316,1167,343"/>
+<area shape="rect" href="$Attributes_8h.html" title="llvm/Attributes.h" alt="" coords="1236,393,1361,420"/>
+<area shape="rect" href="$Constant_8h.html" title="llvm/Constant.h" alt="" coords="1724,316,1844,343"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="540,471,729,497"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="1508,471,1652,497"/>
+<area shape="rect" href="$SwapByteOrder_8h.html" title="llvm/Support/SwapByteOrder.h" alt="" coords="287,548,503,575"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="1092,548,1260,575"/>
+<area shape="rect" href="$OperandTraits_8h.html" title="llvm/OperandTraits.h" alt="" coords="1191,316,1343,343"/>
+<area shape="rect" href="$DerivedTypes_8h.html" title="llvm/DerivedTypes.h" alt="" coords="319,393,465,420"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="100,471,191,497"/>
+</map>

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

Added: www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/Interval_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream





More information about the llvm-commits mailing list