From: Sanjay Patel Date: Fri, 17 Sep 2021 18:47:49 +0000 (-0400) Subject: [InstCombine] add tests for min/max intrinsics with offset operand; NFC X-Git-Tag: upstream/15.0.7~31197 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6da35036023d9184bc2578c9c9baff76dd70c43e;p=platform%2Fupstream%2Fllvm.git [InstCombine] add tests for min/max intrinsics with offset operand; NFC --- diff --git a/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll b/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll index 27d045e..d0d65f8 100644 --- a/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll +++ b/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll @@ -1866,3 +1866,219 @@ define void @cmyk_commute11(i8 %r, i8 %g, i8 %b) { call void @use4(i8 %ck, i8 %mk, i8 %yk, i8 %k) ret void } + +define i8 @smax_offset(i8 %x) { +; CHECK-LABEL: @smax_offset( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], 3 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[A]], i8 -124) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nsw i8 %x, 3 + %m = call i8 @llvm.smax.i8(i8 %a, i8 -124) + ret i8 %m +} + +define i8 @smax_offset_limit(i8 %x) { +; CHECK-LABEL: @smax_offset_limit( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], 3 +; CHECK-NEXT: ret i8 [[A]] +; + %a = add nsw i8 %x, 3 + %m = call i8 @llvm.smax.i8(i8 %a, i8 -125) + ret i8 %m +} + +define i8 @smax_offset_overflow(i8 %x) { +; CHECK-LABEL: @smax_offset_overflow( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], 3 +; CHECK-NEXT: ret i8 [[A]] +; + %a = add nsw i8 %x, 3 + %m = call i8 @llvm.smax.i8(i8 %a, i8 -126) + ret i8 %m +} + +define i8 @smax_offset_may_wrap(i8 %x) { +; CHECK-LABEL: @smax_offset_may_wrap( +; CHECK-NEXT: [[A:%.*]] = add i8 [[X:%.*]], 3 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[A]], i8 -124) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add i8 %x, 3 + %m = call i8 @llvm.smax.i8(i8 %a, i8 -124) + ret i8 %m +} + +define i8 @smax_offset_uses(i8 %x) { +; CHECK-LABEL: @smax_offset_uses( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], 3 +; CHECK-NEXT: call void @use(i8 [[A]]) +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[A]], i8 -124) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nsw i8 %x, 3 + call void @use(i8 %a) + %m = call i8 @llvm.smax.i8(i8 %a, i8 -124) + ret i8 %m +} + +define <3 x i8> @smin_offset(<3 x i8> %x) { +; CHECK-LABEL: @smin_offset( +; CHECK-NEXT: [[A:%.*]] = add nsw <3 x i8> [[X:%.*]], +; CHECK-NEXT: [[M:%.*]] = call <3 x i8> @llvm.smin.v3i8(<3 x i8> [[A]], <3 x i8> ) +; CHECK-NEXT: ret <3 x i8> [[M]] +; + %a = add nsw <3 x i8> %x, + %m = call <3 x i8> @llvm.smin.v3i8(<3 x i8> %a, <3 x i8> ) + ret <3 x i8> %m +} + +define i8 @smin_offset_limit(i8 %x) { +; CHECK-LABEL: @smin_offset_limit( +; CHECK-NEXT: ret i8 -3 +; + %a = add nsw i8 %x, 125 + %m = call i8 @llvm.smin.i8(i8 %a, i8 -3) + ret i8 %m +} + +define i8 @smin_offset_overflow(i8 %x) { +; CHECK-LABEL: @smin_offset_overflow( +; CHECK-NEXT: ret i8 -3 +; + %a = add nsw i8 %x, 126 + %m = call i8 @llvm.smin.i8(i8 %a, i8 -3) + ret i8 %m +} + +define i8 @smin_offset_may_wrap(i8 %x) { +; CHECK-LABEL: @smin_offset_may_wrap( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], 124 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[A]], i8 -3) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nuw i8 %x, 124 + %m = call i8 @llvm.smin.i8(i8 %a, i8 -3) + ret i8 %m +} + +define i8 @smin_offset_uses(i8 %x) { +; CHECK-LABEL: @smin_offset_uses( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], 124 +; CHECK-NEXT: call void @use(i8 [[A]]) +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[A]], i8 -3) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nsw i8 %x, 124 + call void @use(i8 %a) + %m = call i8 @llvm.smin.i8(i8 %a, i8 -3) + ret i8 %m +} + +define <3 x i8> @umax_offset(<3 x i8> %x) { +; CHECK-LABEL: @umax_offset( +; CHECK-NEXT: [[A:%.*]] = add nuw <3 x i8> [[X:%.*]], +; CHECK-NEXT: [[M:%.*]] = call <3 x i8> @llvm.umax.v3i8(<3 x i8> [[A]], <3 x i8> ) +; CHECK-NEXT: ret <3 x i8> [[M]] +; + %a = add nuw <3 x i8> %x, + %m = call <3 x i8> @llvm.umax.v3i8(<3 x i8> %a, <3 x i8> ) + ret <3 x i8> %m +} + +define i8 @umax_offset_limit(i8 %x) { +; CHECK-LABEL: @umax_offset_limit( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], 3 +; CHECK-NEXT: ret i8 [[A]] +; + %a = add nuw i8 %x, 3 + %m = call i8 @llvm.umax.i8(i8 %a, i8 3) + ret i8 %m +} + +define i8 @umax_offset_overflow(i8 %x) { +; CHECK-LABEL: @umax_offset_overflow( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], 3 +; CHECK-NEXT: ret i8 [[A]] +; + %a = add nuw i8 %x, 3 + %m = call i8 @llvm.umax.i8(i8 %a, i8 2) + ret i8 %m +} + +define i8 @umax_offset_may_wrap(i8 %x) { +; CHECK-LABEL: @umax_offset_may_wrap( +; CHECK-NEXT: [[A:%.*]] = add i8 [[X:%.*]], 3 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[A]], i8 4) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add i8 %x, 3 + %m = call i8 @llvm.umax.i8(i8 %a, i8 4) + ret i8 %m +} + +define i8 @umax_offset_uses(i8 %x) { +; CHECK-LABEL: @umax_offset_uses( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], 3 +; CHECK-NEXT: call void @use(i8 [[A]]) +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[A]], i8 4) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nuw i8 %x, 3 + call void @use(i8 %a) + %m = call i8 @llvm.umax.i8(i8 %a, i8 4) + ret i8 %m +} + +define i8 @umin_offset(i8 %x) { +; CHECK-LABEL: @umin_offset( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], -5 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[A]], i8 -4) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nuw i8 %x, 251 + %m = call i8 @llvm.umin.i8(i8 %a, i8 252) + ret i8 %m +} + +define i8 @umin_offset_limit(i8 %x) { +; CHECK-LABEL: @umin_offset_limit( +; CHECK-NEXT: ret i8 -4 +; + %a = add nuw i8 %x, 252 + %m = call i8 @llvm.umin.i8(i8 %a, i8 252) + ret i8 %m +} + +define i8 @umin_offset_overflow(i8 %x) { +; CHECK-LABEL: @umin_offset_overflow( +; CHECK-NEXT: ret i8 -4 +; + %a = add nuw i8 %x, 253 + %m = call i8 @llvm.umin.i8(i8 %a, i8 252) + ret i8 %m +} + +define i8 @umin_offset_may_wrap(i8 %x) { +; CHECK-LABEL: @umin_offset_may_wrap( +; CHECK-NEXT: [[A:%.*]] = add nsw i8 [[X:%.*]], -5 +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[A]], i8 -4) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nsw i8 %x, 251 + %m = call i8 @llvm.umin.i8(i8 %a, i8 252) + ret i8 %m +} + +define i8 @umin_offset_uses(i8 %x) { +; CHECK-LABEL: @umin_offset_uses( +; CHECK-NEXT: [[A:%.*]] = add nuw i8 [[X:%.*]], -5 +; CHECK-NEXT: call void @use(i8 [[A]]) +; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[A]], i8 -4) +; CHECK-NEXT: ret i8 [[M]] +; + %a = add nuw i8 %x, 251 + call void @use(i8 %a) + %m = call i8 @llvm.umin.i8(i8 %a, i8 252) + ret i8 %m +}