Skip to content

Commit 2e0f917

Browse files
committed
[test] precommit some tests for D143883 NFC
Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D144372
1 parent fdb9e6a commit 2e0f917

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
; TODO: https://alive2.llvm.org/ce/z/5eCiWi
5+
define i8 @urem_assume(i8 %x, i8 %n) {
6+
; CHECK-LABEL: @urem_assume(
7+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
8+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
9+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[X]], 1
10+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
11+
; CHECK-NEXT: ret i8 [[OUT]]
12+
;
13+
%cmp = icmp ult i8 %x, %n
14+
tail call void @llvm.assume(i1 %cmp)
15+
%add = add nuw i8 %x, 1
16+
%out = urem i8 %add, %n
17+
ret i8 %out
18+
}
19+
20+
; TODO: https://alive2.llvm.org/ce/z/MGgtYN
21+
define i8 @urem_assume_without_nuw(i8 %x, i8 %n) {
22+
; CHECK-LABEL: @urem_assume_without_nuw(
23+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
24+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
25+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
26+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
27+
; CHECK-NEXT: ret i8 [[OUT]]
28+
;
29+
%cmp = icmp ult i8 %x, %n
30+
tail call void @llvm.assume(i1 %cmp)
31+
%add = add i8 %x, 1
32+
%out = urem i8 %add, %n
33+
ret i8 %out
34+
}
35+
36+
; Negative test: The assume is false
37+
define i8 @urem_assume_eq(i8 %x, i8 %n) {
38+
; CHECK-LABEL: @urem_assume_eq(
39+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], [[N:%.*]]
40+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
41+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
42+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
43+
; CHECK-NEXT: ret i8 [[OUT]]
44+
;
45+
%cmp = icmp eq i8 %x, %n
46+
tail call void @llvm.assume(i1 %cmp)
47+
%add = add i8 %x, 1
48+
%out = urem i8 %add, %n
49+
ret i8 %out
50+
}
51+
52+
; Negative test: The assume is false
53+
define i8 @urem_assume_ne(i8 %x, i8 %n) {
54+
; CHECK-LABEL: @urem_assume_ne(
55+
; CHECK-NEXT: start:
56+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], [[N:%.*]]
57+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
58+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
59+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
60+
; CHECK-NEXT: ret i8 [[OUT]]
61+
;
62+
start:
63+
%cmp = icmp ne i8 %x, %n
64+
tail call void @llvm.assume(i1 %cmp)
65+
%add = add i8 %x, 1
66+
%out = urem i8 %add, %n
67+
ret i8 %out
68+
}
69+
70+
; Negative test: The add constant is not 1
71+
define i8 @urem_assume_with_unexpected_const(i8 %x, i8 %n) {
72+
; CHECK-LABEL: @urem_assume_with_unexpected_const(
73+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
74+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
75+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 2
76+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
77+
; CHECK-NEXT: ret i8 [[OUT]]
78+
;
79+
%cmp = icmp ult i8 %x, %n
80+
tail call void @llvm.assume(i1 %cmp)
81+
%add = add i8 %x, 2 ; Transform only when the constant is 1
82+
%out = urem i8 %add, %n
83+
ret i8 %out
84+
}
85+
86+
; TODO: https://alive2.llvm.org/ce/z/gNhZ2x
87+
define i8 @urem_without_assume(i8 %arg, i8 %arg2) {
88+
; CHECK-LABEL: @urem_without_assume(
89+
; CHECK-NEXT: [[X:%.*]] = urem i8 [[ARG:%.*]], [[ARG2:%.*]]
90+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
91+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[ARG2]]
92+
; CHECK-NEXT: ret i8 [[OUT]]
93+
;
94+
%x = urem i8 %arg, %arg2
95+
%add = add i8 %x, 1
96+
%out = urem i8 %add, %arg2
97+
ret i8 %out
98+
}
99+
100+
; TODO: https://alive2.llvm.org/ce/z/eHkgRa
101+
define i8 @urem_with_dominating_condition(i8 %x, i8 %n) {
102+
; CHECK-LABEL: @urem_with_dominating_condition(
103+
; CHECK-NEXT: [[COND:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
104+
; CHECK-NEXT: br i1 [[COND]], label [[DOTBB0:%.*]], label [[DOTBB1:%.*]]
105+
; CHECK: .bb0:
106+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
107+
; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[N]]
108+
; CHECK-NEXT: ret i8 [[OUT]]
109+
; CHECK: .bb1:
110+
; CHECK-NEXT: ret i8 0
111+
;
112+
%cond = icmp ult i8 %x, %n
113+
br i1 %cond, label %.bb0, label %.bb1 ; Should also works for a dominating condition
114+
.bb0:
115+
%add = add i8 %x, 1
116+
%out = urem i8 %add, %n
117+
ret i8 %out
118+
.bb1:
119+
ret i8 0
120+
}
121+
122+
declare void @llvm.assume(i1 noundef)

0 commit comments

Comments
 (0)