122 lines · plain
1; RUN: opt -passes=simplifycfg -S --preserve-ll-uselistorder %s | FileCheck %s2; REQUIRES: x86-registered-target3; CHECK-LABEL: @n4 5; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.6; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.7 8%rec9 = type { i16, i32, i32 }9 10@a = global [1 x [1 x %rec9]] zeroinitializer11 12define i16 @n() {13 br label %..split_crit_edge14 15..split_crit_edge: ; preds = %016 br label %.split17 18bb4.us4: ; preds = %bb2.split.us32, %bb6.us2819 %i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]20 br label %g.exit4.us2121 22bb1.i.us14: ; preds = %bb4.us423 br label %g.exit4.us2124 25g.exit4.us21: ; preds = %bb1.i.us14, %g.exit4.critedge.us926 %i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]27 br label %bb6.us2828 29bb5.us26: ; preds = %g.exit4.us2130 br label %bb6.us2831 32bb6.us28: ; preds = %bb5.us26, %g.exit4.us2133 %i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]34 %_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 135 br label %bb4.us436 37bb4.us.us: ; preds = %bb2.split.us.us, %bb6.us.us38 %i.4.01.us.us = phi i16 [ %_tmp49.us.us, %bb6.us.us ]39 br label %bb1.i.us.us40 41bb1.i.us.us: ; preds = %bb4.us.us42 br label %g.exit4.us.us43 44g.exit4.us.us: ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us45 %i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]46 br label %bb5.us.us47 48bb5.us.us: ; preds = %g.exit4.us.us49 br label %bb6.us.us50 51bb6.us.us: ; preds = %bb5.us.us, %g.exit4.us.us52 %i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]53 %_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 154 br label %bb4.us.us55 56 57.split: ; preds = %..split_crit_edge58 br label %bb259 60bb2: ; preds = %.split, %bb761 %h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]62 br label %bb2.bb2.split_crit_edge63 64bb2.bb2.split_crit_edge: ; preds = %bb265 br label %bb2.split66 67bb2.split.us: ; preds = %bb268 br label %bb4.us69 70bb4.us: ; preds = %bb6.us, %bb2.split.us71 %i.4.01.us = phi i16 [ 0, %bb2.split.us ]72 br label %bb1.i.us73 74g.exit4.critedge.us: ; preds = %bb4.us75 br label %g.exit4.us76 77bb1.i.us: ; preds = %bb4.us78 br label %g.exit4.us79 80g.exit4.us: ; preds = %bb1.i.us, %g.exit4.critedge.us81 %i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]82 br label %bb5.us83 84bb5.us: ; preds = %g.exit4.us85 br label %bb786 87bb2.split: ; preds = %bb2.bb2.split_crit_edge88 br label %bb489 90bb4: ; preds = %bb2.split, %bb691 %i.4.01 = phi i16 [ 0, %bb2.split ]92 %_tmp16 = getelementptr [1 x [1 x %rec9]], ptr @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 093 %_tmp17 = load i16, ptr %_tmp16, align 194 br label %g.exit4.critedge95 96bb1.i: ; preds = %bb497 br label %g.exit498 99g.exit4.critedge: ; preds = %bb4100 %_tmp28.c = getelementptr [1 x [1 x %rec9]], ptr @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1101 %_tmp29.c = load i32, ptr %_tmp28.c, align 1102 %_tmp30.c = trunc i32 %_tmp29.c to i16103 br label %g.exit4104 105g.exit4: ; preds = %g.exit4.critedge, %bb1.i106 %i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]107 %_tmp41 = getelementptr [1 x [1 x %rec9]], ptr @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2108 br label %bb6109 110bb5: ; preds = %g.exit4111 br label %bb6112 113bb6: ; preds = %bb5, %g.exit4114 %i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]115 %_tmp49 = add nuw nsw i16 %i.4.03, 1116 br label %bb7117 118bb7: ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa119 %_tmp53 = add nsw i16 %h.3.0, 1120 br label %bb2121}122