forked from OSchip/llvm-project
123 lines
4.6 KiB
LLVM
123 lines
4.6 KiB
LLVM
; RUN: opt -simplifycfg -S --preserve-ll-uselistorder %s | FileCheck %s
|
|
; REQUIRES: x86-registered-target
|
|
; CHECK-LABEL: @n
|
|
; CHECK: uselistorder i16 0, { 3, 2, 4, 1, 5, 0, 6 }
|
|
|
|
; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.
|
|
; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.
|
|
|
|
%rec9 = type { i16, i32, i32 }
|
|
|
|
@a = global [1 x [1 x %rec9]] zeroinitializer
|
|
|
|
define i16 @n() {
|
|
br label %..split_crit_edge
|
|
|
|
..split_crit_edge: ; preds = %0
|
|
br label %.split
|
|
|
|
bb4.us4: ; preds = %bb2.split.us32, %bb6.us28
|
|
%i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]
|
|
br label %g.exit4.us21
|
|
|
|
bb1.i.us14: ; preds = %bb4.us4
|
|
br label %g.exit4.us21
|
|
|
|
g.exit4.us21: ; preds = %bb1.i.us14, %g.exit4.critedge.us9
|
|
%i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]
|
|
br label %bb6.us28
|
|
|
|
bb5.us26: ; preds = %g.exit4.us21
|
|
br label %bb6.us28
|
|
|
|
bb6.us28: ; preds = %bb5.us26, %g.exit4.us21
|
|
%i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]
|
|
%_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 1
|
|
br label %bb4.us4
|
|
|
|
bb4.us.us: ; preds = %bb2.split.us.us, %bb6.us.us
|
|
%i.4.01.us.us = phi i16 [ %_tmp49.us.us, %bb6.us.us ]
|
|
br label %bb1.i.us.us
|
|
|
|
bb1.i.us.us: ; preds = %bb4.us.us
|
|
br label %g.exit4.us.us
|
|
|
|
g.exit4.us.us: ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us
|
|
%i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]
|
|
br label %bb5.us.us
|
|
|
|
bb5.us.us: ; preds = %g.exit4.us.us
|
|
br label %bb6.us.us
|
|
|
|
bb6.us.us: ; preds = %bb5.us.us, %g.exit4.us.us
|
|
%i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]
|
|
%_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 1
|
|
br label %bb4.us.us
|
|
|
|
|
|
.split: ; preds = %..split_crit_edge
|
|
br label %bb2
|
|
|
|
bb2: ; preds = %.split, %bb7
|
|
%h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]
|
|
br label %bb2.bb2.split_crit_edge
|
|
|
|
bb2.bb2.split_crit_edge: ; preds = %bb2
|
|
br label %bb2.split
|
|
|
|
bb2.split.us: ; preds = %bb2
|
|
br label %bb4.us
|
|
|
|
bb4.us: ; preds = %bb6.us, %bb2.split.us
|
|
%i.4.01.us = phi i16 [ 0, %bb2.split.us ]
|
|
br label %bb1.i.us
|
|
|
|
g.exit4.critedge.us: ; preds = %bb4.us
|
|
br label %g.exit4.us
|
|
|
|
bb1.i.us: ; preds = %bb4.us
|
|
br label %g.exit4.us
|
|
|
|
g.exit4.us: ; preds = %bb1.i.us, %g.exit4.critedge.us
|
|
%i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]
|
|
br label %bb5.us
|
|
|
|
bb5.us: ; preds = %g.exit4.us
|
|
br label %bb7
|
|
|
|
bb2.split: ; preds = %bb2.bb2.split_crit_edge
|
|
br label %bb4
|
|
|
|
bb4: ; preds = %bb2.split, %bb6
|
|
%i.4.01 = phi i16 [ 0, %bb2.split ]
|
|
%_tmp16 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 0
|
|
%_tmp17 = load i16, i16* %_tmp16, align 1
|
|
br label %g.exit4.critedge
|
|
|
|
bb1.i: ; preds = %bb4
|
|
br label %g.exit4
|
|
|
|
g.exit4.critedge: ; preds = %bb4
|
|
%_tmp28.c = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1
|
|
%_tmp29.c = load i32, i32* %_tmp28.c, align 1
|
|
%_tmp30.c = trunc i32 %_tmp29.c to i16
|
|
br label %g.exit4
|
|
|
|
g.exit4: ; preds = %g.exit4.critedge, %bb1.i
|
|
%i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]
|
|
%_tmp41 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2
|
|
br label %bb6
|
|
|
|
bb5: ; preds = %g.exit4
|
|
br label %bb6
|
|
|
|
bb6: ; preds = %bb5, %g.exit4
|
|
%i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]
|
|
%_tmp49 = add nuw nsw i16 %i.4.03, 1
|
|
br label %bb7
|
|
|
|
bb7: ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa
|
|
%_tmp53 = add nsw i16 %h.3.0, 1
|
|
br label %bb2
|
|
}
|