1; RUN: opt -basicaa -aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 2 3declare void @callee(double* %callee_arg) 4declare void @nocap_callee(double* nocapture %nocap_callee_arg) 5 6declare double* @normal_returner() 7declare noalias double* @noalias_returner() 8 9define 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