<div class='function-title'><pre>/Users/harlanhaskins/Documents/Swift/swift/llvm/include/llvm/Analysis/AliasAnalysis.h:</pre></div><!doctype html>
<html>
  <head>
    <meta name='viewport'content='width=device-width,initial-scale=1'>
    <style>
.red {
  background-color: #FFD0D0;
}
.cyan {
  background-color: cyan;
}
.black {
  background-color: black;
  color: white;
}
.green {
  background-color: #98FFA6;
  color: white;
}
.magenta {
  background-color: #F998FF;
  color: white;
}
tr:nth-child(odd) {
  background-color: #fafafa;
}
tr:nth-child(even) {
  background-color: #f0f0f0;
}
pre {
  margin-top: 0px !important;
  margin-bottom: 0px !important;
}
.function-title {
  margin-top: 15px;
  margin-bottom: 5px;
}
.centered {
  margin-left: auto;
  margin-right: auto;
}
.expansion-view {
  border: 2px solid #d8d8d8;
  padding-left: 10px;
  padding-right: 10px;
  padding-bottom: 10px;
  margin-bottom: 5px;
}
table {
  border: 2px solid #dbdbdb;
  border-collapse: collapse;
}
.numeric {
  text-align: right;
}
.tooltips {
  position: relative;
  display: inline;
  background-color: #fffee6;
  text-decoration: none;
}
.tooltips span {
  position: absolute;
  width:140px;
  color: #FFFFFF;
  background: #000000;
  height: 30px;
  line-height: 30px;
  text-align: center;
  visibility: hidden;
  border-radius: 6px;
}
.tooltips span:after {
  content: '';
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -8px;
  width: 0; height: 0;
  border-top: 8px solid #000000;
  border-right: 8px solid transparent;
  border-left: 8px solid transparent;
}
:hover.tooltips span {
  visibility: visible;
  opacity: 0.8;
  bottom: 30px;
  left: 50%;
  margin-left: -76px;
  z-index: 999;
}
th, td {
  vertical-align: top;
  padding: 2px 5px;
  border-collapse: collapse;
}    </style>
  </head>
  <body>
    <table class='centered'>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1</pre></td>
