Skip to content

Commit 8edfccb

Browse files
committed
[InstCombine] Add pre-commit tests. NFC.
1 parent dac1829 commit 8edfccb

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-shl-nuw.ll

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,75 @@ define <2 x i1> @icmp_ugt_16x2(<2 x i32>) {
9090
%d = icmp ugt <2 x i32> %c, <i32 1048575, i32 1048575>
9191
ret <2 x i1> %d
9292
}
93+
94+
define i1 @fold_icmp_shl_nuw_c1(i32 %x) {
95+
; CHECK-LABEL: @fold_icmp_shl_nuw_c1(
96+
; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[X:%.*]], 12
97+
; CHECK-NEXT: [[AND:%.*]] = and i32 [[LSHR]], 15
98+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i32 2, [[AND]]
99+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 4
100+
; CHECK-NEXT: ret i1 [[CMP]]
101+
;
102+
%lshr = lshr i32 %x, 12
103+
%and = and i32 %lshr, 15
104+
%shl = shl nuw i32 2, %and
105+
%cmp = icmp ult i32 %shl, 4
106+
ret i1 %cmp
107+
}
108+
109+
define i1 @fold_icmp_shl_nuw_c2(i32 %x) {
110+
; CHECK-LABEL: @fold_icmp_shl_nuw_c2(
111+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 16, [[X:%.*]]
112+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 64
113+
; CHECK-NEXT: ret i1 [[CMP]]
114+
;
115+
%shl = shl nuw i32 16, %x
116+
%cmp = icmp ult i32 %shl, 64
117+
ret i1 %cmp
118+
}
119+
120+
define i1 @fold_icmp_shl_nuw_c2_non_pow2(i32 %x) {
121+
; CHECK-LABEL: @fold_icmp_shl_nuw_c2_non_pow2(
122+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 48, [[X:%.*]]
123+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 192
124+
; CHECK-NEXT: ret i1 [[CMP]]
125+
;
126+
%shl = shl nuw i32 48, %x
127+
%cmp = icmp ult i32 %shl, 192
128+
ret i1 %cmp
129+
}
130+
131+
define i1 @fold_icmp_shl_nuw_c2_div_non_pow2(i32 %x) {
132+
; CHECK-LABEL: @fold_icmp_shl_nuw_c2_div_non_pow2(
133+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 2, [[X:%.*]]
134+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 60
135+
; CHECK-NEXT: ret i1 [[CMP]]
136+
;
137+
%shl = shl nuw i32 2, %x
138+
%cmp = icmp ult i32 %shl, 60
139+
ret i1 %cmp
140+
}
141+
142+
; Negative tests
143+
144+
define i1 @fold_icmp_shl_nuw_c2_indivisible(i32 %x) {
145+
; CHECK-LABEL: @fold_icmp_shl_nuw_c2_indivisible(
146+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 16, [[X:%.*]]
147+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 63
148+
; CHECK-NEXT: ret i1 [[CMP]]
149+
;
150+
%shl = shl nuw i32 16, %x
151+
%cmp = icmp ult i32 %shl, 63
152+
ret i1 %cmp
153+
}
154+
155+
define i1 @fold_icmp_shl_c2_without_nuw(i32 %x) {
156+
; CHECK-LABEL: @fold_icmp_shl_c2_without_nuw(
157+
; CHECK-NEXT: [[SHL:%.*]] = shl i32 16, [[X:%.*]]
158+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SHL]], 64
159+
; CHECK-NEXT: ret i1 [[CMP]]
160+
;
161+
%shl = shl i32 16, %x
162+
%cmp = icmp ult i32 %shl, 64
163+
ret i1 %cmp
164+
}

0 commit comments

Comments
 (0)