1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2
2
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
3
4
- ; TODO: https://alive2.llvm.org/ce/z/5eCiWi
4
+ ; https://alive2.llvm.org/ce/z/5eCiWi
5
5
define i8 @urem_assume (i8 %x , i8 %n ) {
6
6
; CHECK-LABEL: @urem_assume(
7
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
7
+ ; CHECK-NEXT: [[X_FR:%.*]] = freeze i8 [[X:%.*]]
8
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X_FR]], [[N:%.*]]
8
9
; 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]]
10
+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X_FR]], 1
11
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[ADD]], [[N]]
12
+ ; CHECK-NEXT: [[OUT:%.*]] = select i1 [[TMP1]], i8 0, i8 [[ADD]]
11
13
; CHECK-NEXT: ret i8 [[OUT]]
12
14
;
13
15
%cmp = icmp ult i8 %x , %n
@@ -17,13 +19,15 @@ define i8 @urem_assume(i8 %x, i8 %n) {
17
19
ret i8 %out
18
20
}
19
21
20
- ; TODO: https://alive2.llvm.org/ce/z/MGgtYN
22
+ ; https://alive2.llvm.org/ce/z/MGgtYN
21
23
define i8 @urem_assume_without_nuw (i8 %x , i8 %n ) {
22
24
; CHECK-LABEL: @urem_assume_without_nuw(
23
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[N:%.*]]
25
+ ; CHECK-NEXT: [[X_FR:%.*]] = freeze i8 [[X:%.*]]
26
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X_FR]], [[N:%.*]]
24
27
; 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]]
28
+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X_FR]], 1
29
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[ADD]], [[N]]
30
+ ; CHECK-NEXT: [[OUT:%.*]] = select i1 [[TMP1]], i8 0, i8 [[ADD]]
27
31
; CHECK-NEXT: ret i8 [[OUT]]
28
32
;
29
33
%cmp = icmp ult i8 %x , %n
@@ -83,12 +87,14 @@ define i8 @urem_assume_with_unexpected_const(i8 %x, i8 %n) {
83
87
ret i8 %out
84
88
}
85
89
86
- ; TODO: https://alive2.llvm.org/ce/z/gNhZ2x
90
+ ; https://alive2.llvm.org/ce/z/gNhZ2x
87
91
define i8 @urem_without_assume (i8 %arg , i8 %arg2 ) {
88
92
; CHECK-LABEL: @urem_without_assume(
89
93
; CHECK-NEXT: [[X:%.*]] = urem i8 [[ARG:%.*]], [[ARG2:%.*]]
90
- ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
91
- ; CHECK-NEXT: [[OUT:%.*]] = urem i8 [[ADD]], [[ARG2]]
94
+ ; CHECK-NEXT: [[X_FR:%.*]] = freeze i8 [[X]]
95
+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X_FR]], 1
96
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[ADD]], [[ARG2]]
97
+ ; CHECK-NEXT: [[OUT:%.*]] = select i1 [[TMP1]], i8 0, i8 [[ADD]]
92
98
; CHECK-NEXT: ret i8 [[OUT]]
93
99
;
94
100
%x = urem i8 %arg , %arg2
0 commit comments