diff --git a/llvm/test/Transforms/InstSimplify/abs_intrinsic.ll b/llvm/test/Transforms/InstSimplify/abs_intrinsic.ll index aceaa5ccec0f3b..0fa2176038ea7c 100644 --- a/llvm/test/Transforms/InstSimplify/abs_intrinsic.ll +++ b/llvm/test/Transforms/InstSimplify/abs_intrinsic.ll @@ -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 +}