Skip to content

Commit ae8d020

Browse files
committed
[SimplifyCFG] Add test for sinking div/rem with const remainder; NFC
1 parent 12b88f8 commit ae8d020

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

llvm/test/Transforms/SimplifyCFG/sink-and-convert-switch.ll

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,85 @@ bb5:
4444
call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %y)
4545
ret void
4646
}
47+
48+
define i64 @dont_make_div_variable(i64 noundef %x, i64 noundef %i) {
49+
; CHECK-LABEL: define i64 @dont_make_div_variable(
50+
; CHECK-SAME: i64 noundef [[X:%.*]], i64 noundef [[I:%.*]]) {
51+
; CHECK-NEXT: [[ENTRY:.*:]]
52+
; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub nsw i64 [[I]], 9
53+
; CHECK-NEXT: [[SWITCH_OFFSET:%.*]] = add nsw i64 [[SWITCH_TABLEIDX]], 9
54+
; CHECK-NEXT: [[DIV6:%.*]] = udiv i64 [[X]], [[SWITCH_OFFSET]]
55+
; CHECK-NEXT: ret i64 [[DIV6]]
56+
;
57+
entry:
58+
switch i64 %i, label %sw.default [
59+
i64 9, label %sw.bb
60+
i64 10, label %sw.bb1
61+
i64 11, label %sw.bb3
62+
i64 12, label %sw.bb5
63+
]
64+
65+
sw.bb:
66+
%div = udiv i64 %x, 9
67+
br label %return
68+
69+
sw.bb1:
70+
%div2 = udiv i64 %x, 10
71+
br label %return
72+
73+
sw.bb3:
74+
%div4 = udiv i64 %x, 11
75+
br label %return
76+
77+
sw.bb5:
78+
%div6 = udiv i64 %x, 12
79+
br label %return
80+
81+
sw.default:
82+
unreachable
83+
84+
return:
85+
%retval.0 = phi i64 [ %div6, %sw.bb5 ], [ %div4, %sw.bb3 ], [ %div2, %sw.bb1 ], [ %div, %sw.bb ]
86+
ret i64 %retval.0
87+
}
88+
89+
define i64 @okay_to_make_div_variable(i64 noundef %x, i64 noundef %i) {
90+
; CHECK-LABEL: define i64 @okay_to_make_div_variable(
91+
; CHECK-SAME: i64 noundef [[X:%.*]], i64 noundef [[I:%.*]]) {
92+
; CHECK-NEXT: [[ENTRY:.*:]]
93+
; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub nsw i64 [[I]], 9
94+
; CHECK-NEXT: [[SWITCH_OFFSET:%.*]] = add nsw i64 [[SWITCH_TABLEIDX]], 9
95+
; CHECK-NEXT: [[DIV6:%.*]] = udiv i64 [[SWITCH_OFFSET]], [[X]]
96+
; CHECK-NEXT: ret i64 [[DIV6]]
97+
;
98+
entry:
99+
switch i64 %i, label %sw.default [
100+
i64 9, label %sw.bb
101+
i64 10, label %sw.bb1
102+
i64 11, label %sw.bb3
103+
i64 12, label %sw.bb5
104+
]
105+
106+
sw.bb:
107+
%div = udiv i64 9, %x
108+
br label %return
109+
110+
sw.bb1:
111+
%div2 = udiv i64 10, %x
112+
br label %return
113+
114+
sw.bb3:
115+
%div4 = udiv i64 11, %x
116+
br label %return
117+
118+
sw.bb5:
119+
%div6 = udiv i64 12, %x
120+
br label %return
121+
122+
sw.default:
123+
unreachable
124+
125+
return:
126+
%retval.0 = phi i64 [ %div6, %sw.bb5 ], [ %div4, %sw.bb3 ], [ %div2, %sw.bb1 ], [ %div, %sw.bb ]
127+
ret i64 %retval.0
128+
}

0 commit comments

Comments
 (0)