552 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=print-mustexecute -disable-output 2>&1 | FileCheck %s --check-prefix=ME3; RUN: opt < %s -passes=print-must-be-executed-contexts -disable-output 2>&1 | FileCheck %s --check-prefix=MBEC4;5; void simple_conditional(int c) {6; A();7; B();8; if (c) {9; C();10; D();11; }12; E();13; F();14; G();15; }16;17; Best result:18; Start Instruction | Visit Set19; A | A, B, E, F20; B | A, B, E, F21; C | A, B, C, D, E, F22; D | A, B, C, D, E, F23; E | A, B, E, F24; F | A, B, E, F25; G | A, B, E, F, G26;27;28; There are no loops so print-mustexec will not do anything.29; ME-NOT: mustexec30;31define void @simple_conditional(i32 %arg) {32bb:33 call void @A()34; MBEC: -- Explore context of: call void @A()35; MBEC-NEXT: [F: simple_conditional] call void @A()36; MBEC-NEXT: [F: simple_conditional] call void @B()37; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 038; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb139; MBEC-NEXT: [F: simple_conditional] call void @E()40; MBEC-NEXT: [F: simple_conditional] call void @F()41; MBEC-NOT: call42 43 call void @B()44; MBEC: -- Explore context of: call void @B()45; MBEC-NEXT: [F: simple_conditional] call void @B()46; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 047; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb148; MBEC-NEXT: [F: simple_conditional] call void @E()49; MBEC-NEXT: [F: simple_conditional] call void @F()50; MBEC-NEXT: [F: simple_conditional] call void @A()51; MBEC-NOT: call52; MBEC: -- Explore context of: %tmp53 54 %tmp = icmp eq i32 %arg, 055 br i1 %tmp, label %bb2, label %bb156 57bb1: ; preds = %bb58 call void @C()59; MBEC: -- Explore context of: call void @C()60; MBEC-NEXT: [F: simple_conditional] call void @C()61; MBEC-NEXT: [F: simple_conditional] call void @D()62; MBEC-NEXT: [F: simple_conditional] br label %bb263; MBEC-NEXT: [F: simple_conditional] call void @E()64; MBEC-NEXT: [F: simple_conditional] call void @F()65; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb166; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 067; MBEC-NEXT: [F: simple_conditional] call void @B()68; MBEC-NEXT: [F: simple_conditional] call void @A()69; MBEC-NOT: call70 71 call void @D()72; MBEC: -- Explore context of: call void @D()73; MBEC-NEXT: [F: simple_conditional] call void @D()74; MBEC-NEXT: [F: simple_conditional] br label %bb275; MBEC-NEXT: [F: simple_conditional] call void @E()76; MBEC-NEXT: [F: simple_conditional] call void @F()77; MBEC-NEXT: [F: simple_conditional] call void @C()78; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb179; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 080; MBEC-NEXT: [F: simple_conditional] call void @B()81; MBEC-NEXT: [F: simple_conditional] call void @A()82; MBEC-NOT: call83; MBEC: -- Explore context of: br84 85 br label %bb286 87bb2: ; preds = %bb, %bb188 call void @E()89; MBEC: -- Explore context of: call void @E()90; MBEC-NEXT: [F: simple_conditional] call void @E()91; MBEC-NEXT: [F: simple_conditional] call void @F()92; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb193; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 094; MBEC-NEXT: [F: simple_conditional] call void @B()95; MBEC-NEXT: [F: simple_conditional] call void @A()96; MBEC-NOT: call97 98 call void @F() ; might not return!99; MBEC: -- Explore context of: call void @F()100; MBEC-NEXT: [F: simple_conditional] call void @F()101; MBEC-NEXT: [F: simple_conditional] call void @E()102; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb1103; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 0104; MBEC-NEXT: [F: simple_conditional] call void @B()105; MBEC-NEXT: [F: simple_conditional] call void @A()106; MBEC-NOT: call107 108 call void @G()109; MBEC: -- Explore context of: call void @G()110; MBEC-NEXT: [F: simple_conditional] call void @G()111; MBEC-NEXT: [F: simple_conditional] ret void112; MBEC-NEXT: [F: simple_conditional] call void @F()113; MBEC-NEXT: [F: simple_conditional] call void @E()114; MBEC-NEXT: [F: simple_conditional] br i1 %tmp, label %bb2, label %bb1115; MBEC-NEXT: [F: simple_conditional] %tmp = icmp eq i32 %arg, 0116; MBEC-NEXT: [F: simple_conditional] call void @B()117; MBEC-NEXT: [F: simple_conditional] call void @A()118; MBEC-NOT: call119; MBEC: -- Explore context of: ret120 121 ret void122}123 124 125; void complex_loops_and_control(int c, int d) {126; A();127; while (1) {128; B();129; if (++c == d)130; C();131; if (++c == d)132; continue;133; D();134; if (++c == d)135; break;136; do {137; if (++c == d)138; continue;139; E();140; } while (++c == d);141; F();142; }143; G();144; }145;146; Best result:147; Start Instruction | Visit Set148; A | A, B149; B | A, B150; C | A, B, C151; D | A, B, D152; E | A, B, D, E, F153; F | A, B, D, F154; G | A, B, D, G155;156;157; ME: define void @complex_loops_and_control158define void @complex_loops_and_control(i32 %arg, i32 %arg1) {159bb:160 call void @A()161; ME: call void @A()162; ME-NOT: mustexec163; ME-NEXT: br164; MBEC: -- Explore context of: call void @A()165; MBEC-NEXT: [F: complex_loops_and_control] call void @A()166; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2167; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]168; MBEC-NEXT: [F: complex_loops_and_control] call void @B()169; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1170; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1171; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5172; MBEC-NOT: call173; MBEC: -- Explore context of: br174 br label %bb2175 176bb2: ; preds = %.backedge, %bb177 %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]178 call void @B()179; ME: call void @B() ; (mustexec in: bb2)180; MBEC: -- Explore context of: call void @B()181; MBEC-NEXT: [F: complex_loops_and_control] call void @B()182; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1183; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1184; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5185; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2186; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1187; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9188; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]189; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2190; MBEC-NEXT: [F: complex_loops_and_control] call void @A()191; MBEC-NOT: call192; MBEC: -- Explore context of: %tmp193 %tmp = add nsw i32 %.0, 1194 %tmp3 = icmp eq i32 %tmp, %arg1195 br i1 %tmp3, label %bb4, label %bb5196 197bb4: ; preds = %bb2198 call void @C()199; ME: call void @C()200; ME-NOT: mustexec201; ME-NEXT: br202; MBEC: -- Explore context of: call void @C()203; MBEC-NEXT: [F: complex_loops_and_control] call void @C()204; MBEC-NEXT: [F: complex_loops_and_control] br label %bb5205; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2206; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1207; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9208; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5209; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1210; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1211; MBEC-NEXT: [F: complex_loops_and_control] call void @B()212; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]213; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2214; MBEC-NEXT: [F: complex_loops_and_control] call void @A()215; MBEC-NOT: call216; MBEC: -- Explore context of: br217 br label %bb5218 219bb5: ; preds = %bb4, %bb2220 %tmp6 = add nsw i32 %.0, 2221 %tmp7 = icmp eq i32 %tmp6, %arg1222 br i1 %tmp7, label %bb8, label %bb9223 224bb8: ; preds = %bb5225 br label %.backedge226 227.backedge: ; preds = %bb8, %bb22228 %.0.be = phi i32 [ %tmp6, %bb8 ], [ %.lcssa, %bb22 ]229 br label %bb2230 231bb9: ; preds = %bb5232 call void @D()233; ME: call void @D()234; ME-NOT: mustexec235; ME-NEXT: %tmp10236; MBEC: -- Explore context of: call void @D()237; MBEC-NEXT: [F: complex_loops_and_control] call void @D()238; MBEC-NEXT: [F: complex_loops_and_control] %tmp10 = add nsw i32 %.0, 3239; MBEC-NEXT: [F: complex_loops_and_control] %tmp11 = icmp eq i32 %tmp10, %arg1240; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp11, label %bb12, label %bb13241; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9242; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1243; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2244; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5245; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1246; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1247; MBEC-NEXT: [F: complex_loops_and_control] call void @B()248; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]249; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2250; MBEC-NEXT: [F: complex_loops_and_control] call void @A()251; MBEC-NOT: call252; MBEC: -- Explore context of: %tmp10253 %tmp10 = add nsw i32 %.0, 3254 %tmp11 = icmp eq i32 %tmp10, %arg1255 br i1 %tmp11, label %bb12, label %bb13256 257bb12: ; preds = %bb9258 br label %bb23259 260bb13: ; preds = %bb9261 br label %bb14262 263bb14: ; preds = %bb19, %bb13264 %.1 = phi i32 [ %tmp10, %bb13 ], [ %tmp20, %bb19 ]265 %tmp15 = add nsw i32 %.1, 1266 %tmp16 = icmp eq i32 %tmp15, %arg1267 br i1 %tmp16, label %bb17, label %bb18268 269bb17: ; preds = %bb14270 br label %bb19271 272bb18: ; preds = %bb14273 call void @E()274; ME: call void @E()275; ME-NOT: mustexec276; ME-NEXT: br277; FIXME: Missing F278; MBEC: -- Explore context of: call void @E()279; MBEC-NEXT: [F: complex_loops_and_control] call void @E()280; MBEC-NEXT: [F: complex_loops_and_control] br label %bb19281; MBEC-NEXT: [F: complex_loops_and_control] %tmp20 = add nsw i32 %.1, 2282; MBEC-NEXT: [F: complex_loops_and_control] %tmp21 = icmp eq i32 %tmp20, %arg1283; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp21, label %bb14, label %bb22284; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp16, label %bb17, label %bb18285; MBEC-NEXT: [F: complex_loops_and_control] %tmp16 = icmp eq i32 %tmp15, %arg1286; MBEC-NEXT: [F: complex_loops_and_control] %tmp15 = add nsw i32 %.1, 1287; MBEC-NEXT: [F: complex_loops_and_control] %.1 = phi i32 [ %tmp10, %bb13 ], [ %tmp20, %bb19 ]288; MBEC-NEXT: [F: complex_loops_and_control] br label %bb14289; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp11, label %bb12, label %bb13290; MBEC-NEXT: [F: complex_loops_and_control] %tmp11 = icmp eq i32 %tmp10, %arg1291; MBEC-NEXT: [F: complex_loops_and_control] %tmp10 = add nsw i32 %.0, 3292; MBEC-NEXT: [F: complex_loops_and_control] call void @D()293; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9294; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1295; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2296; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5297; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1298; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1299; MBEC-NEXT: [F: complex_loops_and_control] call void @B()300; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]301; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2302; MBEC-NEXT: [F: complex_loops_and_control] call void @A()303; MBEC-NOT: call304; MBEC: -- Explore context of: br305 br label %bb19306 307bb19: ; preds = %bb18, %bb17308 %tmp20 = add nsw i32 %.1, 2309 %tmp21 = icmp eq i32 %tmp20, %arg1310 br i1 %tmp21, label %bb14, label %bb22311 312bb22: ; preds = %bb19313 %.lcssa = phi i32 [ %tmp20, %bb19 ]314 call void @F()315; ME: call void @F()316; ME-NOT: mustexec317; ME-NEXT: br318; MBEC: -- Explore context of: call void @F()319; MBEC-NEXT: [F: complex_loops_and_control] call void @F()320; MBEC-NEXT: [F: complex_loops_and_control] %.lcssa = phi i32 [ %tmp20, %bb19 ]321; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp21, label %bb14, label %bb22322; MBEC-NEXT: [F: complex_loops_and_control] %tmp21 = icmp eq i32 %tmp20, %arg1323; MBEC-NEXT: [F: complex_loops_and_control] %tmp20 = add nsw i32 %.1, 2324; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp16, label %bb17, label %bb18325; MBEC-NEXT: [F: complex_loops_and_control] %tmp16 = icmp eq i32 %tmp15, %arg1326; MBEC-NEXT: [F: complex_loops_and_control] %tmp15 = add nsw i32 %.1, 1327; MBEC-NEXT: [F: complex_loops_and_control] %.1 = phi i32 [ %tmp10, %bb13 ], [ %tmp20, %bb19 ]328; MBEC-NEXT: [F: complex_loops_and_control] br label %bb14329; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp11, label %bb12, label %bb13330; MBEC-NEXT: [F: complex_loops_and_control] %tmp11 = icmp eq i32 %tmp10, %arg1331; MBEC-NEXT: [F: complex_loops_and_control] %tmp10 = add nsw i32 %.0, 3332; MBEC-NEXT: [F: complex_loops_and_control] call void @D()333; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9334; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1335; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2336; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5337; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1338; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1339; MBEC-NEXT: [F: complex_loops_and_control] call void @B()340; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]341; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2342; MBEC-NEXT: [F: complex_loops_and_control] call void @A()343; MBEC-NOT: call344; MBEC: -- Explore context of: br345 br label %.backedge346 347bb23: ; preds = %bb12348 call void @G()349; ME: call void @G()350; ME-NOT: mustexec351; ME-NEXT: ret352; MBEC: -- Explore context of: call void @G()353; MBEC-NEXT: [F: complex_loops_and_control] call void @G()354; MBEC-NEXT: [F: complex_loops_and_control] ret void355; MBEC-NEXT: [F: complex_loops_and_control] br label %bb23356; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp11, label %bb12, label %bb13357; MBEC-NEXT: [F: complex_loops_and_control] %tmp11 = icmp eq i32 %tmp10, %arg1358; MBEC-NEXT: [F: complex_loops_and_control] %tmp10 = add nsw i32 %.0, 3359; MBEC-NEXT: [F: complex_loops_and_control] call void @D()360; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp7, label %bb8, label %bb9361; MBEC-NEXT: [F: complex_loops_and_control] %tmp7 = icmp eq i32 %tmp6, %arg1362; MBEC-NEXT: [F: complex_loops_and_control] %tmp6 = add nsw i32 %.0, 2363; MBEC-NEXT: [F: complex_loops_and_control] br i1 %tmp3, label %bb4, label %bb5364; MBEC-NEXT: [F: complex_loops_and_control] %tmp3 = icmp eq i32 %tmp, %arg1365; MBEC-NEXT: [F: complex_loops_and_control] %tmp = add nsw i32 %.0, 1366; MBEC-NEXT: [F: complex_loops_and_control] call void @B()367; MBEC-NEXT: [F: complex_loops_and_control] %.0 = phi i32 [ %arg, %bb ], [ %.0.be, %.backedge ]368; MBEC-NEXT: [F: complex_loops_and_control] br label %bb2369; MBEC-NEXT: [F: complex_loops_and_control] call void @A()370; MBEC-NOT: call371; MBEC: -- Explore context of: ret372 ret void373}374 375declare void @A() nounwind willreturn376 377declare void @B() nounwind willreturn378 379declare void @C() nounwind willreturn380 381declare void @D() nounwind willreturn382 383declare void @E() nounwind willreturn384 385declare void @F() nounwind386 387declare void @G() nounwind willreturn388 389declare i32 @g(ptr) nounwind willreturn390 391declare void @h(ptr) nounwind willreturn392 393define i32 @nonnull_exec_ctx_1(ptr %a, i32 %b) {394; MBEC: -- Explore context of: %tmp3 = icmp eq i32 %b, 0395; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0396; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd397; MBEC-NEXT: -- Explore context of: br i1 %tmp3, label %ex, label %hd398; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd399; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0400; MBEC-NEXT: -- Explore context of: %tmp5 = tail call i32 @g(ptr nonnull %a)401; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp5 = tail call i32 @g(ptr nonnull %a)402; MBEC-NEXT: [F: nonnull_exec_ctx_1] ret i32 %tmp5403; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd404; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0405; MBEC-NEXT: -- Explore context of: ret i32 %tmp5406; MBEC-NEXT: [F: nonnull_exec_ctx_1] ret i32 %tmp5407; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp5 = tail call i32 @g(ptr nonnull %a)408; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd409; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0410; MBEC-NEXT: -- Explore context of: %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]411; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]412; MBEC-NEXT: [F: nonnull_exec_ctx_1] tail call void @h(ptr %a)413; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp8 = add nuw i32 %tmp7, 1414; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp9 = icmp eq i32 %tmp8, %b415; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp9, label %ex, label %hd416; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd417; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0418; MBEC-NEXT: -- Explore context of: tail call void @h(ptr %a)419; MBEC-NEXT: [F: nonnull_exec_ctx_1] tail call void @h(ptr %a)420; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp8 = add nuw i32 %tmp7, 1421; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp9 = icmp eq i32 %tmp8, %b422; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp9, label %ex, label %hd423; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]424; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd425; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0426; MBEC-NEXT: -- Explore context of: %tmp8 = add nuw i32 %tmp7, 1427; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp8 = add nuw i32 %tmp7, 1428; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp9 = icmp eq i32 %tmp8, %b429; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp9, label %ex, label %hd430; MBEC-NEXT: [F: nonnull_exec_ctx_1] tail call void @h(ptr %a)431; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]432; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd433; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0434; MBEC-NEXT: -- Explore context of: %tmp9 = icmp eq i32 %tmp8, %b435; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp9 = icmp eq i32 %tmp8, %b436; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp9, label %ex, label %hd437; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp8 = add nuw i32 %tmp7, 1438; MBEC-NEXT: [F: nonnull_exec_ctx_1] tail call void @h(ptr %a)439; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]440; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd441; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0442; MBEC-NEXT: -- Explore context of: br i1 %tmp9, label %ex, label %hd443; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp9, label %ex, label %hd444; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp9 = icmp eq i32 %tmp8, %b445; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp8 = add nuw i32 %tmp7, 1446; MBEC-NEXT: [F: nonnull_exec_ctx_1] tail call void @h(ptr %a)447; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]448; MBEC-NEXT: [F: nonnull_exec_ctx_1] br i1 %tmp3, label %ex, label %hd449; MBEC-NEXT: [F: nonnull_exec_ctx_1] %tmp3 = icmp eq i32 %b, 0450en:451 %tmp3 = icmp eq i32 %b, 0452 br i1 %tmp3, label %ex, label %hd453 454ex:455 %tmp5 = tail call i32 @g(ptr nonnull %a)456 ret i32 %tmp5457 458hd:459 %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]460 tail call void @h(ptr %a)461 %tmp8 = add nuw i32 %tmp7, 1462 %tmp9 = icmp eq i32 %tmp8, %b463 br i1 %tmp9, label %ex, label %hd464}465 466define i32 @nonnull_exec_ctx_2(ptr %a, i32 %b) nounwind willreturn {467; MBEC: -- Explore context of: %tmp3 = icmp eq i32 %b, 0468; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0469; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd470; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)471; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5472; MBEC-NEXT: -- Explore context of: br i1 %tmp3, label %ex, label %hd473; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd474; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)475; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5476; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0477; MBEC-NEXT: -- Explore context of: %tmp5 = tail call i32 @g(ptr nonnull %a)478; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)479; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5480; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd481; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0482; MBEC-NEXT: -- Explore context of: ret i32 %tmp5483; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5484; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)485; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd486; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0487; MBEC-NEXT: -- Explore context of: %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]488; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]489; MBEC-NEXT: [F: nonnull_exec_ctx_2] tail call void @h(ptr %a)490; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp8 = add nuw i32 %tmp7, 1491; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp9 = icmp eq i32 %tmp8, %b492; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp9, label %ex, label %hd493; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)494; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5495; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd496; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0497; MBEC-NEXT: -- Explore context of: tail call void @h(ptr %a)498; MBEC-NEXT: [F: nonnull_exec_ctx_2] tail call void @h(ptr %a)499; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp8 = add nuw i32 %tmp7, 1500; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp9 = icmp eq i32 %tmp8, %b501; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp9, label %ex, label %hd502; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)503; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5504; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]505; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd506; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0507; MBEC-NEXT: -- Explore context of: %tmp8 = add nuw i32 %tmp7, 1508; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp8 = add nuw i32 %tmp7, 1509; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp9 = icmp eq i32 %tmp8, %b510; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp9, label %ex, label %hd511; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)512; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5513; MBEC-NEXT: [F: nonnull_exec_ctx_2] tail call void @h(ptr %a)514; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]515; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd516; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0517; MBEC-NEXT: -- Explore context of: %tmp9 = icmp eq i32 %tmp8, %b518; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp9 = icmp eq i32 %tmp8, %b519; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp9, label %ex, label %hd520; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)521; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5522; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp8 = add nuw i32 %tmp7, 1523; MBEC-NEXT: [F: nonnull_exec_ctx_2] tail call void @h(ptr %a)524; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]525; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd526; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0527; MBEC-NEXT: -- Explore context of: br i1 %tmp9, label %ex, label %hd528; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp9, label %ex, label %hd529; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp5 = tail call i32 @g(ptr nonnull %a)530; MBEC-NEXT: [F: nonnull_exec_ctx_2] ret i32 %tmp5531; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp9 = icmp eq i32 %tmp8, %b532; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp8 = add nuw i32 %tmp7, 1533; MBEC-NEXT: [F: nonnull_exec_ctx_2] tail call void @h(ptr %a)534; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]535; MBEC-NEXT: [F: nonnull_exec_ctx_2] br i1 %tmp3, label %ex, label %hd536; MBEC-NEXT: [F: nonnull_exec_ctx_2] %tmp3 = icmp eq i32 %b, 0537en:538 %tmp3 = icmp eq i32 %b, 0539 br i1 %tmp3, label %ex, label %hd540 541ex:542 %tmp5 = tail call i32 @g(ptr nonnull %a)543 ret i32 %tmp5544 545hd:546 %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]547 tail call void @h(ptr %a)548 %tmp8 = add nuw i32 %tmp7, 1549 %tmp9 = icmp eq i32 %tmp8, %b550 br i1 %tmp9, label %ex, label %hd551}552