[llvm] 58b7649 - [tests] precommit tests for D126040
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 25 05:40:55 PDT 2022
Author: zhongyunde
Date: 2022-05-25T20:39:04+08:00
New Revision: 58b76492c1fea6b6c7ce2b3e7b9fb0d5ee00fe9d
URL: https://github.com/llvm/llvm-project/commit/58b76492c1fea6b6c7ce2b3e7b9fb0d5ee00fe9d
DIFF: https://github.com/llvm/llvm-project/commit/58b76492c1fea6b6c7ce2b3e7b9fb0d5ee00fe9d.diff
LOG: [tests] precommit tests for D126040
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D126356
Added:
Modified:
llvm/test/Transforms/InstCombine/mul-masked-bits.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/mul-masked-bits.ll b/llvm/test/Transforms/InstCombine/mul-masked-bits.ll
index ead179f855e0c..553788561f759 100644
--- a/llvm/test/Transforms/InstCombine/mul-masked-bits.ll
+++ b/llvm/test/Transforms/InstCombine/mul-masked-bits.ll
@@ -163,3 +163,60 @@ define i33 @squared_demanded_3_low_bits(i33 %x) {
%and = and i33 %mul, 7
ret i33 %and
}
+
+; Instcombine should be able to simplify mul operator.
+
+; Scalar tests
+define i64 @scalar_mul_bit_x0_y0(i64 %x, i64 %y) {
+; CHECK-LABEL: @scalar_mul_bit_x0_y0(
+; CHECK-NEXT: [[AND1:%.*]] = and i64 [[X:%.*]], 1
+; CHECK-NEXT: [[AND2:%.*]] = and i64 [[Y:%.*]], 1
+; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i64 [[AND1]], [[AND2]]
+; CHECK-NEXT: ret i64 [[MUL]]
+;
+ %and1 = and i64 %x, 1
+ %and2 = and i64 %y, 1
+ %mul = mul i64 %and1, %and2
+ ret i64 %mul
+}
+
+; Negative test
+define i64 @scalar_mul_bit_x0_y1(i64 %x, i64 %y) {
+; CHECK-LABEL: @scalar_mul_bit_x0_y1(
+; CHECK-NEXT: [[AND1:%.*]] = and i64 [[X:%.*]], 1
+; CHECK-NEXT: [[AND2:%.*]] = and i64 [[Y:%.*]], 2
+; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i64 [[AND1]], [[AND2]]
+; CHECK-NEXT: ret i64 [[MUL]]
+;
+ %and1 = and i64 %x, 1
+ %and2 = and i64 %y, 2
+ %mul = mul i64 %and1, %and2
+ ret i64 %mul
+}
+
+define i64 @scalar_mul_bit_x0_yC(i64 %x, i64 %y, i64 %c) {
+; CHECK-LABEL: @scalar_mul_bit_x0_yC(
+; CHECK-NEXT: [[AND1:%.*]] = and i64 [[X:%.*]], 1
+; CHECK-NEXT: [[AND2:%.*]] = and i64 [[Y:%.*]], [[C:%.*]]
+; CHECK-NEXT: [[MUL:%.*]] = mul nuw i64 [[AND1]], [[AND2]]
+; CHECK-NEXT: ret i64 [[MUL]]
+;
+ %and1 = and i64 %x, 1
+ %and2 = and i64 %y, %c
+ %mul = mul i64 %and1, %and2
+ ret i64 %mul
+}
+
+; Vector tests
+define <2 x i64> @vector_mul_bit_x0_y0(<2 x i64> %x, <2 x i64> %y) {
+; CHECK-LABEL: @vector_mul_bit_x0_y0(
+; CHECK-NEXT: [[AND1:%.*]] = and <2 x i64> [[X:%.*]], <i64 1, i64 1>
+; CHECK-NEXT: [[AND2:%.*]] = and <2 x i64> [[Y:%.*]], <i64 1, i64 1>
+; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw <2 x i64> [[AND1]], [[AND2]]
+; CHECK-NEXT: ret <2 x i64> [[MUL]]
+;
+ %and1 = and <2 x i64> %x, <i64 1, i64 1>
+ %and2 = and <2 x i64> %y, <i64 1, i64 1>
+ %mul = mul <2 x i64> %and1, %and2
+ ret <2 x i64> %mul
+}
More information about the llvm-commits
mailing list