brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.6 KiB · f3360f7 Raw
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