[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