369 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s2 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 double16 %escape_alloca_a1 = alloca double17 %noescape_alloca_a0 = alloca double18 %noescape_alloca_a1 = alloca double19 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_a026 %loaded_a1 = load ptr, ptr %indirect_a127 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_a034 store double 0.0, ptr %loaded_a135 store double 0.0, ptr %arg_a036 store double 0.0, ptr %arg_a137 store double 0.0, ptr %noalias_arg_a038 store double 0.0, ptr %noalias_arg_a139 store double 0.0, ptr %escape_alloca_a040 store double 0.0, ptr %escape_alloca_a141 store double 0.0, ptr %noescape_alloca_a042 store double 0.0, ptr %noescape_alloca_a143 store double 0.0, ptr %normal_ret_a044 store double 0.0, ptr %normal_ret_a145 store double 0.0, ptr %noalias_ret_a046 store double 0.0, ptr %noalias_ret_a147 ret void48}49 50; CHECK: Function: caller_a: 16 pointers, 8 call sites51; CHECK: MayAlias: ptr* %indirect_a0, ptr* %indirect_a152; CHECK: MayAlias: ptr* %indirect_a0, double* %loaded_a053; CHECK: MayAlias: ptr* %indirect_a1, double* %loaded_a054; CHECK: MayAlias: ptr* %indirect_a0, double* %loaded_a155; CHECK: MayAlias: ptr* %indirect_a1, double* %loaded_a156; CHECK: MayAlias: double* %loaded_a0, double* %loaded_a157; CHECK: MayAlias: double* %arg_a0, ptr* %indirect_a058; CHECK: MayAlias: double* %arg_a0, ptr* %indirect_a159; CHECK: MayAlias: double* %arg_a0, double* %loaded_a060; CHECK: MayAlias: double* %arg_a0, double* %loaded_a161; CHECK: MayAlias: double* %arg_a1, ptr* %indirect_a062; CHECK: MayAlias: double* %arg_a1, ptr* %indirect_a163; CHECK: MayAlias: double* %arg_a1, double* %loaded_a064; CHECK: MayAlias: double* %arg_a1, double* %loaded_a165; CHECK: MayAlias: double* %arg_a0, double* %arg_a166; CHECK: NoAlias: ptr* %indirect_a0, double* %noalias_arg_a067; CHECK: NoAlias: ptr* %indirect_a1, double* %noalias_arg_a068; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a069; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a070; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a071; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a072; CHECK: NoAlias: ptr* %indirect_a0, double* %noalias_arg_a173; CHECK: NoAlias: ptr* %indirect_a1, double* %noalias_arg_a174; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a175; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a176; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a177; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a178; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a179; CHECK: NoAlias: double* %escape_alloca_a0, ptr* %indirect_a080; CHECK: NoAlias: double* %escape_alloca_a0, ptr* %indirect_a181; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a082; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a183; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a084; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a085; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a086; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a187; CHECK: NoAlias: double* %escape_alloca_a1, ptr* %indirect_a088; CHECK: NoAlias: double* %escape_alloca_a1, ptr* %indirect_a189; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a090; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a191; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a192; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a193; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a094; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a195; CHECK: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a196; CHECK: NoAlias: ptr* %indirect_a0, double* %noescape_alloca_a097; CHECK: NoAlias: ptr* %indirect_a1, double* %noescape_alloca_a098; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a099; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0100; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a0101; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a0102; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0103; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0104; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0105; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0106; CHECK: NoAlias: ptr* %indirect_a0, double* %noescape_alloca_a1107; CHECK: NoAlias: ptr* %indirect_a1, double* %noescape_alloca_a1108; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1109; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1110; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a1111; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a1112; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1113; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1114; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1115; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1116; CHECK: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1117; CHECK: MayAlias: ptr* %indirect_a0, double* %normal_ret_a0118; CHECK: MayAlias: ptr* %indirect_a1, double* %normal_ret_a0119; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a0120; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a0121; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a0122; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a0123; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0124; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0125; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0126; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0127; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0128; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0129; CHECK: MayAlias: ptr* %indirect_a0, double* %normal_ret_a1130; CHECK: MayAlias: ptr* %indirect_a1, double* %normal_ret_a1131; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a1132; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a1133; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a1134; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a1135; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1136; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1137; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1138; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1139; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1140; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1141; CHECK: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1142; CHECK: NoAlias: ptr* %indirect_a0, double* %noalias_ret_a0143; CHECK: NoAlias: ptr* %indirect_a1, double* %noalias_ret_a0144; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a0145; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a0146; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a0147; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a0148; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0149; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0150; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0151; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0152; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0153; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1154; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0155; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1156; CHECK: NoAlias: ptr* %indirect_a0, double* %noalias_ret_a1157; CHECK: NoAlias: ptr* %indirect_a1, double* %noalias_ret_a1158; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a1159; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a1160; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a1161; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a1162; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1163; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1164; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1165; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1166; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0167; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1168; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0169; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1170; CHECK: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1171; 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 Performed357; 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 Performed363; 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