Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit ea1119a

Browse files
committed
[InstSimplify] add tests for fcmp and known positive; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345722 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 125c8f9 commit ea1119a

File tree

1 file changed

+100
-20
lines changed

1 file changed

+100
-20
lines changed

test/Transforms/InstSimplify/floating-point-compare.ll

Lines changed: 100 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -234,44 +234,84 @@ define i1 @orderedLessZeroPowi(double,double) {
234234
ret i1 %olt
235235
}
236236

237-
define i1 @orderedLessZeroUIToFP(i32 %x) {
238-
; CHECK-LABEL: @orderedLessZeroUIToFP(
237+
define i1 @UIToFP_is_nan_or_positive_or_zero(i32 %x) {
238+
; CHECK-LABEL: @UIToFP_is_nan_or_positive_or_zero(
239239
; CHECK-NEXT: ret i1 true
240240
;
241241
%a = uitofp i32 %x to float
242-
%uge = fcmp uge float %a, 0.000000e+00
243-
ret i1 %uge
242+
%r = fcmp uge float %a, 0.000000e+00
243+
ret i1 %r
244244
}
245245

246-
define <2 x i1> @orderedLessZeroUIToFP_vec(<2 x i32> %x) {
247-
; CHECK-LABEL: @orderedLessZeroUIToFP_vec(
246+
define <2 x i1> @UIToFP_is_nan_or_positive_or_zero_vec(<2 x i32> %x) {
247+
; CHECK-LABEL: @UIToFP_is_nan_or_positive_or_zero_vec(
248248
; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
249249
;
250250
%a = uitofp <2 x i32> %x to <2 x float>
251-
%uge = fcmp uge <2 x float> %a, zeroinitializer
252-
ret <2 x i1> %uge
251+
%r = fcmp uge <2 x float> %a, zeroinitializer
252+
ret <2 x i1> %r
253253
}
254254

255-
define i1 @orderedLessZeroUIToFP_nnan(i32 %x) {
256-
; CHECK-LABEL: @orderedLessZeroUIToFP_nnan(
255+
define i1 @UIToFP_nnan_is_positive_or_zero(i32 %x) {
256+
; CHECK-LABEL: @UIToFP_nnan_is_positive_or_zero(
257257
; CHECK-NEXT: [[A:%.*]] = uitofp i32 [[X:%.*]] to float
258-
; CHECK-NEXT: [[UGE:%.*]] = fcmp nnan oge float [[A]], 0.000000e+00
259-
; CHECK-NEXT: ret i1 [[UGE]]
258+
; CHECK-NEXT: [[R:%.*]] = fcmp nnan oge float [[A]], 0.000000e+00
259+
; CHECK-NEXT: ret i1 [[R]]
260260
;
261261
%a = uitofp i32 %x to float
262-
%uge = fcmp nnan oge float %a, 0.000000e+00
263-
ret i1 %uge
262+
%r = fcmp nnan oge float %a, 0.000000e+00
263+
ret i1 %r
264264
}
265265

266-
define <2 x i1> @orderedLessZeroUIToFP_nnan_vec(<2 x i32> %x) {
267-
; CHECK-LABEL: @orderedLessZeroUIToFP_nnan_vec(
266+
define <2 x i1> @UIToFP_nnan_is_positive_or_zero_vec(<2 x i32> %x) {
267+
; CHECK-LABEL: @UIToFP_nnan_is_positive_or_zero_vec(
268268
; CHECK-NEXT: [[A:%.*]] = uitofp <2 x i32> [[X:%.*]] to <2 x float>
269-
; CHECK-NEXT: [[UGE:%.*]] = fcmp nnan oge <2 x float> [[A]], zeroinitializer
270-
; CHECK-NEXT: ret <2 x i1> [[UGE]]
269+
; CHECK-NEXT: [[R:%.*]] = fcmp nnan oge <2 x float> [[A]], zeroinitializer
270+
; CHECK-NEXT: ret <2 x i1> [[R]]
271+
;
272+
%a = uitofp <2 x i32> %x to <2 x float>
273+
%r = fcmp nnan oge <2 x float> %a, zeroinitializer
274+
ret <2 x i1> %r
275+
}
276+
277+
define i1 @UIToFP_is_not_negative(i32 %x) {
278+
; CHECK-LABEL: @UIToFP_is_not_negative(
279+
; CHECK-NEXT: ret i1 false
280+
;
281+
%a = uitofp i32 %x to float
282+
%r = fcmp olt float %a, 0.000000e+00
283+
ret i1 %r
284+
}
285+
286+
define <2 x i1> @UIToFP_is_not_negative_vec(<2 x i32> %x) {
287+
; CHECK-LABEL: @UIToFP_is_not_negative_vec(
288+
; CHECK-NEXT: ret <2 x i1> zeroinitializer
271289
;
272290
%a = uitofp <2 x i32> %x to <2 x float>
273-
%uge = fcmp nnan oge <2 x float> %a, zeroinitializer
274-
ret <2 x i1> %uge
291+
%r = fcmp olt <2 x float> %a, zeroinitializer
292+
ret <2 x i1> %r
293+
}
294+
295+
define i1 @UIToFP_nnan_is_not_negative(i32 %x) {
296+
; CHECK-LABEL: @UIToFP_nnan_is_not_negative(
297+
; CHECK-NEXT: [[A:%.*]] = uitofp i32 [[X:%.*]] to float
298+
; CHECK-NEXT: [[R:%.*]] = fcmp nnan ult float [[A]], 0.000000e+00
299+
; CHECK-NEXT: ret i1 [[R]]
300+
;
301+
%a = uitofp i32 %x to float
302+
%r = fcmp nnan ult float %a, 0.000000e+00
303+
ret i1 %r
304+
}
305+
306+
define <2 x i1> @UIToFP_nnan_is_not_negative_vec(<2 x i32> %x) {
307+
; CHECK-LABEL: @UIToFP_nnan_is_not_negative_vec(
308+
; CHECK-NEXT: [[A:%.*]] = uitofp <2 x i32> [[X:%.*]] to <2 x float>
309+
; CHECK-NEXT: [[R:%.*]] = fcmp nnan ult <2 x float> [[A]], zeroinitializer
310+
; CHECK-NEXT: ret <2 x i1> [[R]]
311+
;
312+
%a = uitofp <2 x i32> %x to <2 x float>
313+
%r = fcmp nnan ult <2 x float> %a, zeroinitializer
314+
ret <2 x i1> %r
275315
}
276316

277317
define i1 @fabs_is_nan_or_positive_or_zero(double %x) {
@@ -314,6 +354,46 @@ define <2 x i1> @fabs_nnan_is_positive_or_zero_vec(<2 x double> %x) {
314354
ret <2 x i1> %cmp
315355
}
316356

357+
define i1 @fabs_is_not_negative(double %x) {
358+
; CHECK-LABEL: @fabs_is_not_negative(
359+
; CHECK-NEXT: ret i1 false
360+
;
361+
%fabs = tail call double @llvm.fabs.f64(double %x)
362+
%cmp = fcmp olt double %fabs, 0.0
363+
ret i1 %cmp
364+
}
365+
366+
define <2 x i1> @fabs_is_not_negative_vec(<2 x double> %x) {
367+
; CHECK-LABEL: @fabs_is_not_negative_vec(
368+
; CHECK-NEXT: ret <2 x i1> zeroinitializer
369+
;
370+
%fabs = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %x)
371+
%cmp = fcmp olt <2 x double> %fabs, zeroinitializer
372+
ret <2 x i1> %cmp
373+
}
374+
375+
define i1 @fabs_nnan_is_not_negative(double %x) {
376+
; CHECK-LABEL: @fabs_nnan_is_not_negative(
377+
; CHECK-NEXT: [[FABS:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
378+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ult double [[FABS]], 0.000000e+00
379+
; CHECK-NEXT: ret i1 [[CMP]]
380+
;
381+
%fabs = tail call double @llvm.fabs.f64(double %x)
382+
%cmp = fcmp nnan ult double %fabs, 0.0
383+
ret i1 %cmp
384+
}
385+
386+
define <2 x i1> @fabs_nnan_is_not_negative_vec(<2 x double> %x) {
387+
; CHECK-LABEL: @fabs_nnan_is_not_negative_vec(
388+
; CHECK-NEXT: [[FABS:%.*]] = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> [[X:%.*]])
389+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ult <2 x double> [[FABS]], zeroinitializer
390+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
391+
;
392+
%fabs = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %x)
393+
%cmp = fcmp nnan ult <2 x double> %fabs, zeroinitializer
394+
ret <2 x i1> %cmp
395+
}
396+
317397
define i1 @orderedLessZeroSelect(float, float) {
318398
; CHECK-LABEL: @orderedLessZeroSelect(
319399
; CHECK-NEXT: ret i1 true

0 commit comments

Comments
 (0)