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