[InstCombine] add/move tests for sub-of-umax; NFC
This commit is contained in:
parent
b1c9d3d29a
commit
ad48fc35e2
|
|
@ -2129,26 +2129,3 @@ define <3 x i8> @umax_vector_splat_undef(<3 x i8> %x) {
|
|||
%r = call <3 x i8> @llvm.umax.v3i8(<3 x i8> %a, <3 x i8> <i8 13, i8 130, i8 130>)
|
||||
ret <3 x i8> %r
|
||||
}
|
||||
|
||||
define <3 x i8> @umax_sub_vec(<3 x i8> %x, <3 x i8> %y) {
|
||||
; CHECK-LABEL: @umax_sub_vec(
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = call <3 x i8> @llvm.usub.sat.v3i8(<3 x i8> [[X:%.*]], <3 x i8> [[Y:%.*]])
|
||||
; CHECK-NEXT: ret <3 x i8> [[TMP1]]
|
||||
;
|
||||
%u = call <3 x i8> @llvm.umax.v3i8(<3 x i8> %x, <3 x i8> %y)
|
||||
%r = sub <3 x i8> %u, %y
|
||||
ret <3 x i8> %r
|
||||
}
|
||||
|
||||
define i8 @umax_sub_use(i8 %x, i8 %y) {
|
||||
; CHECK-LABEL: @umax_sub_use(
|
||||
; CHECK-NEXT: [[U:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
|
||||
; CHECK-NEXT: call void @use(i8 [[U]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub i8 [[U]], [[Y]]
|
||||
; CHECK-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%u = call i8 @llvm.umax.i8(i8 %x, i8 %y)
|
||||
call void @use(i8 %u)
|
||||
%r = sub i8 %u, %y
|
||||
ret i8 %r
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
declare i5 @llvm.umin.i5(i5, i5)
|
||||
declare <2 x i8> @llvm.umin.v2i8(<2 x i8>, <2 x i8>)
|
||||
declare <2 x i8> @llvm.umax.v2i8(<2 x i8>, <2 x i8>)
|
||||
|
||||
declare i8 @llvm.smax.i8(i8, i8)
|
||||
declare i8 @llvm.smin.i8(i8, i8)
|
||||
|
|
@ -498,5 +499,74 @@ define i8 @umin_not_sub_intrinsic_uses(i8 %x, i8 %y) {
|
|||
ret i8 %subx
|
||||
}
|
||||
|
||||
define i8 @umax_sub_op0(i8 %x, i8 %y) {
|
||||
; CHECK-LABEL: @umax_sub_op0(
|
||||
; CHECK-NEXT: [[U:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub i8 [[U]], [[Y]]
|
||||
; CHECK-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%u = call i8 @llvm.umax.i8(i8 %y, i8 %x)
|
||||
%r = sub i8 %u, %y
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define <2 x i8> @umax_sub_op0_vec_commute(<2 x i8> %x, <2 x i8> %y) {
|
||||
; CHECK-LABEL: @umax_sub_op0_vec_commute(
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]])
|
||||
; CHECK-NEXT: ret <2 x i8> [[TMP1]]
|
||||
;
|
||||
%u = call <2 x i8> @llvm.umax.v2i8(<2 x i8> %x, <2 x i8> %y)
|
||||
%r = sub <2 x i8> %u, %y
|
||||
ret <2 x i8> %r
|
||||
}
|
||||
|
||||
define i8 @umax_sub_op0_use(i8 %x, i8 %y) {
|
||||
; CHECK-LABEL: @umax_sub_op0_use(
|
||||
; CHECK-NEXT: [[U:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
|
||||
; CHECK-NEXT: call void @use8(i8 [[U]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub i8 [[U]], [[Y]]
|
||||
; CHECK-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%u = call i8 @llvm.umax.i8(i8 %x, i8 %y)
|
||||
call void @use8(i8 %u)
|
||||
%r = sub i8 %u, %y
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define i8 @umax_sub_op1(i8 %x, i8 %y) {
|
||||
; CHECK-LABEL: @umax_sub_op1(
|
||||
; CHECK-NEXT: [[U:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub i8 [[Y]], [[U]]
|
||||
; CHECK-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%u = call i8 @llvm.umax.i8(i8 %x, i8 %y)
|
||||
%r = sub i8 %y, %u
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define <2 x i8> @umax_sub_op1_vec_commute(<2 x i8> %x, <2 x i8> %y) {
|
||||
; CHECK-LABEL: @umax_sub_op1_vec_commute(
|
||||
; CHECK-NEXT: [[U:%.*]] = call <2 x i8> @llvm.umax.v2i8(<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub <2 x i8> [[Y]], [[U]]
|
||||
; CHECK-NEXT: ret <2 x i8> [[R]]
|
||||
;
|
||||
%u = call <2 x i8> @llvm.umax.v2i8(<2 x i8> %x, <2 x i8> %y)
|
||||
%r = sub <2 x i8> %y, %u
|
||||
ret <2 x i8> %r
|
||||
}
|
||||
|
||||
define i8 @umax_sub_op1_use(i8 %x, i8 %y) {
|
||||
; CHECK-LABEL: @umax_sub_op1_use(
|
||||
; CHECK-NEXT: [[U:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
|
||||
; CHECK-NEXT: call void @use8(i8 [[U]])
|
||||
; CHECK-NEXT: [[R:%.*]] = sub i8 [[Y]], [[U]]
|
||||
; CHECK-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%u = call i8 @llvm.umax.i8(i8 %x, i8 %y)
|
||||
call void @use8(i8 %u)
|
||||
%r = sub i8 %y, %u
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
declare void @use8(i8)
|
||||
declare void @use32(i32 %u)
|
||||
|
|
|
|||
Loading…
Reference in New Issue