Home | History | Annotate | Download | only in BasicAA
      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