1 ; RUN: opt -basicaa -aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 2 3 declare void @callee(double* %callee_arg) 4 declare void @nocap_callee(double* nocapture %nocap_callee_arg) 5 6 declare double* @normal_returner() 7 declare noalias double* @noalias_returner() 8 9 define void @caller_a(double* %arg_a0, 10 double* %arg_a1, 11 double* noalias %noalias_arg_a0, 12 double* noalias %noalias_arg_a1, 13 double** %indirect_a0, 14 double** %indirect_a1) { 15 %escape_alloca_a0 = alloca double 16 %escape_alloca_a1 = alloca double 17 %noescape_alloca_a0 = alloca double 18 %noescape_alloca_a1 = alloca double 19 20 %normal_ret_a0 = call double* @normal_returner() 21 %normal_ret_a1 = call double* @normal_returner() 22 %noalias_ret_a0 = call double* @noalias_returner() 23 %noalias_ret_a1 = call double* @noalias_returner() 24 25 %loaded_a0 = load double*, double** %indirect_a0 26 %loaded_a1 = load double*, double** %indirect_a1 27 28 call void @callee(double* %escape_alloca_a0) 29 call void @callee(double* %escape_alloca_a1) 30 call void @nocap_callee(double* %noescape_alloca_a0) 31 call void @nocap_callee(double* %noescape_alloca_a1) 32 33 store double 0.0, double* %loaded_a0 34 store double 0.0, double* %loaded_a1 35 store double 0.0, double* %arg_a0 36 store double 0.0, double* %arg_a1 37 store double 0.0, double* %noalias_arg_a0 38 store double 0.0, double* %noalias_arg_a1 39 store double 0.0, double* %escape_alloca_a0 40 store double 0.0, double* %escape_alloca_a1 41 store double 0.0, double* %noescape_alloca_a0 42 store double 0.0, double* %noescape_alloca_a1 43 store double 0.0, double* %normal_ret_a0 44 store double 0.0, double* %normal_ret_a1 45 store double 0.0, double* %noalias_ret_a0 46 store double 0.0, double* %noalias_ret_a1 47 ret void 48 } 49 50 ; CHECK: Function: caller_a: 16 pointers, 8 call sites 51 ; CHECK-NEXT: MayAlias: double* %arg_a0, double* %arg_a1 52 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noalias_arg_a0 53 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noalias_arg_a0 54 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noalias_arg_a1 55 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noalias_arg_a1 56 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a1 57 ; CHECK-NEXT: MayAlias: double* %arg_a0, double** %indirect_a0 58 ; CHECK-NEXT: MayAlias: double* %arg_a1, double** %indirect_a0 59 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double** %indirect_a0 60 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double** %indirect_a0 61 ; CHECK-NEXT: MayAlias: double* %arg_a0, double** %indirect_a1 62 ; CHECK-NEXT: MayAlias: double* %arg_a1, double** %indirect_a1 63 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double** %indirect_a1 64 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double** %indirect_a1 65 ; CHECK-NEXT: MayAlias: double** %indirect_a0, double** %indirect_a1 66 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %escape_alloca_a0 67 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %escape_alloca_a0 68 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a0 69 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a1 70 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double** %indirect_a0 71 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double** %indirect_a1 72 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %escape_alloca_a1 73 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %escape_alloca_a1 74 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a0 75 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a1 76 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double** %indirect_a0 77 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double** %indirect_a1 78 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a1 79 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noescape_alloca_a0 80 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noescape_alloca_a0 81 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0 82 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0 83 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a0, double** %indirect_a0 84 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a0, double** %indirect_a1 85 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0 86 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0 87 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noescape_alloca_a1 88 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noescape_alloca_a1 89 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1 90 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1 91 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a1, double** %indirect_a0 92 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a1, double** %indirect_a1 93 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1 94 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1 95 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1 96 ; CHECK-NEXT: MayAlias: double* %arg_a0, double* %normal_ret_a0 97 ; CHECK-NEXT: MayAlias: double* %arg_a1, double* %normal_ret_a0 98 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0 99 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0 100 ; CHECK-NEXT: MayAlias: double* %normal_ret_a0, double** %indirect_a0 101 ; CHECK-NEXT: MayAlias: double* %normal_ret_a0, double** %indirect_a1 102 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0 103 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0 104 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0 105 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0 106 ; CHECK-NEXT: MayAlias: double* %arg_a0, double* %normal_ret_a1 107 ; CHECK-NEXT: MayAlias: double* %arg_a1, double* %normal_ret_a1 108 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1 109 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1 110 ; CHECK-NEXT: MayAlias: double* %normal_ret_a1, double** %indirect_a0 111 ; CHECK-NEXT: MayAlias: double* %normal_ret_a1, double** %indirect_a1 112 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1 113 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1 114 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1 115 ; CHECK-NEXT: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1 116 ; CHECK-NEXT: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1 117 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noalias_ret_a0 118 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noalias_ret_a0 119 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0 120 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0 121 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double** %indirect_a0 122 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double** %indirect_a1 123 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0 124 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0 125 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0 126 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1 127 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0 128 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1 129 ; CHECK-NEXT: NoAlias: double* %arg_a0, double* %noalias_ret_a1 130 ; CHECK-NEXT: NoAlias: double* %arg_a1, double* %noalias_ret_a1 131 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1 132 ; CHECK-NEXT: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1 133 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double** %indirect_a0 134 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double** %indirect_a1 135 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1 136 ; CHECK-NEXT: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1 137 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0 138 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1 139 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0 140 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1 141 ; CHECK-NEXT: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1 142 ; CHECK-NEXT: MayAlias: double* %arg_a0, double* %loaded_a0 143 ; CHECK-NEXT: MayAlias: double* %arg_a1, double* %loaded_a0 144 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noalias_arg_a0 145 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noalias_arg_a1 146 ; CHECK-NEXT: MayAlias: double* %loaded_a0, double** %indirect_a0 147 ; CHECK-NEXT: MayAlias: double* %loaded_a0, double** %indirect_a1 148 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a0, double* %loaded_a0 149 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a1, double* %loaded_a0 150 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noescape_alloca_a0 151 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1 152 ; CHECK-NEXT: MayAlias: double* %loaded_a0, double* %normal_ret_a0 153 ; CHECK-NEXT: MayAlias: double* %loaded_a0, double* %normal_ret_a1 154 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noalias_ret_a0 155 ; CHECK-NEXT: NoAlias: double* %loaded_a0, double* %noalias_ret_a1 156 ; CHECK-NEXT: MayAlias: double* %arg_a0, double* %loaded_a1 157 ; CHECK-NEXT: MayAlias: double* %arg_a1, double* %loaded_a1 158 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noalias_arg_a0 159 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noalias_arg_a1 160 ; CHECK-NEXT: MayAlias: double* %loaded_a1, double** %indirect_a0 161 ; CHECK-NEXT: MayAlias: double* %loaded_a1, double** %indirect_a1 162 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a0, double* %loaded_a1 163 ; CHECK-NEXT: MayAlias: double* %escape_alloca_a1, double* %loaded_a1 164 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0 165 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1 166 ; CHECK-NEXT: MayAlias: double* %loaded_a1, double* %normal_ret_a0 167 ; CHECK-NEXT: MayAlias: double* %loaded_a1, double* %normal_ret_a1 168 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noalias_ret_a0 169 ; CHECK-NEXT: NoAlias: double* %loaded_a1, double* %noalias_ret_a1 170 ; CHECK-NEXT: MayAlias: double* %loaded_a0, double* %loaded_a1 171 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() 172 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() 173 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() 174 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() 175 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a0 = call double* @normal_returner() 176 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a0 = call double* @normal_returner() 177 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() 178 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() 179 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() 180 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() 181 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() 182 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() 183 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() 184 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() 185 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a0 = call double* @normal_returner() 186 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a0 = call double* @normal_returner() 187 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() 188 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() 189 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() 190 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() 191 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a1 = call double* @normal_returner() 192 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a1 = call double* @normal_returner() 193 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() 194 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() 195 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() 196 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() 197 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() 198 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() 199 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() 200 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() 201 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a1 = call double* @normal_returner() 202 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a1 = call double* @normal_returner() 203 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 204 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 205 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 206 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 207 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 208 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 209 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 210 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 211 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 212 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 213 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 214 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 215 ; CHECK-NEXT: Both ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 216 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 217 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() 218 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() 219 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 220 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 221 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 222 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 223 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 224 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 225 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 226 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 227 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 228 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 229 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 230 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 231 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 232 ; CHECK-NEXT: Both ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 233 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() 234 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() 235 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a0) 236 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a0) 237 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a0) 238 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a0) 239 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a0) 240 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a0) 241 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) 242 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) 243 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) 244 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) 245 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a0) 246 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a0) 247 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a0) 248 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a0) 249 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a0) 250 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a0) 251 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a1) 252 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a1) 253 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a1) 254 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a1) 255 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a1) 256 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a1) 257 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) 258 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) 259 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) 260 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) 261 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a1) 262 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a1) 263 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a1) 264 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a1) 265 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a1) 266 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a1) 267 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 268 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 269 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 270 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 271 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 272 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 273 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 274 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 275 ; CHECK-NEXT: Both ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 276 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 277 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 278 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 279 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 280 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 281 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) 282 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) 283 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 284 ; CHECK-NEXT: Both ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 285 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 286 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 287 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 288 ; CHECK-NEXT: Both ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 289 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 290 ; CHECK-NEXT: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 291 ; CHECK-NEXT: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 292 ; CHECK-NEXT: Both ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 293 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 294 ; CHECK-NEXT: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 295 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 296 ; CHECK-NEXT: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 297 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) 298 ; CHECK-NEXT: Both ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) 299 ; CHECK: ===== Alias Analysis Evaluator Report ===== 300 ; CHECK-NEXT: 120 Total Alias Queries Performed 301 ; CHECK-NEXT: 84 no alias responses (70.0%) 302 ; CHECK-NEXT: 36 may alias responses (30.0%) 303 ; CHECK-NEXT: 0 partial alias responses (0.0%) 304 ; CHECK-NEXT: 0 must alias responses (0.0%) 305 ; CHECK-NEXT: Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0% 306 ; CHECK-NEXT: 184 Total ModRef Queries Performed 307 ; CHECK-NEXT: 44 no mod/ref responses (23.9%) 308 ; CHECK-NEXT: 0 mod responses (0.0%) 309 ; CHECK-NEXT: 0 ref responses (0.0%) 310 ; CHECK-NEXT: 140 mod & ref responses (76.0%) 311 ; CHECK-NEXT: Alias Analysis Evaluator Mod/Ref Summary: 23%/0%/0%/76% 312