1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

[InstSimplify] Add additional abs intrinsic icmp tests (NFC)

While abs >= 0 already folds, some variations thereon don't.
This commit is contained in:
Nikita Popov 2020-08-12 22:21:47 +02:00
parent 5901f3abc5
commit fe50645fc5

View File

@ -1,6 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s
declare i8 @llvm.abs.i8(i8, i1)
declare i32 @llvm.abs.i32(i32, i1)
declare <3 x i82> @llvm.abs.v3i82(<3 x i82>, i1)
declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)
@ -182,3 +183,25 @@ define <4 x i1> @abs_known_not_int_min_vec(<4 x i32> %x) {
ret <4 x i1> %c2
}
; If it's >= 0 it should be >= -1 as well.
define i1 @abs_nsw_sge_neg(i32 %x) {
; CHECK-LABEL: @abs_nsw_sge_neg(
; CHECK-NEXT: [[ABS:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)
; CHECK-NEXT: [[C:%.*]] = icmp sge i32 [[ABS]], -1
; CHECK-NEXT: ret i1 [[C]]
;
%abs = call i32 @llvm.abs.i32(i32 %x, i1 true)
%c = icmp sge i32 %abs, -1
ret i1 %c
}
define i1 @abs_ule_int_min(i8 %x) {
; CHECK-LABEL: @abs_ule_int_min(
; CHECK-NEXT: [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[X:%.*]], i1 false)
; CHECK-NEXT: [[C:%.*]] = icmp ule i8 [[ABS]], -128
; CHECK-NEXT: ret i1 [[C]]
;
%abs = call i8 @llvm.abs.i8(i8 %x, i1 false)
%c = icmp ule i8 %abs, 128
ret i1 %c
}