<td><pre>
//===- llvm/Analysis/AliasAnalysis.h - Alias Analysis Interface -*- C++ -*-===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>2</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>3</pre></td>
<td><pre>
//                     The LLVM Compiler Infrastructure</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>4</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>5</pre></td>
<td><pre>
// This file is distributed under the University of Illinois Open Source</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>6</pre></td>
<td><pre>
// License. See LICENSE.TXT for details.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>7</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>8</pre></td>
<td><pre>
//===----------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>9</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>10</pre></td>
<td><pre>
// This file defines the generic AliasAnalysis interface, which is used as the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>11</pre></td>
<td><pre>
// common interface used by all clients of alias analysis information, and</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>12</pre></td>
<td><pre>
// implemented by all alias analysis implementations.  Mod/Ref information is</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>13</pre></td>
<td><pre>
// also captured by this interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>14</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>15</pre></td>
<td><pre>
// Implementations of this interface must implement the various virtual methods,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>16</pre></td>
<td><pre>
// which automatically provides functionality for the entire suite of client</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>17</pre></td>
<td><pre>
// APIs.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>18</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>19</pre></td>
<td><pre>
// This API identifies memory regions with the MemoryLocation class. The pointer</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>20</pre></td>
<td><pre>
// component specifies the base memory address of the region. The Size specifies</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>21</pre></td>
<td><pre>
// the maximum size (in address units) of the memory region, or</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>22</pre></td>
<td><pre>
// MemoryLocation::UnknownSize if the size is not known. The TBAA tag</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>23</pre></td>
<td><pre>
// identifies the "type" of the memory reference; see the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>24</pre></td>
<td><pre>
// TypeBasedAliasAnalysis class for details.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>25</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>26</pre></td>
<td><pre>
// Some non-obvious details include:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>27</pre></td>
<td><pre>
//  - Pointers that point to two completely different objects in memory never</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>28</pre></td>
<td><pre>
//    alias, regardless of the value of the Size component.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>29</pre></td>
<td><pre>
//  - NoAlias doesn't imply inequal pointers. The most obvious example of this</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>30</pre></td>
<td><pre>
//    is two pointers to constant memory. Even if they are equal, constant</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>31</pre></td>
<td><pre>
//    memory is never stored to, so there will never be any dependencies.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>32</pre></td>
<td><pre>
//    In this and other situations, the pointers may be both NoAlias and</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>33</pre></td>
<td><pre>
//    MustAlias at the same time. The current API can only return one result,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>34</pre></td>
<td><pre>
//    though this is rarely a problem in practice.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>35</pre></td>
<td><pre>
//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>36</pre></td>
<td><pre>
//===----------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>37</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>38</pre></td>
<td><pre>
#ifndef LLVM_ANALYSIS_ALIASANALYSIS_H</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>39</pre></td>
<td><pre>
#define LLVM_ANALYSIS_ALIASANALYSIS_H</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>40</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>41</pre></td>
<td><pre>
#include "llvm/ADT/DenseMap.h"</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>42</pre></td>
<td><pre>
#include "llvm/IR/CallSite.h"</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>43</pre></td>
<td><pre>
#include "llvm/IR/Metadata.h"</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>44</pre></td>
<td><pre>
#include "llvm/IR/PassManager.h"</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>45</pre></td>
<td><pre>
#include "llvm/Analysis/MemoryLocation.h"</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>46</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>47</pre></td>
<td><pre>
namespace llvm {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>48</pre></td>
<td><pre>
class BasicAAResult;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>49</pre></td>
<td><pre>
class LoadInst;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>50</pre></td>
<td><pre>
class StoreInst;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>51</pre></td>
<td><pre>
class VAArgInst;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>52</pre></td>
<td><pre>
class DataLayout;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>53</pre></td>
<td><pre>
class TargetLibraryInfo;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>54</pre></td>
<td><pre>
class Pass;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>55</pre></td>
<td><pre>
class AnalysisUsage;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>56</pre></td>
<td><pre>
class MemTransferInst;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>57</pre></td>
<td><pre>
class MemIntrinsic;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>58</pre></td>
<td><pre>
class DominatorTree;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>59</pre></td>
<td><pre>
class OrderedBasicBlock;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>60</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>61</pre></td>
<td><pre>
/// The possible results of an alias query.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>62</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>63</pre></td>
<td><pre>
/// These results are always computed between two MemoryLocation objects as</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>64</pre></td>
<td><pre>
/// a query to some alias analysis.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>65</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>66</pre></td>
<td><pre>
/// Note that these are unscoped enumerations because we would like to support</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>67</pre></td>
<td><pre>
/// implicitly testing a result for the existence of any possible aliasing with</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>68</pre></td>
<td><pre>
/// a conversion to bool, but an "enum class" doesn't support this. The</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>69</pre></td>
<td><pre>
/// canonical names from the literature are suffixed and unique anyways, and so</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>70</pre></td>
<td><pre>
/// they serve as global constants in LLVM for these results.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>71</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>72</pre></td>
<td><pre>
/// See docs/AliasAnalysis.html for more information on the specific meanings</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>73</pre></td>
<td><pre>
/// of these values.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>74</pre></td>
<td><pre>
enum AliasResult {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>75</pre></td>
<td><pre>
  /// The two locations do not alias at all.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>76</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>77</pre></td>
<td><pre>
  /// This value is arranged to convert to false, while all other values</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>78</pre></td>
<td><pre>
  /// convert to true. This allows a boolean context to convert the result to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>79</pre></td>
<td><pre>
  /// a binary flag indicating whether there is the possibility of aliasing.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>80</pre></td>
<td><pre>
  NoAlias = 0,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>81</pre></td>
<td><pre>
  /// The two locations may or may not alias. This is the least precise result.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>82</pre></td>
<td><pre>
  MayAlias,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>83</pre></td>
<td><pre>
  /// The two locations alias, but only due to a partial overlap.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>84</pre></td>
<td><pre>
  PartialAlias,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>85</pre></td>
<td><pre>
  /// The two locations precisely alias each other.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>86</pre></td>
<td><pre>
  MustAlias,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>87</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>88</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>89</pre></td>
<td><pre>
/// Flags indicating whether a memory access modifies or references memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>90</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>91</pre></td>
<td><pre>
/// This is no access at all, a modification, a reference, or both</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>92</pre></td>
<td><pre>
/// a modification and a reference. These are specifically structured such that</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>93</pre></td>
<td><pre>
/// they form a two bit matrix and bit-tests for 'mod' or 'ref' work with any</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>94</pre></td>
<td><pre>
/// of the possible values.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>95</pre></td>
<td><pre>
enum ModRefInfo {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>96</pre></td>
<td><pre>
  /// The access neither references nor modifies the value stored in memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>97</pre></td>
<td><pre>
  MRI_NoModRef = 0,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>98</pre></td>
<td><pre>
  /// The access references the value stored in memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>99</pre></td>
<td><pre>
  MRI_Ref = 1,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>100</pre></td>
<td><pre>
  /// The access modifies the value stored in memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>101</pre></td>
<td><pre>
  MRI_Mod = 2,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>102</pre></td>
<td><pre>
  /// The access both references and modifies the value stored in memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>103</pre></td>
<td><pre>
  MRI_ModRef = MRI_Ref | MRI_Mod</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>104</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>105</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>106</pre></td>
<td><pre>
/// The locations at which a function might access memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>107</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>108</pre></td>
<td><pre>
/// These are primarily used in conjunction with the \c AccessKind bits to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>109</pre></td>
<td><pre>
/// describe both the nature of access and the locations of access for a</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>110</pre></td>
<td><pre>
/// function call.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>111</pre></td>
<td><pre>
enum FunctionModRefLocation {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>112</pre></td>
<td><pre>
  /// Base case is no access to memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>113</pre></td>
<td><pre>
  FMRL_Nowhere = 0,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>114</pre></td>
<td><pre>
  /// Access to memory via argument pointers.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>115</pre></td>
<td><pre>
  FMRL_ArgumentPointees = 4,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>116</pre></td>
<td><pre>
  /// Access to any memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>117</pre></td>
<td><pre>
  FMRL_Anywhere = 8 | FMRL_ArgumentPointees</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>118</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>119</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>120</pre></td>
<td><pre>
/// Summary of how a function affects memory in the program.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>121</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>122</pre></td>
<td><pre>
/// Loads from constant globals are not considered memory accesses for this</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>123</pre></td>
<td><pre>
/// interface. Also, functions may freely modify stack space local to their</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>124</pre></td>
<td><pre>
/// invocation without having to report it through these interfaces.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>125</pre></td>
<td><pre>
enum FunctionModRefBehavior {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>126</pre></td>
<td><pre>
  /// This function does not perform any non-local loads or stores to memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>127</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>128</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'const' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>129</pre></td>
<td><pre>
  /// This property corresponds to the LLVM IR 'readnone' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>130</pre></td>
<td><pre>
  /// This property corresponds to the IntrNoMem LLVM intrinsic flag.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>131</pre></td>
<td><pre>
  FMRB_DoesNotAccessMemory = FMRL_Nowhere | MRI_NoModRef,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>132</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>133</pre></td>
<td><pre>
  /// The only memory references in this function (if it has any) are</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>134</pre></td>
<td><pre>
  /// non-volatile loads from objects pointed to by its pointer-typed</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>135</pre></td>
<td><pre>
  /// arguments, with arbitrary offsets.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>136</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>137</pre></td>
<td><pre>
  /// This property corresponds to the IntrReadArgMem LLVM intrinsic flag.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>138</pre></td>
<td><pre>
  FMRB_OnlyReadsArgumentPointees = FMRL_ArgumentPointees | MRI_Ref,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>139</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>140</pre></td>
<td><pre>
  /// The only memory references in this function (if it has any) are</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>141</pre></td>
<td><pre>
  /// non-volatile loads and stores from objects pointed to by its</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>142</pre></td>
<td><pre>
  /// pointer-typed arguments, with arbitrary offsets.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>143</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>144</pre></td>
<td><pre>
  /// This property corresponds to the IntrReadWriteArgMem LLVM intrinsic flag.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>145</pre></td>
<td><pre>
  FMRB_OnlyAccessesArgumentPointees = FMRL_ArgumentPointees | MRI_ModRef,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>146</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>147</pre></td>
<td><pre>
  /// This function does not perform any non-local stores or volatile loads,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>148</pre></td>
<td><pre>
  /// but may read from any memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>149</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>150</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'pure' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>151</pre></td>
<td><pre>
  /// This property corresponds to the LLVM IR 'readonly' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>152</pre></td>
<td><pre>
  /// This property corresponds to the IntrReadMem LLVM intrinsic flag.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>153</pre></td>
<td><pre>
  FMRB_OnlyReadsMemory = FMRL_Anywhere | MRI_Ref,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>154</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>155</pre></td>
<td><pre>
  /// This indicates that the function could not be classified into one of the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>156</pre></td>
<td><pre>
  /// behaviors above.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>157</pre></td>
<td><pre>
  FMRB_UnknownModRefBehavior = FMRL_Anywhere | MRI_ModRef</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>158</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>159</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>160</pre></td>
<td><pre>
class AAResults {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>161</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>162</pre></td>
<td><pre>
  // Make these results default constructable and movable. We have to spell</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>163</pre></td>
<td><pre>
  // these out because MSVC won't synthesize them.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>164</pre></td>
<td><pre>
  AAResults() <span class='red'>{}</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>165</pre></td>
<td><pre>
  AAResults(AAResults &&Arg);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>166</pre></td>
<td><pre>
  AAResults &operator=(AAResults &&Arg);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>167</pre></td>
<td><pre>
  ~AAResults();</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>168</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>169</pre></td>
<td><pre>
  /// Register a specific AA result.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>170</pre></td>
<td><pre>
  template <typename AAResultT> void addAAResult(AAResultT &AAResult) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>171</pre></td>
<td><pre>
    // FIXME: We should use a much lighter weight system than the usual</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>172</pre></td>
<td><pre>
    // polymorphic pattern because we don't own AAResult. It should</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>173</pre></td>
<td><pre>
    // ideally involve two pointers and no separate allocation.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>174</pre></td>
<td><pre>
    AAs.emplace_back(new Model<AAResultT>(AAResult, *this));</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>175</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>176</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>177</pre></td>
<td><pre>
  //===--------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>178</pre></td>
<td><pre>
  /// \name Alias Queries</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>179</pre></td>
<td><pre>
  /// @{</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>180</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>181</pre></td>
<td><pre>
  /// The main low level interface to the alias analysis implementation.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>182</pre></td>
<td><pre>
  /// Returns an AliasResult indicating whether the two pointers are aliased to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>183</pre></td>
<td><pre>
  /// each other. This is the interface that must be implemented by specific</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>184</pre></td>
<td><pre>
  /// alias analysis implementations.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>185</pre></td>
<td><pre>
  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>186</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>187</pre></td>
<td><pre>
  /// A convenience wrapper around the primary \c alias interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>188</pre></td>
<td><pre>
  AliasResult alias(const Value *V1, uint64_t V1Size, const Value *V2,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>189</pre></td>
<td><pre>
                    uint64_t V2Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>190</pre></td>
<td><pre>
<span class='red'>    return alias(MemoryLocation(V1, V1Size), MemoryLocation(V2, V2Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>191</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>192</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>193</pre></td>
<td><pre>
  /// A convenience wrapper around the primary \c alias interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>194</pre></td>
<td><pre>
  AliasResult alias(const Value *V1, const Value *V2) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>195</pre></td>
<td><pre>
<span class='red'>    return alias(V1, MemoryLocation::UnknownSize, V2,</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>196</pre></td>
<td><pre>
<span class='red'>                 MemoryLocation::UnknownSize);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>197</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>198</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>199</pre></td>
<td><pre>
  /// A trivial helper function to check to see if the specified pointers are</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>200</pre></td>
<td><pre>
  /// no-alias.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>201</pre></td>
<td><pre>
  bool isNoAlias(const MemoryLocation &LocA, const MemoryLocation &LocB) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>202</pre></td>
<td><pre>
<span class='red'>    return alias(LocA, LocB) == NoAlias;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>203</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>204</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>205</pre></td>
<td><pre>
  /// A convenience wrapper around the \c isNoAlias helper interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>206</pre></td>
<td><pre>
  bool isNoAlias(const Value *V1, uint64_t V1Size, const Value *V2,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>207</pre></td>
<td><pre>
                 uint64_t V2Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>208</pre></td>
<td><pre>
<span class='red'>    return isNoAlias(MemoryLocation(V1, V1Size), MemoryLocation(V2, V2Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>209</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>210</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>211</pre></td>
<td><pre>
  /// A convenience wrapper around the \c isNoAlias helper interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>212</pre></td>
<td><pre>
  bool isNoAlias(const Value *V1, const Value *V2) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>213</pre></td>
<td><pre>
<span class='red'>    return isNoAlias(MemoryLocation(V1), MemoryLocation(V2));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>214</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>215</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>216</pre></td>
<td><pre>
  /// A trivial helper function to check to see if the specified pointers are</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>217</pre></td>
<td><pre>
  /// must-alias.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>218</pre></td>
<td><pre>
  bool isMustAlias(const MemoryLocation &LocA, const MemoryLocation &LocB) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>219</pre></td>
<td><pre>
<span class='red'>    return alias(LocA, LocB) == MustAlias;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>220</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>221</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>222</pre></td>
<td><pre>
  /// A convenience wrapper around the \c isMustAlias helper interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>223</pre></td>
<td><pre>
  bool isMustAlias(const Value *V1, const Value *V2) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>224</pre></td>
<td><pre>
<span class='red'>    return alias(V1, 1, V2, 1) == MustAlias;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>225</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>226</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>227</pre></td>
<td><pre>
  /// Checks whether the given location points to constant memory, or if</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>228</pre></td>
<td><pre>
  /// \p OrLocal is true whether it points to a local alloca.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>229</pre></td>
<td><pre>
  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal = false);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>230</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>231</pre></td>
<td><pre>
  /// A convenience wrapper around the primary \c pointsToConstantMemory</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>232</pre></td>
<td><pre>
  /// interface.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>233</pre></td>
<td><pre>
  bool pointsToConstantMemory(const Value *P, bool OrLocal = false) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>234</pre></td>
<td><pre>
<span class='red'>    return pointsToConstantMemory(MemoryLocation(P), OrLocal);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>235</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>236</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>237</pre></td>
<td><pre>
  /// @}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>238</pre></td>
<td><pre>
  //===--------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>239</pre></td>
<td><pre>
  /// \name Simple mod/ref information</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>240</pre></td>
<td><pre>
  /// @{</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>241</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>242</pre></td>
<td><pre>
  /// Get the ModRef info associated with a pointer argument of a callsite. The</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>243</pre></td>
<td><pre>
  /// result's bits are set to indicate the allowed aliasing ModRef kinds. Note</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>244</pre></td>
<td><pre>
  /// that these bits do not necessarily account for the overall behavior of</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>245</pre></td>
<td><pre>
  /// the function, but rather only provide additional per-argument</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>246</pre></td>
<td><pre>
  /// information.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>247</pre></td>
<td><pre>
  ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>248</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>249</pre></td>
<td><pre>
  /// Return the behavior of the given call site.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>250</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>251</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>252</pre></td>
<td><pre>
  /// Return the behavior when calling the given function.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>253</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(const Function *F);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>254</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>255</pre></td>
<td><pre>
  /// Checks if the specified call is known to never read or write memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>256</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>257</pre></td>
<td><pre>
  /// Note that if the call only reads from known-constant memory, it is also</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>258</pre></td>
<td><pre>
  /// legal to return true. Also, calls that unwind the stack are legal for</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>259</pre></td>
<td><pre>
  /// this predicate.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>260</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>261</pre></td>
<td><pre>
  /// Many optimizations (such as CSE and LICM) can be performed on such calls</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>262</pre></td>
<td><pre>
  /// without worrying about aliasing properties, and many calls have this</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>263</pre></td>
<td><pre>
  /// property (e.g. calls to 'sin' and 'cos').</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>264</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>265</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'const' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>266</pre></td>
<td><pre>
  bool doesNotAccessMemory(ImmutableCallSite CS) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>267</pre></td>
<td><pre>
<span class='red'>    return getModRefBehavior(CS) == FMRB_DoesNotAccessMemory;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>268</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>269</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>270</pre></td>
<td><pre>
  /// Checks if the specified function is known to never read or write memory.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>271</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>272</pre></td>
<td><pre>
  /// Note that if the function only reads from known-constant memory, it is</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>273</pre></td>
<td><pre>
  /// also legal to return true. Also, function that unwind the stack are legal</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>274</pre></td>
<td><pre>
  /// for this predicate.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>275</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>276</pre></td>
<td><pre>
  /// Many optimizations (such as CSE and LICM) can be performed on such calls</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>277</pre></td>
<td><pre>
  /// to such functions without worrying about aliasing properties, and many</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>278</pre></td>
<td><pre>
  /// functions have this property (e.g. 'sin' and 'cos').</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>279</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>280</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'const' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>281</pre></td>
<td><pre>
  bool doesNotAccessMemory(const Function *F) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>282</pre></td>
<td><pre>
<span class='red'>    return getModRefBehavior(F) == FMRB_DoesNotAccessMemory;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>283</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>284</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>285</pre></td>
<td><pre>
  /// Checks if the specified call is known to only read from non-volatile</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>286</pre></td>
<td><pre>
  /// memory (or not access memory at all).</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>287</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>288</pre></td>
<td><pre>
  /// Calls that unwind the stack are legal for this predicate.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>289</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>290</pre></td>
<td><pre>
  /// This property allows many common optimizations to be performed in the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>291</pre></td>
<td><pre>
  /// absence of interfering store instructions, such as CSE of strlen calls.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>292</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>293</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'pure' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>294</pre></td>
<td><pre>
  bool onlyReadsMemory(ImmutableCallSite CS) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>295</pre></td>
<td><pre>
<span class='red'>    return onlyReadsMemory(getModRefBehavior(CS));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>296</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>297</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>298</pre></td>
<td><pre>
  /// Checks if the specified function is known to only read from non-volatile</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>299</pre></td>
<td><pre>
  /// memory (or not access memory at all).</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>300</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>301</pre></td>
<td><pre>
  /// Functions that unwind the stack are legal for this predicate.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>302</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>303</pre></td>
<td><pre>
  /// This property allows many common optimizations to be performed in the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>304</pre></td>
<td><pre>
  /// absence of interfering store instructions, such as CSE of strlen calls.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>305</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>306</pre></td>
<td><pre>
  /// This property corresponds to the GCC 'pure' attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>307</pre></td>
<td><pre>
  bool onlyReadsMemory(const Function *F) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>308</pre></td>
<td><pre>
<span class='red'>    return onlyReadsMemory(getModRefBehavior(F));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>309</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>310</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>311</pre></td>
<td><pre>
  /// Checks if functions with the specified behavior are known to only read</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>312</pre></td>
<td><pre>
  /// from non-volatile memory (or not access memory at all).</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>428k</pre></td>
<td class='numeric'><pre>313</pre></td>
<td><pre>
  static bool onlyReadsMemory(FunctionModRefBehavior MRB) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>428k</pre></td>
<td class='numeric'><pre>314</pre></td>
<td><pre>
    return !(MRB & MRI_Mod);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>428k</pre></td>
<td class='numeric'><pre>315</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>316</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>317</pre></td>
<td><pre>
  /// Checks if functions with the specified behavior are known to read and</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>318</pre></td>
<td><pre>
  /// write at most from objects pointed to by their pointer-typed arguments</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>319</pre></td>
<td><pre>
  /// (with arbitrary offsets).</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>398k</pre></td>
<td class='numeric'><pre>320</pre></td>
<td><pre>
  static bool onlyAccessesArgPointees(FunctionModRefBehavior MRB) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>398k</pre></td>
<td class='numeric'><pre>321</pre></td>
<td><pre>
    return !(MRB & FMRL_Anywhere & ~FMRL_ArgumentPointees);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>398k</pre></td>
<td class='numeric'><pre>322</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>323</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>324</pre></td>
<td><pre>
  /// Checks if functions with the specified behavior are known to potentially</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>325</pre></td>
<td><pre>
  /// read or write from objects pointed to be their pointer-typed arguments</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>326</pre></td>
<td><pre>
  /// (with arbitrary offsets).</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>55.4k</pre></td>
<td class='numeric'><pre>327</pre></td>
<td><pre>
  static bool doesAccessArgPointees(FunctionModRefBehavior MRB) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>55.4k</pre></td>
<td class='numeric'><pre>328</pre></td>
<td><pre>
    return (MRB & MRI_ModRef) && (MRB & FMRL_ArgumentPointees);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>55.4k</pre></td>
<td class='numeric'><pre>329</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>330</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>331</pre></td>
<td><pre>
  /// getModRefInfo (for call sites) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>332</pre></td>
<td><pre>
  /// a particular call site modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>333</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>334</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>335</pre></td>
<td><pre>
  /// getModRefInfo (for call sites) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>336</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>337</pre></td>
<td><pre>
                           uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>338</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(CS, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>339</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>340</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>341</pre></td>
<td><pre>
  /// getModRefInfo (for calls) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>342</pre></td>
<td><pre>
  /// a particular call modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>343</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CallInst *C, const MemoryLocation &Loc) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>344</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(ImmutableCallSite(C), Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>345</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>346</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>347</pre></td>
<td><pre>
  /// getModRefInfo (for calls) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>348</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CallInst *C, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>349</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(C, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>350</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>351</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>352</pre></td>
<td><pre>
  /// getModRefInfo (for invokes) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>353</pre></td>
<td><pre>
  /// a particular invoke modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>354</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const InvokeInst *I, const MemoryLocation &Loc) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>355</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(ImmutableCallSite(I), Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>356</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>357</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>358</pre></td>
<td><pre>
  /// getModRefInfo (for invokes) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>359</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const InvokeInst *I, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>360</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>361</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>362</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>363</pre></td>
<td><pre>
  /// getModRefInfo (for loads) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>364</pre></td>
<td><pre>
  /// a particular load modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>365</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const LoadInst *L, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>366</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>367</pre></td>
<td><pre>
  /// getModRefInfo (for loads) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>368</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const LoadInst *L, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>369</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(L, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>370</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>371</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>372</pre></td>
<td><pre>
  /// getModRefInfo (for stores) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>373</pre></td>
<td><pre>
  /// a particular store modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>374</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const StoreInst *S, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>375</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>376</pre></td>
<td><pre>
  /// getModRefInfo (for stores) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>377</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const StoreInst *S, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>378</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(S, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>379</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>380</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>381</pre></td>
<td><pre>
  /// getModRefInfo (for fences) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>382</pre></td>
<td><pre>
  /// a particular store modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>383</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const FenceInst *S, const MemoryLocation &Loc) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>384</pre></td>
<td><pre>
<span class='red'>    // Conservatively correct.  (We could possibly be a bit smarter if</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>385</pre></td>
<td><pre>
<span class='red'>    // Loc is a alloca that doesn't escape.)</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>386</pre></td>
<td><pre>
<span class='red'>    return MRI_ModRef;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>387</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>388</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>389</pre></td>
<td><pre>
  /// getModRefInfo (for fences) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>390</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const FenceInst *S, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>391</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(S, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>392</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>393</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>394</pre></td>
<td><pre>
  /// getModRefInfo (for cmpxchges) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>395</pre></td>
<td><pre>
  /// a particular cmpxchg modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>396</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const AtomicCmpXchgInst *CX,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>397</pre></td>
<td><pre>
                           const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>398</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>399</pre></td>
<td><pre>
  /// getModRefInfo (for cmpxchges) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>400</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const AtomicCmpXchgInst *CX, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>401</pre></td>
<td><pre>
                           unsigned Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>402</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(CX, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>403</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>404</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>405</pre></td>
<td><pre>
  /// getModRefInfo (for atomicrmws) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>406</pre></td>
<td><pre>
  /// a particular atomicrmw modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>407</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const AtomicRMWInst *RMW, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>408</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>409</pre></td>
<td><pre>
  /// getModRefInfo (for atomicrmws) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>410</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const AtomicRMWInst *RMW, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>411</pre></td>
<td><pre>
                           unsigned Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>412</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(RMW, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>413</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>414</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>415</pre></td>
<td><pre>
  /// getModRefInfo (for va_args) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>416</pre></td>
<td><pre>
  /// a particular va_arg modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>417</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const VAArgInst *I, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>418</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>419</pre></td>
<td><pre>
  /// getModRefInfo (for va_args) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>420</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const VAArgInst *I, const Value *P, uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>421</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>422</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>423</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>424</pre></td>
<td><pre>
  /// getModRefInfo (for catchpads) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>425</pre></td>
<td><pre>
  /// a particular catchpad modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>426</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CatchPadInst *I, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>427</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>428</pre></td>
<td><pre>
  /// getModRefInfo (for catchpads) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>429</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CatchPadInst *I, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>430</pre></td>
<td><pre>
                           uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>431</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>432</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>433</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>434</pre></td>
<td><pre>
  /// getModRefInfo (for catchrets) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>435</pre></td>
<td><pre>
  /// a particular catchret modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>436</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CatchReturnInst *I, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>437</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>438</pre></td>
<td><pre>
  /// getModRefInfo (for catchrets) - A convenience wrapper.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>439</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const CatchReturnInst *I, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>440</pre></td>
<td><pre>
                           uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>441</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>442</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>443</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>444</pre></td>
<td><pre>
  /// Check whether or not an instruction may read or write memory (without</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>445</pre></td>
<td><pre>
  /// regard to a specific location).</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>446</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>447</pre></td>
<td><pre>
  /// For function calls, this delegates to the alias-analysis specific</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>448</pre></td>
<td><pre>
  /// call-site mod-ref behavior queries. Otherwise it delegates to the generic</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>449</pre></td>
<td><pre>
  /// mod ref information query without a location.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>450</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const Instruction *I) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>451</pre></td>
<td><pre>
<span class='red'>    if (auto CS = ImmutableCallSite(I)) {</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>452</pre></td>
<td><pre>
<span class='red'>      auto MRB = getModRefBehavior(CS);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>453</pre></td>
<td><pre>
<span class='red'>      if ((MRB & MRI_ModRef) == MRI_ModRef)</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>454</pre></td>
<td><pre>
<span class='red'>        return MRI_ModRef;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>455</pre></td>
<td><pre>
<span class='red'>      if (MRB & MRI_Ref)</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>456</pre></td>
<td><pre>
<span class='red'>        return MRI_Ref;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>457</pre></td>
<td><pre>
<span class='red'>      if (MRB & MRI_Mod)</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>458</pre></td>
<td><pre>
<span class='red'>        return MRI_Mod;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>459</pre></td>
<td><pre>
<span class='red'>      return MRI_NoModRef;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>460</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>461</pre></td>
<td><pre>
<span class='red'></span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>462</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation());</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>463</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>464</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>465</pre></td>
<td><pre>
  /// Check whether or not an instruction may read or write the specified</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>466</pre></td>
<td><pre>
  /// memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>467</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>468</pre></td>
<td><pre>
  /// An instruction that doesn't read or write memory may be trivially LICM'd</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>469</pre></td>
<td><pre>
  /// for example.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>470</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>471</pre></td>
<td><pre>
  /// This primarily delegates to specific helpers above.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>472</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const Instruction *I, const MemoryLocation &Loc) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>473</pre></td>
<td><pre>
<span class='red'>    switch (I->getOpcode()) {</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>474</pre></td>
<td><pre>
<span class='red'>    case Instruction::VAArg:  return getModRefInfo((const VAArgInst*)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>475</pre></td>
<td><pre>
<span class='red'>    case Instruction::Load:   return getModRefInfo((const LoadInst*)I,  Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>476</pre></td>
<td><pre>
<span class='red'>    case Instruction::Store:  return getModRefInfo((const StoreInst*)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>477</pre></td>
<td><pre>
<span class='red'>    case Instruction::Fence:  return getModRefInfo((const FenceInst*)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>478</pre></td>
<td><pre>
<span class='red'>    case Instruction::AtomicCmpXchg:</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>479</pre></td>
<td><pre>
<span class='red'>      return getModRefInfo((const AtomicCmpXchgInst*)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>480</pre></td>
<td><pre>
<span class='red'>    case Instruction::AtomicRMW:</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>481</pre></td>
<td><pre>
<span class='red'>      return getModRefInfo((const AtomicRMWInst*)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>482</pre></td>
<td><pre>
<span class='red'>    case Instruction::Call:   return getModRefInfo((const CallInst*)I,  Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>483</pre></td>
<td><pre>
<span class='red'>    case Instruction::Invoke: return getModRefInfo((const InvokeInst*)I,Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>484</pre></td>
<td><pre>
<span class='red'>    case Instruction::CatchPad:</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>485</pre></td>
<td><pre>
<span class='red'>      return getModRefInfo((const CatchPadInst *)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>486</pre></td>
<td><pre>
<span class='red'>    case Instruction::CatchRet:</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>487</pre></td>
<td><pre>
<span class='red'>      return getModRefInfo((const CatchReturnInst *)I, Loc);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>488</pre></td>
<td><pre>
<span class='red'>    default:</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>489</pre></td>
<td><pre>
<span class='red'>      return MRI_NoModRef;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>490</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>491</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>492</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>493</pre></td>
<td><pre>
  /// A convenience wrapper for constructing the memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>494</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(const Instruction *I, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>495</pre></td>
<td><pre>
                           uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>496</pre></td>
<td><pre>
<span class='red'>    return getModRefInfo(I, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>497</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>498</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>499</pre></td>
<td><pre>
  /// Return information about whether a call and an instruction may refer to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>500</pre></td>
<td><pre>
  /// the same memory locations.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>501</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(Instruction *I, ImmutableCallSite Call);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>502</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>503</pre></td>
<td><pre>
  /// Return information about whether two call sites may refer to the same set</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>504</pre></td>
<td><pre>
  /// of memory locations. See the AA documentation for details:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>505</pre></td>
<td><pre>
  ///   http://llvm.org/docs/AliasAnalysis.html#ModRefInfo</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>506</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS1, ImmutableCallSite CS2);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>507</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>508</pre></td>
<td><pre>
  /// \brief Return information about whether a particular call site modifies</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>509</pre></td>
<td><pre>
  /// or reads the specified memory location \p MemLoc before instruction \p I</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>510</pre></td>
<td><pre>
  /// in a BasicBlock. A ordered basic block \p OBB can be used to speed up</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>511</pre></td>
<td><pre>
  /// instruction ordering queries inside the BasicBlock containing \p I.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>512</pre></td>
<td><pre>
  ModRefInfo callCapturesBefore(const Instruction *I,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>513</pre></td>
<td><pre>
                                const MemoryLocation &MemLoc, DominatorTree *DT,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>514</pre></td>
<td><pre>
                                OrderedBasicBlock *OBB = nullptr);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>515</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>516</pre></td>
<td><pre>
  /// \brief A convenience wrapper to synthesize a memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>517</pre></td>
<td><pre>
  ModRefInfo callCapturesBefore(const Instruction *I, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>518</pre></td>
<td><pre>
                                uint64_t Size, DominatorTree *DT,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>519</pre></td>
<td><pre>
                                OrderedBasicBlock *OBB = nullptr) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>520</pre></td>
<td><pre>
<span class='red'>    return callCapturesBefore(I, MemoryLocation(P, Size), DT, OBB);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>521</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>522</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>523</pre></td>
<td><pre>
  /// @}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>524</pre></td>
<td><pre>
  //===--------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>525</pre></td>
<td><pre>
  /// \name Higher level methods for querying mod/ref information.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>526</pre></td>
<td><pre>
  /// @{</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>527</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>528</pre></td>
<td><pre>
  /// Check if it is possible for execution of the specified basic block to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>529</pre></td>
<td><pre>
  /// modify the location Loc.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>530</pre></td>
<td><pre>
  bool canBasicBlockModify(const BasicBlock &BB, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>531</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>532</pre></td>
<td><pre>
  /// A convenience wrapper synthesizing a memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>533</pre></td>
<td><pre>
  bool canBasicBlockModify(const BasicBlock &BB, const Value *P,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>534</pre></td>
<td><pre>
                           uint64_t Size) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>535</pre></td>
<td><pre>
<span class='red'>    return canBasicBlockModify(BB, MemoryLocation(P, Size));</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>536</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>537</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>538</pre></td>
<td><pre>
  /// Check if it is possible for the execution of the specified instructions</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>539</pre></td>
<td><pre>
  /// to mod\ref (according to the mode) the location Loc.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>540</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>541</pre></td>
<td><pre>
  /// The instructions to consider are all of the instructions in the range of</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>542</pre></td>
<td><pre>
  /// [I1,I2] INCLUSIVE. I1 and I2 must be in the same basic block.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>543</pre></td>
<td><pre>
  bool canInstructionRangeModRef(const Instruction &I1, const Instruction &I2,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>544</pre></td>
<td><pre>
                                 const MemoryLocation &Loc,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>545</pre></td>
<td><pre>
                                 const ModRefInfo Mode);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>546</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>547</pre></td>
<td><pre>
  /// A convenience wrapper synthesizing a memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>548</pre></td>
<td><pre>
  bool canInstructionRangeModRef(const Instruction &I1, const Instruction &I2,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>549</pre></td>
<td><pre>
                                 const Value *Ptr, uint64_t Size,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>550</pre></td>
<td><pre>
                                 const ModRefInfo Mode) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>551</pre></td>
<td><pre>
<span class='red'>    return canInstructionRangeModRef(I1, I2, MemoryLocation(Ptr, Size), Mode);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>552</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>553</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>554</pre></td>
<td><pre>
private:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>555</pre></td>
<td><pre>
  class Concept;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>556</pre></td>
<td><pre>
  template <typename T> class Model;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>557</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>558</pre></td>
<td><pre>
  template <typename T> friend class AAResultBase;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>559</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>560</pre></td>
<td><pre>
  std::vector<std::unique_ptr<Concept>> AAs;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>561</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>562</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>563</pre></td>
<td><pre>
/// Temporary typedef for legacy code that uses a generic \c AliasAnalysis</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>564</pre></td>
<td><pre>
/// pointer or reference.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>565</pre></td>
<td><pre>
typedef AAResults AliasAnalysis;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>566</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>567</pre></td>
<td><pre>
/// A private abstract base class describing the concept of an individual alias</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>568</pre></td>
<td><pre>
/// analysis implementation.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>569</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>570</pre></td>
<td><pre>
/// This interface is implemented by any \c Model instantiation. It is also the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>571</pre></td>
<td><pre>
/// interface which a type used to instantiate the model must provide.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>572</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>573</pre></td>
<td><pre>
/// All of these methods model methods by the same name in the \c</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>574</pre></td>
<td><pre>
/// AAResults class. Only differences and specifics to how the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>575</pre></td>
<td><pre>
/// implementations are called are documented here.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>576</pre></td>
<td><pre>
class AAResults::Concept {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>577</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>578</pre></td>
<td><pre>
  virtual ~Concept() = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>579</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>580</pre></td>
<td><pre>
  /// An update API used internally by the AAResults to provide</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>581</pre></td>
<td><pre>
  /// a handle back to the top level aggregation.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>582</pre></td>
<td><pre>
  virtual void setAAResults(AAResults *NewAAR) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>583</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>584</pre></td>
<td><pre>
  //===--------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>585</pre></td>
<td><pre>
  /// \name Alias Queries</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>586</pre></td>
<td><pre>
  /// @{</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>587</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>588</pre></td>
<td><pre>
  /// The main low level interface to the alias analysis implementation.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>589</pre></td>
<td><pre>
  /// Returns an AliasResult indicating whether the two pointers are aliased to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>590</pre></td>
<td><pre>
  /// each other. This is the interface that must be implemented by specific</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>591</pre></td>
<td><pre>
  /// alias analysis implementations.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>592</pre></td>
<td><pre>
  virtual AliasResult alias(const MemoryLocation &LocA,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>593</pre></td>
<td><pre>
                            const MemoryLocation &LocB) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>594</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>595</pre></td>
<td><pre>
  /// Checks whether the given location points to constant memory, or if</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>596</pre></td>
<td><pre>
  /// \p OrLocal is true whether it points to a local alloca.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>597</pre></td>
<td><pre>
  virtual bool pointsToConstantMemory(const MemoryLocation &Loc,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>598</pre></td>
<td><pre>
                                      bool OrLocal) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>599</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>600</pre></td>
<td><pre>
  /// @}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>601</pre></td>
<td><pre>
  //===--------------------------------------------------------------------===//</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>602</pre></td>
<td><pre>
  /// \name Simple mod/ref information</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>603</pre></td>
<td><pre>
  /// @{</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>604</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>605</pre></td>
<td><pre>
  /// Get the ModRef info associated with a pointer argument of a callsite. The</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>606</pre></td>
<td><pre>
  /// result's bits are set to indicate the allowed aliasing ModRef kinds. Note</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>607</pre></td>
<td><pre>
  /// that these bits do not necessarily account for the overall behavior of</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>608</pre></td>
<td><pre>
  /// the function, but rather only provide additional per-argument</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>609</pre></td>
<td><pre>
  /// information.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>610</pre></td>
<td><pre>
  virtual ModRefInfo getArgModRefInfo(ImmutableCallSite CS,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>611</pre></td>
<td><pre>
                                      unsigned ArgIdx) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>612</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>613</pre></td>
<td><pre>
  /// Return the behavior of the given call site.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>614</pre></td>
<td><pre>
  virtual FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>615</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>616</pre></td>
<td><pre>
  /// Return the behavior when calling the given function.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>617</pre></td>
<td><pre>
  virtual FunctionModRefBehavior getModRefBehavior(const Function *F) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>618</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>619</pre></td>
<td><pre>
  /// getModRefInfo (for call sites) - Return information about whether</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>620</pre></td>
<td><pre>
  /// a particular call site modifies or reads the specified memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>621</pre></td>
<td><pre>
  virtual ModRefInfo getModRefInfo(ImmutableCallSite CS,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>622</pre></td>
<td><pre>
                                   const MemoryLocation &Loc) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>623</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>624</pre></td>
<td><pre>
  /// Return information about whether two call sites may refer to the same set</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>625</pre></td>
<td><pre>
  /// of memory locations. See the AA documentation for details:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>626</pre></td>
<td><pre>
  ///   http://llvm.org/docs/AliasAnalysis.html#ModRefInfo</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>627</pre></td>
<td><pre>
  virtual ModRefInfo getModRefInfo(ImmutableCallSite CS1,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>628</pre></td>
<td><pre>
                                   ImmutableCallSite CS2) = 0;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>629</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>630</pre></td>
<td><pre>
  /// @}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>631</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>632</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>633</pre></td>
<td><pre>
/// A private class template which derives from \c Concept and wraps some other</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>634</pre></td>
<td><pre>
/// type.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>635</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>636</pre></td>
<td><pre>
/// This models the concept by directly forwarding each interface point to the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>637</pre></td>
<td><pre>
/// wrapped type which must implement a compatible interface. This provides</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>638</pre></td>
<td><pre>
/// a type erased binding.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>639</pre></td>
<td><pre>
template <typename AAResultT> class AAResults::Model final : public Concept {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>640</pre></td>
<td><pre>
  AAResultT &Result;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>641</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>642</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>643</pre></td>
<td><pre>
  explicit Model(AAResultT &Result, AAResults &AAR) : Result(Result) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>644</pre></td>
<td><pre>
    Result.setAAResults(&AAR);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>645</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>646</pre></td>
<td><pre>
  ~Model() override {}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>647</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>648</pre></td>
<td><pre>
  void setAAResults(AAResults *NewAAR) override <span class='red'>{ Result.setAAResults(NewAAR); }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>649</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>650</pre></td>
<td><pre>
  AliasResult alias(const MemoryLocation &LocA,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>651</pre></td>
<td><pre>
                    const MemoryLocation &LocB) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>652</pre></td>
<td><pre>
    return Result.alias(LocA, LocB);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>653</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>654</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>655</pre></td>
<td><pre>
  bool pointsToConstantMemory(const MemoryLocation &Loc,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>656</pre></td>
<td><pre>
                              bool OrLocal) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>657</pre></td>
<td><pre>
    return Result.pointsToConstantMemory(Loc, OrLocal);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>658</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>659</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>660</pre></td>
<td><pre>
  ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>661</pre></td>
<td><pre>
    return Result.getArgModRefInfo(CS, ArgIdx);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>662</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>663</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>664</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>665</pre></td>
<td><pre>
    return Result.getModRefBehavior(CS);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>666</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>667</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>668</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(const Function *F) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>669</pre></td>
<td><pre>
    return Result.getModRefBehavior(F);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>670</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>671</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>672</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>78.2k</pre></td>
<td class='numeric'><pre>673</pre></td>
<td><pre>
                           const MemoryLocation &Loc) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>78.2k</pre></td>
<td class='numeric'><pre>674</pre></td>
<td><pre>
    return Result.getModRefInfo(CS, Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>78.2k</pre></td>
<td class='numeric'><pre>675</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>676</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>677</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS1,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>678</pre></td>
<td><pre>
                           ImmutableCallSite CS2) override {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>679</pre></td>
<td><pre>
    return Result.getModRefInfo(CS1, CS2);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>680</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>681</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>682</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>683</pre></td>
<td><pre>
/// A CRTP-driven "mixin" base class to help implement the function alias</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>684</pre></td>
<td><pre>
/// analysis results concept.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>685</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>686</pre></td>
<td><pre>
/// Because of the nature of many alias analysis implementations, they often</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>687</pre></td>
<td><pre>
/// only implement a subset of the interface. This base class will attempt to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>688</pre></td>
<td><pre>
/// implement the remaining portions of the interface in terms of simpler forms</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>689</pre></td>
<td><pre>
/// of the interface where possible, and otherwise provide conservatively</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>690</pre></td>
<td><pre>
/// correct fallback implementations.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>691</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>692</pre></td>
<td><pre>
/// Implementors of an alias analysis should derive from this CRTP, and then</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>693</pre></td>
<td><pre>
/// override specific methods that they wish to customize. There is no need to</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>694</pre></td>
<td><pre>
/// use virtual anywhere, the CRTP base class does static dispatch to the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>695</pre></td>
<td><pre>
/// derived type passed into it.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>696</pre></td>
<td><pre>
template <typename DerivedT> class AAResultBase {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>697</pre></td>
<td><pre>
  // Expose some parts of the interface only to the AAResults::Model</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>698</pre></td>
<td><pre>
  // for wrapping. Specifically, this allows the model to call our</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>699</pre></td>
<td><pre>
  // setAAResults method without exposing it as a fully public API.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>700</pre></td>
<td><pre>
  friend class AAResults::Model<DerivedT>;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>701</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>702</pre></td>
<td><pre>
  /// A pointer to the AAResults object that this AAResult is</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>703</pre></td>
<td><pre>
  /// aggregated within. May be null if not aggregated.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>704</pre></td>
<td><pre>
  AAResults *AAR;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>705</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>706</pre></td>
<td><pre>
  /// Helper to dispatch calls back through the derived type.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>510k</pre></td>
<td class='numeric'><pre>707</pre></td>
<td><pre>
  DerivedT &derived() { return static_cast<DerivedT &>(*this); }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>708</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>709</pre></td>
<td><pre>
  /// A setter for the AAResults pointer, which is used to satisfy the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>710</pre></td>
<td><pre>
  /// AAResults::Model contract.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>38.5k</pre></td>
<td class='numeric'><pre>711</pre></td>
<td><pre>
  void setAAResults(AAResults *NewAAR) { AAR = NewAAR; }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>712</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>713</pre></td>
<td><pre>
protected:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>714</pre></td>
<td><pre>
  /// This proxy class models a common pattern where we delegate to either the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>715</pre></td>
<td><pre>
  /// top-level \c AAResults aggregation if one is registered, or to the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>716</pre></td>
<td><pre>
  /// current result if none are registered.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>717</pre></td>
<td><pre>
  class AAResultsProxy {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>718</pre></td>
<td><pre>
    AAResults *AAR;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>719</pre></td>
<td><pre>
    DerivedT &CurrentResult;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>720</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>721</pre></td>
<td><pre>
  public:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>722</pre></td>
<td><pre>
    AAResultsProxy(AAResults *AAR, DerivedT &CurrentResult)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>510k</pre></td>
<td class='numeric'><pre>723</pre></td>
<td><pre>
        : AAR(AAR), CurrentResult(CurrentResult) {}</pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxyC2EPNS_9AAResultsERT_:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>723</pre></td>
<td><pre>
        : AAR(AAR), CurrentResult(CurrentResult) <span class='red'>{}</span></pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxyC2EPNS_9AAResultsERS2_:</pre></div>    <table>
<tr>
<td class='numeric'><pre>510k</pre></td>
<td class='numeric'><pre>723</pre></td>
<td><pre>
        : AAR(AAR), CurrentResult(CurrentResult) {}</pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>724</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>725</pre></td>
<td><pre>
    AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>726</pre></td>
<td><pre>
      return AAR ? AAR->alias(LocA, LocB) : <span class='red'>CurrentResult.alias(LocA, LocB)</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>727</pre></td>
<td><pre>
    }</pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy5aliasERKNS_14MemoryLocationES7_:</pre></div>    <table>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>725</pre></td>
<td><pre>
    AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>726</pre></td>
<td><pre>
      return AAR ? AAR->alias(LocA, LocB) : <span class='red'>CurrentResult.alias(LocA, LocB)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>727</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy5aliasERKNS_14MemoryLocationES4_:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>725</pre></td>
<td><pre>
    AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>726</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->alias(LocA, LocB) : CurrentResult.alias(LocA, LocB);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>727</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>728</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>729</pre></td>
<td><pre>
    bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>730</pre></td>
<td><pre>
      return AAR ? AAR->pointsToConstantMemory(Loc, OrLocal)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>731</pre></td>
<td><pre>
                 : <span class='red'>CurrentResult.pointsToConstantMemory(Loc, OrLocal)</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>732</pre></td>
<td><pre>
    }</pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy22pointsToConstantMemoryERKNS_14MemoryLocationEb:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>729</pre></td>
<td><pre>
    bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>730</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->pointsToConstantMemory(Loc, OrLocal)</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>731</pre></td>
<td><pre>
<span class='red'>                 : CurrentResult.pointsToConstantMemory(Loc, OrLocal);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>732</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy22pointsToConstantMemoryERKNS_14MemoryLocationEb:</pre></div>    <table>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>729</pre></td>
<td><pre>
    bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>730</pre></td>
<td><pre>
      return AAR ? AAR->pointsToConstantMemory(Loc, OrLocal)</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>731</pre></td>
<td><pre>
                 : <span class='red'>CurrentResult.pointsToConstantMemory(Loc, OrLocal)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>732</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>733</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>7.17k</pre></td>
<td class='numeric'><pre>734</pre></td>
<td><pre>
    ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>7.17k</pre></td>
<td class='numeric'><pre>735</pre></td>
<td><pre>
      return AAR ? AAR->getArgModRefInfo(CS, ArgIdx)<span class='red'> : </span><span class='red'>CurrentResult.getArgModRefInfo(CS, ArgIdx)</span><span class='red'>;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>736</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy16getArgModRefInfoENS_17ImmutableCallSiteEj:</pre></div>    <table>
<tr>
<td class='numeric'><pre>7.17k</pre></td>
<td class='numeric'><pre>734</pre></td>
<td><pre>
    ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>7.17k</pre></td>
<td class='numeric'><pre>735</pre></td>
<td><pre>
      return AAR ? AAR->getArgModRefInfo(CS, ArgIdx) : <span class='red'>CurrentResult.getArgModRefInfo(CS, ArgIdx)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>7.17k</pre></td>
<td class='numeric'><pre>736</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy16getArgModRefInfoENS_17ImmutableCallSiteEj:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>734</pre></td>
<td><pre>
    ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>735</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->getArgModRefInfo(CS, ArgIdx) : CurrentResult.getArgModRefInfo(CS, ArgIdx);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>736</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>737</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>85.6k</pre></td>
<td class='numeric'><pre>738</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>85.6k</pre></td>
<td class='numeric'><pre>739</pre></td>
<td><pre>
      return AAR ? AAR->getModRefBehavior(CS)<span class='red'> : </span><span class='red'>CurrentResult.getModRefBehavior(CS)</span><span class='red'>;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>740</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy17getModRefBehaviorENS_17ImmutableCallSiteE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>738</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>739</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->getModRefBehavior(CS) : CurrentResult.getModRefBehavior(CS);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>740</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy17getModRefBehaviorENS_17ImmutableCallSiteE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>85.6k</pre></td>
<td class='numeric'><pre>738</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>85.6k</pre></td>
<td class='numeric'><pre>739</pre></td>
<td><pre>
      return AAR ? AAR->getModRefBehavior(CS) : <span class='red'>CurrentResult.getModRefBehavior(CS)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>85.6k</pre></td>
<td class='numeric'><pre>740</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>741</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>742</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(const Function *F) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>743</pre></td>
<td><pre>
      return AAR ? AAR->getModRefBehavior(F) : <span class='red'>CurrentResult.getModRefBehavior(F)</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>744</pre></td>
<td><pre>
    }</pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy17getModRefBehaviorEPKNS_8FunctionE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>742</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(const Function *F) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>743</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->getModRefBehavior(F) : CurrentResult.getModRefBehavior(F);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>744</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy17getModRefBehaviorEPKNS_8FunctionE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>742</pre></td>
<td><pre>
    FunctionModRefBehavior getModRefBehavior(const Function *F) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>743</pre></td>
<td><pre>
      return AAR ? AAR->getModRefBehavior(F) : <span class='red'>CurrentResult.getModRefBehavior(F)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>744</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>745</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>967</pre></td>
<td class='numeric'><pre>746</pre></td>
<td><pre>
    ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>967</pre></td>
<td class='numeric'><pre>747</pre></td>
<td><pre>
      return AAR ? AAR->getModRefInfo(CS, Loc)<span class='red'></span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>748</pre></td>
<td><pre>
<span class='red'>                 : </span><span class='red'>CurrentResult.getModRefInfo(CS, Loc)</span><span class='red'>;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>749</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBase14AAResultsProxy13getModRefInfoENS_17ImmutableCallSiteERKNS_14MemoryLocationE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>746</pre></td>
<td><pre>
    ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc) <span class='red'>{</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>747</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->getModRefInfo(CS, Loc)</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>748</pre></td>
<td><pre>
<span class='red'>                 : CurrentResult.getModRefInfo(CS, Loc);</span></pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>749</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</td>
</tr>
      </table>
</div>
<div class='expansion-view'>
<div class='function-title'><pre>_ZN4llvm12AAResultBaseIN5swift13SwiftAAResultEE14AAResultsProxy13getModRefInfoENS_17ImmutableCallSiteERKNS_14MemoryLocationE:</pre></div>    <table>
<tr>
<td class='numeric'><pre>967</pre></td>
<td class='numeric'><pre>746</pre></td>
<td><pre>
    ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc) {</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>967</pre></td>
<td class='numeric'><pre>747</pre></td>
<td><pre>
      return AAR ? AAR->getModRefInfo(CS, Loc)</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>748</pre></td>
<td><pre>
                 : <span class='red'>CurrentResult.getModRefInfo(CS, Loc)</span>;</pre>
</td>
</td>
</tr>
<tr>
<td class='numeric'><pre>967</pre></td>
<td class='numeric'><pre>749</pre></td>
<td><pre>
    }</pre>
</td>
</td>
</tr>
      </table>
</div>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>750</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>751</pre></td>
<td><pre>
    ModRefInfo getModRefInfo(ImmutableCallSite CS1, ImmutableCallSite CS2) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>752</pre></td>
<td><pre>
<span class='red'>      return AAR ? AAR->getModRefInfo(CS1, CS2) : CurrentResult.getModRefInfo(CS1, CS2);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>753</pre></td>
<td><pre>
<span class='red'>    }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>754</pre></td>
<td><pre>
  };</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>755</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>756</pre></td>
<td><pre>
  const TargetLibraryInfo &TLI;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>757</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.97k</pre></td>
<td class='numeric'><pre>758</pre></td>
<td><pre>
  explicit AAResultBase(const TargetLibraryInfo &TLI) : TLI(TLI) {}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>759</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>760</pre></td>
<td><pre>
  // Provide all the copy and move constructors so that derived types aren't</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>761</pre></td>
<td><pre>
  // constrained.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>762</pre></td>
<td><pre>
  AAResultBase(const AAResultBase &Arg) : TLI(Arg.TLI) {}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>763</pre></td>
<td><pre>
  AAResultBase(AAResultBase &&Arg) : TLI(Arg.TLI) {}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>764</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>765</pre></td>
<td><pre>
  /// Get a proxy for the best AA result set to query at this time.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>766</pre></td>
<td><pre>
  ///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>767</pre></td>
<td><pre>
  /// When this result is part of a larger aggregation, this will proxy to that</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>768</pre></td>
<td><pre>
  /// aggregation. When this result is used in isolation, it will just delegate</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>769</pre></td>
<td><pre>
  /// back to the derived class's implementation.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>510k</pre></td>
<td class='numeric'><pre>770</pre></td>
<td><pre>
  AAResultsProxy getBestAAResults() { return AAResultsProxy(AAR, derived()); }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>771</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>772</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>773</pre></td>
<td><pre>
  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>774</pre></td>
<td><pre>
    return MayAlias;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>267k</pre></td>
<td class='numeric'><pre>775</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>776</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>777</pre></td>
<td><pre>
  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>778</pre></td>
<td><pre>
    return false;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>350k</pre></td>
<td class='numeric'><pre>779</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>780</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>781</pre></td>
<td><pre>
  ModRefInfo getArgModRefInfo(ImmutableCallSite CS, unsigned ArgIdx) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>782</pre></td>
<td><pre>
    return MRI_ModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39.4k</pre></td>
<td class='numeric'><pre>783</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>784</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>785</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(ImmutableCallSite CS) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>786</pre></td>
<td><pre>
    if (!CS.hasOperandBundles())</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>787</pre></td>
<td><pre>
      // If CS has operand bundles then aliasing attributes from the function it</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>788</pre></td>
<td><pre>
      // calls do not directly apply to the CallSite.  This can be made more</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>789</pre></td>
<td><pre>
      // precise in the future.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>790</pre></td>
<td><pre>
      if (const Function *F = CS.getCalledFunction())</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>335k</pre></td>
<td class='numeric'><pre>791</pre></td>
<td><pre>
        return getBestAAResults().getModRefBehavior(F);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>792</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>110k</pre></td>
<td class='numeric'><pre>793</pre></td>
<td><pre>
    return FMRB_UnknownModRefBehavior;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>445k</pre></td>
<td class='numeric'><pre>794</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>795</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>796</pre></td>
<td><pre>
  FunctionModRefBehavior getModRefBehavior(const Function *F) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>797</pre></td>
<td><pre>
    return FMRB_UnknownModRefBehavior;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.40M</pre></td>
<td class='numeric'><pre>798</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>799</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>800</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>801</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>802</pre></td>
<td><pre>
  ModRefInfo getModRefInfo(ImmutableCallSite CS1, ImmutableCallSite CS2);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>803</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>804</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>805</pre></td>
<td><pre>
/// Synthesize \c ModRefInfo for a call site and memory location by examining</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>806</pre></td>
<td><pre>
/// the general behavior of the call site and any specific information for its</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>807</pre></td>
<td><pre>
/// arguments.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>808</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>809</pre></td>
<td><pre>
/// This essentially, delegates across the alias analysis interface to collect</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>810</pre></td>
<td><pre>
/// information which may be enough to (conservatively) fulfill the query.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>811</pre></td>
<td><pre>
template <typename DerivedT></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>812</pre></td>
<td><pre>
ModRefInfo AAResultBase<DerivedT>::getModRefInfo(ImmutableCallSite CS,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>813</pre></td>
<td><pre>
                                                 const MemoryLocation &Loc) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>814</pre></td>
<td><pre>
  auto MRB = getBestAAResults().getModRefBehavior(CS);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>815</pre></td>
<td><pre>
  if (MRB == FMRB_DoesNotAccessMemory)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>816</pre></td>
<td><pre>
    <span class='red'>return MRI_NoModRef</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>817</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>818</pre></td>
<td><pre>
  ModRefInfo Mask = MRI_ModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>819</pre></td>
<td><pre>
  if (AAResults::onlyReadsMemory(MRB))</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>77</pre></td>
<td class='numeric'><pre>820</pre></td>
<td><pre>
    Mask = MRI_Ref;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>821</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>822</pre></td>
<td><pre>
  if (AAResults::onlyAccessesArgPointees(MRB)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>823</pre></td>
<td><pre>
    bool DoesAlias = false;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>824</pre></td>
<td><pre>
    ModRefInfo AllArgsMask = MRI_NoModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>825</pre></td>
<td><pre>
    if (AAResults::doesAccessArgPointees(MRB)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>826</pre></td>
<td><pre>
      for (ImmutableCallSite::arg_iterator AI = CS.arg_begin(),</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>827</pre></td>
<td><pre>
                                           AE = CS.arg_end();</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>19.1k</pre></td>
<td class='numeric'><pre>828</pre></td>
<td><pre>
           AI != AE; ++AI) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>13.2k</pre></td>
<td class='numeric'><pre>829</pre></td>
<td><pre>
        const Value *Arg = *AI;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>13.2k</pre></td>
<td class='numeric'><pre>830</pre></td>
<td><pre>
        if (!Arg->getType()->isPointerTy())</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>7.00k</pre></td>
<td class='numeric'><pre>831</pre></td>
<td><pre>
          continue;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>832</pre></td>
<td><pre>
        unsigned ArgIdx = std::distance(CS.arg_begin(), AI);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>833</pre></td>
<td><pre>
        MemoryLocation ArgLoc = MemoryLocation::getForArgument(CS, ArgIdx, TLI);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>834</pre></td>
<td><pre>
        AliasResult ArgAlias = getBestAAResults().alias(ArgLoc, Loc);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>835</pre></td>
<td><pre>
        if (ArgAlias != NoAlias) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.20k</pre></td>
<td class='numeric'><pre>836</pre></td>
<td><pre>
          ModRefInfo ArgMask = getBestAAResults().getArgModRefInfo(CS, ArgIdx);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.20k</pre></td>
<td class='numeric'><pre>837</pre></td>
<td><pre>
          DoesAlias = true;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.20k</pre></td>
<td class='numeric'><pre>838</pre></td>
<td><pre>
          AllArgsMask = ModRefInfo(AllArgsMask | ArgMask);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.20k</pre></td>
<td class='numeric'><pre>839</pre></td>
<td><pre>
        }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>6.27k</pre></td>
<td class='numeric'><pre>840</pre></td>
<td><pre>
      }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>841</pre></td>
<td><pre>
    }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>842</pre></td>
<td><pre>
    if (!DoesAlias)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>843</pre></td>
<td><pre>
      <span class='red'>return MRI_NoModRef</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>844</pre></td>
<td><pre>
    Mask = ModRefInfo(Mask & AllArgsMask);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.88k</pre></td>
<td class='numeric'><pre>845</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>846</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>847</pre></td>
<td><pre>
  // If Loc is a constant memory location, the call definitely could not</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>848</pre></td>
<td><pre>
  // modify the memory location.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>849</pre></td>
<td><pre>
  if ((Mask & MRI_Mod) &&</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.7k</pre></td>
<td class='numeric'><pre>850</pre></td>
<td><pre>
      getBestAAResults().pointsToConstantMemory(Loc, /*OrLocal*/ false))</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>851</pre></td>
<td><pre>
    <span class='red'>Mask = ModRefInfo(Mask & ~MRI_Mod)</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>852</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>853</pre></td>
<td><pre>
  return Mask;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>74.8k</pre></td>
<td class='numeric'><pre>854</pre></td>
<td><pre>
}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>855</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>856</pre></td>
<td><pre>
/// Synthesize \c ModRefInfo for two call sites by examining the general</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>857</pre></td>
<td><pre>
/// behavior of the call site and any specific information for its arguments.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>858</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>859</pre></td>
<td><pre>
/// This essentially, delegates across the alias analysis interface to collect</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>860</pre></td>
<td><pre>
/// information which may be enough to (conservatively) fulfill the query.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>861</pre></td>
<td><pre>
template <typename DerivedT></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>862</pre></td>
<td><pre>
ModRefInfo AAResultBase<DerivedT>::getModRefInfo(ImmutableCallSite CS1,</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>863</pre></td>
<td><pre>
                                                 ImmutableCallSite CS2) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>864</pre></td>
<td><pre>
  // If CS1 or CS2 are readnone, they don't interact.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>865</pre></td>
<td><pre>
  auto CS1B = getBestAAResults().getModRefBehavior(CS1);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>866</pre></td>
<td><pre>
  if (CS1B == FMRB_DoesNotAccessMemory)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>867</pre></td>
<td><pre>
    <span class='red'>return MRI_NoModRef</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>868</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>869</pre></td>
<td><pre>
  auto CS2B = getBestAAResults().getModRefBehavior(CS2);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>870</pre></td>
<td><pre>
  if (CS2B == FMRB_DoesNotAccessMemory)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>871</pre></td>
<td><pre>
    <span class='red'>return MRI_NoModRef</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>872</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>873</pre></td>
<td><pre>
  // If they both only read from memory, there is no dependence.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>874</pre></td>
<td><pre>
  if (AAResults::onlyReadsMemory(CS1B) && AAResults::onlyReadsMemory(CS2B))</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>875</pre></td>
<td><pre>
    <span class='red'>return MRI_NoModRef</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>876</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>877</pre></td>
<td><pre>
  ModRefInfo Mask = MRI_ModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>878</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>879</pre></td>
<td><pre>
  // If CS1 only reads memory, the only dependence on CS2 can be</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>880</pre></td>
<td><pre>
  // from CS1 reading memory written by CS2.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>881</pre></td>
<td><pre>
  if (AAResults::onlyReadsMemory(CS1B))</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>179</pre></td>
<td class='numeric'><pre>882</pre></td>
<td><pre>
    Mask = ModRefInfo(Mask & MRI_Ref);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>883</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>884</pre></td>
<td><pre>
  // If CS2 only access memory through arguments, accumulate the mod/ref</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>885</pre></td>
<td><pre>
  // information from CS1's references to the memory referenced by</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>886</pre></td>
<td><pre>
  // CS2's arguments.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>887</pre></td>
<td><pre>
  if (AAResults::onlyAccessesArgPointees(CS2B)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>888</pre></td>
<td><pre>
    ModRefInfo R = MRI_NoModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>889</pre></td>
<td><pre>
    if (AAResults::doesAccessArgPointees(CS2B)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>890</pre></td>
<td><pre>
      for (ImmutableCallSite::arg_iterator I = CS2.arg_begin(),</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>891</pre></td>
<td><pre>
                                           E = CS2.arg_end();</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.61k</pre></td>
<td class='numeric'><pre>892</pre></td>
<td><pre>
           I != E; ++I) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.61k</pre></td>
<td class='numeric'><pre>893</pre></td>
<td><pre>
        const Value *Arg = *I;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>1.61k</pre></td>
<td class='numeric'><pre>894</pre></td>
<td><pre>
        if (!Arg->getType()->isPointerTy())</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>789</pre></td>
<td class='numeric'><pre>895</pre></td>
<td><pre>
          continue;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>896</pre></td>
<td><pre>
        unsigned CS2ArgIdx = std::distance(CS2.arg_begin(), I);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>897</pre></td>
<td><pre>
        auto CS2ArgLoc = MemoryLocation::getForArgument(CS2, CS2ArgIdx, TLI);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>898</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>899</pre></td>
<td><pre>
        // ArgMask indicates what CS2 might do to CS2ArgLoc, and the dependence</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>900</pre></td>
<td><pre>
        // of CS1 on that location is the inverse.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>901</pre></td>
<td><pre>
        ModRefInfo ArgMask =</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>902</pre></td>
<td><pre>
            getBestAAResults().getArgModRefInfo(CS2, CS2ArgIdx);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>903</pre></td>
<td><pre>
        if (ArgMask == MRI_Mod)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>39</pre></td>
<td class='numeric'><pre>904</pre></td>
<td><pre>
          ArgMask = MRI_ModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>789</pre></td>
<td class='numeric'><pre>905</pre></td>
<td><pre>
        else if (ArgMask == MRI_Ref)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>906</pre></td>
<td><pre>
          <span class='red'>ArgMask = MRI_Mod</span>;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>907</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>908</pre></td>
<td><pre>
        ArgMask = ModRefInfo(ArgMask &</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>909</pre></td>
<td><pre>
                             getBestAAResults().getModRefInfo(CS1, CS2ArgLoc));</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>910</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>911</pre></td>
<td><pre>
        R = ModRefInfo((R | ArgMask) & Mask);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>912</pre></td>
<td><pre>
        if (R == Mask)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>913</pre></td>
<td><pre>
          break;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>914</pre></td>
<td><pre>
      }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>915</pre></td>
<td><pre>
    }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>916</pre></td>
<td><pre>
    return R;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>828</pre></td>
<td class='numeric'><pre>917</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>918</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>919</pre></td>
<td><pre>
  // If CS1 only accesses memory through arguments, check if CS2 references</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>5.41k</pre></td>
<td class='numeric'><pre>920</pre></td>
<td><pre>
  // any of the memory referenced by CS1's arguments. If not, return NoModRef.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>4.58k</pre></td>
<td class='numeric'><pre>921</pre></td>
<td><pre>
  if (AAResults::onlyAccessesArgPointees(CS1B)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>922</pre></td>
<td><pre>
    ModRefInfo R = MRI_NoModRef;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>923</pre></td>
<td><pre>
    if (AAResults::doesAccessArgPointees(CS1B)) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>924</pre></td>
<td><pre>
      for (ImmutableCallSite::arg_iterator I = CS1.arg_begin(),</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>925</pre></td>
<td><pre>
                                           E = CS1.arg_end();</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>312</pre></td>
<td class='numeric'><pre>926</pre></td>
<td><pre>
           I != E; ++I) {</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>302</pre></td>
<td class='numeric'><pre>927</pre></td>
<td><pre>
        const Value *Arg = *I;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>302</pre></td>
<td class='numeric'><pre>928</pre></td>
<td><pre>
        if (!Arg->getType()->isPointerTy())</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>163</pre></td>
<td class='numeric'><pre>929</pre></td>
<td><pre>
          continue;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>930</pre></td>
<td><pre>
        unsigned CS1ArgIdx = std::distance(CS1.arg_begin(), I);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>931</pre></td>
<td><pre>
        auto CS1ArgLoc = MemoryLocation::getForArgument(CS1, CS1ArgIdx, TLI);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>932</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>933</pre></td>
<td><pre>
        // ArgMask indicates what CS1 might do to CS1ArgLoc; if CS1 might Mod</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>934</pre></td>
<td><pre>
        // CS1ArgLoc, then we care about either a Mod or a Ref by CS2. If CS1</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>935</pre></td>
<td><pre>
        // might Ref, then we care only about a Mod by CS2.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>936</pre></td>
<td><pre>
        ModRefInfo ArgMask = getBestAAResults().getArgModRefInfo(CS1, CS1ArgIdx);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>937</pre></td>
<td><pre>
        ModRefInfo ArgR = getBestAAResults().getModRefInfo(CS2, CS1ArgLoc);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>938</pre></td>
<td><pre>
        if (((ArgMask & MRI_Mod) != MRI_NoModRef &&</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>939</pre></td>
<td><pre>
             (ArgR & MRI_ModRef) != MRI_NoModRef) ||</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>3</pre></td>
<td class='numeric'><pre>940</pre></td>
<td><pre>
            ((ArgMask & MRI_Ref) != MRI_NoModRef &&</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>3</pre></td>
<td class='numeric'><pre>941</pre></td>
<td><pre>
             (ArgR & MRI_Mod) != MRI_NoModRef))</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>942</pre></td>
<td><pre>
          R = ModRefInfo((R | ArgMask) & Mask);</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>943</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>944</pre></td>
<td><pre>
        if (R == Mask)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>126</pre></td>
<td class='numeric'><pre>945</pre></td>
<td><pre>
          break;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>139</pre></td>
<td class='numeric'><pre>946</pre></td>
<td><pre>
      }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>947</pre></td>
<td><pre>
    }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>948</pre></td>
<td><pre>
    return R;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>136</pre></td>
<td class='numeric'><pre>949</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>4.58k</pre></td>
<td class='numeric'><pre>950</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>4.45k</pre></td>
<td class='numeric'><pre>951</pre></td>
<td><pre>
  return Mask;</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>4.58k</pre></td>
<td class='numeric'><pre>952</pre></td>
<td><pre>
}</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>953</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>954</pre></td>
<td><pre>
/// Return true if this pointer is returned by a noalias function.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>955</pre></td>
<td><pre>
bool isNoAliasCall(const Value *V);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>956</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>957</pre></td>
<td><pre>
/// Return true if this is an argument with the noalias attribute.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>958</pre></td>
<td><pre>
bool isNoAliasArgument(const Value *V);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>959</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>960</pre></td>
<td><pre>
/// Return true if this pointer refers to a distinct and identifiable object.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>961</pre></td>
<td><pre>
/// This returns true for:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>962</pre></td>
<td><pre>
///    Global Variables and Functions (but not Global Aliases)</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>963</pre></td>
<td><pre>
///    Allocas</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>964</pre></td>
<td><pre>
///    ByVal and NoAlias Arguments</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>965</pre></td>
<td><pre>
///    NoAlias returns (e.g. calls to malloc)</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>966</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>967</pre></td>
<td><pre>
bool isIdentifiedObject(const Value *V);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>968</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>969</pre></td>
<td><pre>
/// Return true if V is umabigously identified at the function-level.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>970</pre></td>
<td><pre>
/// Different IdentifiedFunctionLocals can't alias.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>971</pre></td>
<td><pre>
/// Further, an IdentifiedFunctionLocal can not alias with any function</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>972</pre></td>
<td><pre>
/// arguments other than itself, which is not necessarily true for</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>973</pre></td>
<td><pre>
/// IdentifiedObjects.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>974</pre></td>
<td><pre>
bool isIdentifiedFunctionLocal(const Value *V);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>975</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>976</pre></td>
<td><pre>
/// A manager for alias analyses.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>977</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>978</pre></td>
<td><pre>
/// This class can have analyses registered with it and when run, it will run</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>979</pre></td>
<td><pre>
/// all of them and aggregate their results into single AA results interface</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>980</pre></td>
<td><pre>
/// that dispatches across all of the alias analysis results available.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>981</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>982</pre></td>
<td><pre>
/// Note that the order in which analyses are registered is very significant.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>983</pre></td>
<td><pre>
/// That is the order in which the results will be aggregated and queried.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>984</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>985</pre></td>
<td><pre>
/// This manager effectively wraps the AnalysisManager for registering alias</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>986</pre></td>
<td><pre>
/// analyses. When you register your alias analysis with this manager, it will</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>987</pre></td>
<td><pre>
/// ensure the analysis itself is registered with its AnalysisManager.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>988</pre></td>
<td><pre>
class AAManager {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>989</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>990</pre></td>
<td><pre>
  typedef AAResults Result;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>991</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>992</pre></td>
<td><pre>
  // This type hase value semantics. We have to spell these out because MSVC</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>993</pre></td>
<td><pre>
  // won't synthesize them.</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>994</pre></td>
<td><pre>
  AAManager() <span class='red'>{}</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>995</pre></td>
<td><pre>
  AAManager(AAManager &&Arg)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>996</pre></td>
<td><pre>
      : FunctionResultGetters(std::move(Arg.FunctionResultGetters)) <span class='red'>{}</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>997</pre></td>
<td><pre>
  AAManager(const AAManager &Arg)</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>998</pre></td>
<td><pre>
      : FunctionResultGetters(Arg.FunctionResultGetters) <span class='red'>{}</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>999</pre></td>
<td><pre>
  AAManager &operator=(AAManager &&RHS) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1000</pre></td>
<td><pre>
<span class='red'>    FunctionResultGetters = std::move(RHS.FunctionResultGetters);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1001</pre></td>
<td><pre>
<span class='red'>    return *this;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1002</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1003</pre></td>
<td><pre>
  AAManager &operator=(const AAManager &RHS) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1004</pre></td>
<td><pre>
<span class='red'>    FunctionResultGetters = RHS.FunctionResultGetters;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1005</pre></td>
<td><pre>
<span class='red'>    return *this;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1006</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1007</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1008</pre></td>
<td><pre>
  /// Register a specific AA result.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1009</pre></td>
<td><pre>
  template <typename AnalysisT> void registerFunctionAnalysis() {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1010</pre></td>
<td><pre>
    FunctionResultGetters.push_back(&getFunctionAAResultImpl<AnalysisT>);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1011</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1012</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1013</pre></td>
<td><pre>
  Result run(Function &F, AnalysisManager<Function> &AM) <span class='red'>{</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1014</pre></td>
<td><pre>
<span class='red'>    Result R;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1015</pre></td>
<td><pre>
<span class='red'>    for (auto &Getter : FunctionResultGetters)</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1016</pre></td>
<td><pre>
<span class='red'>      (*Getter)(F, AM, R);</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1017</pre></td>
<td><pre>
<span class='red'>    return R;</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1018</pre></td>
<td><pre>
<span class='red'>  }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1019</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1020</pre></td>
<td><pre>
private:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1021</pre></td>
<td><pre>
  SmallVector<void (*)(Function &F, AnalysisManager<Function> &AM,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1022</pre></td>
<td><pre>
                       AAResults &AAResults),</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1023</pre></td>
<td><pre>
              4> FunctionResultGetters;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1024</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1025</pre></td>
<td><pre>
  template <typename AnalysisT></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1026</pre></td>
<td><pre>
  static void getFunctionAAResultImpl(Function &F,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1027</pre></td>
<td><pre>
                                      AnalysisManager<Function> &AM,</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1028</pre></td>
<td><pre>
                                      AAResults &AAResults) {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1029</pre></td>
<td><pre>
    AAResults.addAAResult(AM.template getResult<AnalysisT>(F));</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1030</pre></td>
<td><pre>
  }</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1031</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1032</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1033</pre></td>
<td><pre>
/// A wrapper pass to provide the legacy pass manager access to a suitably</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1034</pre></td>
<td><pre>
/// prepared AAResults object.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1035</pre></td>
<td><pre>
class AAResultsWrapperPass : public FunctionPass {</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1036</pre></td>
<td><pre>
  std::unique_ptr<AAResults> AAR;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1037</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1038</pre></td>
<td><pre>
public:</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1039</pre></td>
<td><pre>
  static char ID;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1040</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1041</pre></td>
<td><pre>
  AAResultsWrapperPass();</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1042</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1043</pre></td>
<td><pre>
  AAResults &getAAResults() <span class='red'>{ return *AAR; }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'><pre>0</pre></td>
<td class='numeric'><pre>1044</pre></td>
<td><pre>
  const AAResults &getAAResults() const <span class='red'>{ return *AAR; }</span></pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1045</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1046</pre></td>
<td><pre>
  bool runOnFunction(Function &F) override;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1047</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1048</pre></td>
<td><pre>
  void getAnalysisUsage(AnalysisUsage &AU) const override;</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1049</pre></td>
<td><pre>
};</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1050</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1051</pre></td>
<td><pre>
FunctionPass *createAAResultsWrapperPass();</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1052</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1053</pre></td>
<td><pre>
/// A wrapper pass around a callback which can be used to populate the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1054</pre></td>
<td><pre>
/// AAResults in the AAResultsWrapperPass from an external AA.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1055</pre></td>
<td><pre>
///</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1056</pre></td>
<td><pre>
/// The callback provided here will be used each time we prepare an AAResults</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1057</pre></td>
<td><pre>
/// object, and will receive a reference to the function wrapper pass, the</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1058</pre></td>
<td><pre>
/// function, and the AAResults object to populate. This should be used when</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1059</pre></td>
<td><pre>
/// setting up a custom pass pipeline to inject a hook into the AA results.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1060</pre></td>
<td><pre>
ImmutablePass *createExternalAAWrapperPass(</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1061</pre></td>
<td><pre>
    std::function<void(Pass &, Function &, AAResults &)> Callback);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1062</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1063</pre></td>
<td><pre>
/// A helper for the legacy pass manager to create a \c AAResults</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1064</pre></td>
<td><pre>
/// object populated to the best of our ability for a particular function when</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1065</pre></td>
<td><pre>
/// inside of a \c ModulePass or a \c CallGraphSCCPass.</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1066</pre></td>
<td><pre>
AAResults createLegacyPMAAResults(Pass &P, Function &F, BasicAAResult &BAR);</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1067</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1068</pre></td>
<td><pre>
} // End llvm namespace</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1069</pre></td>
<td><pre>
</pre>
</td>
</tr>
<tr>
<td class='numeric'></td>
<td class='numeric'><pre>1070</pre></td>
<td><pre>
#endif</pre>
</td>
</tr>
      </table>
  </body>
</html>