[llvm] 8927c90 - [InstCombine] Add tests for known bits for min/max intrinsics (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 8 12:08:30 PDT 2020


Author: Nikita Popov
Date: 2020-09-08T21:08:17+02:00
New Revision: 8927c900697adf313fb5f11a09a03f1451439403

URL: https://github.com/llvm/llvm-project/commit/8927c900697adf313fb5f11a09a03f1451439403
DIFF: https://github.com/llvm/llvm-project/commit/8927c900697adf313fb5f11a09a03f1451439403.diff

LOG: [InstCombine] Add tests for known bits for min/max intrinsics (NFC)

We already have test coverage for the underlying calculation,
this just checked that the folding is wired up...

Added: 
    llvm/test/Transforms/InstCombine/minmax-intrinsics.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll b/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll
new file mode 100644
index 000000000000..d808d5fc4244
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/minmax-intrinsics.ll
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -instcombine < %s | FileCheck %s
+
+declare i8 @llvm.umin.i8(i8, i8)
+declare i8 @llvm.umax.i8(i8, i8)
+declare i8 @llvm.smin.i8(i8, i8)
+declare i8 @llvm.smax.i8(i8, i8)
+
+define i8 @umin_known_bits(i8 %x, i8 %y) {
+; CHECK-LABEL: @umin_known_bits(
+; CHECK-NEXT:    [[X2:%.*]] = and i8 [[X:%.*]], 127
+; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X2]], i8 [[Y:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = and i8 [[M]], -128
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %x2 = and i8 %x, 127
+  %m = call i8 @llvm.umin.i8(i8 %x2, i8 %y)
+  %r = and i8 %m, -128
+  ret i8 %r
+}
+
+define i8 @umax_known_bits(i8 %x, i8 %y) {
+; CHECK-LABEL: @umax_known_bits(
+; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], -128
+; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X2]], i8 [[Y:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = and i8 [[M]], -128
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %x2 = or i8 %x, -128
+  %m = call i8 @llvm.umax.i8(i8 %x2, i8 %y)
+  %r = and i8 %m, -128
+  ret i8 %r
+}
+
+define i8 @smin_known_bits(i8 %x, i8 %y) {
+; CHECK-LABEL: @smin_known_bits(
+; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], -128
+; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X2]], i8 [[Y:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = and i8 [[M]], -128
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %x2 = or i8 %x, -128
+  %m = call i8 @llvm.smin.i8(i8 %x2, i8 %y)
+  %r = and i8 %m, -128
+  ret i8 %r
+}
+
+define i8 @smax_known_bits(i8 %x, i8 %y) {
+; CHECK-LABEL: @smax_known_bits(
+; CHECK-NEXT:    [[X2:%.*]] = and i8 [[X:%.*]], 127
+; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X2]], i8 [[Y:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = and i8 [[M]], -128
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %x2 = and i8 %x, 127
+  %m = call i8 @llvm.smax.i8(i8 %x2, i8 %y)
+  %r = and i8 %m, -128
+  ret i8 %r
+}


        


More information about the llvm-commits mailing list