[llvm] a91effa - [InstCombine] add tests for mul-by-neg-pow2; NFC
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 11 03:44:12 PDT 2022
Author: Sanjay Patel
Date: 2022-09-11T06:14:24-04:00
New Revision: a91effa0b8b1c3de30b3986c1ad3764b9bb1ed7a
URL: https://github.com/llvm/llvm-project/commit/a91effa0b8b1c3de30b3986c1ad3764b9bb1ed7a
DIFF: https://github.com/llvm/llvm-project/commit/a91effa0b8b1c3de30b3986c1ad3764b9bb1ed7a.diff
LOG: [InstCombine] add tests for mul-by-neg-pow2; NFC
Added:
Modified:
llvm/test/Transforms/InstCombine/mul.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/mul.ll b/llvm/test/Transforms/InstCombine/mul.ll
index 4e4d267f8c5b..20d7f2633f4d 100644
--- a/llvm/test/Transforms/InstCombine/mul.ll
+++ b/llvm/test/Transforms/InstCombine/mul.ll
@@ -1481,3 +1481,82 @@ define i32 @mulnot_extrause(i32 %a0) {
%mul = mul i32 %not, -4
ret i32 %mul
}
+
+define i32 @zext_negpow2(i8 %x) {
+; CHECK-LABEL: @zext_negpow2(
+; CHECK-NEXT: [[ZX:%.*]] = zext i8 [[X:%.*]] to i32
+; CHECK-NEXT: [[R:%.*]] = mul i32 [[ZX]], -16777216
+; CHECK-NEXT: ret i32 [[R]]
+;
+ %zx = zext i8 %x to i32
+ %r = mul i32 %zx, -16777216 ; -1 << 24
+ ret i32 %r
+}
+
+define <2 x i14> @zext_negpow2_vec(<2 x i5> %x) {
+; CHECK-LABEL: @zext_negpow2_vec(
+; CHECK-NEXT: [[ZX:%.*]] = zext <2 x i5> [[X:%.*]] to <2 x i14>
+; CHECK-NEXT: [[R:%.*]] = mul <2 x i14> [[ZX]], <i14 -2048, i14 -2048>
+; CHECK-NEXT: ret <2 x i14> [[R]]
+;
+ %zx = zext <2 x i5> %x to <2 x i14>
+ %r = mul <2 x i14> %zx, <i14 -2048, i14 -2048> ; -1 << 11
+ ret <2 x i14> %r
+}
+
+define i32 @zext_negpow2_too_small(i8 %x) {
+; CHECK-LABEL: @zext_negpow2_too_small(
+; CHECK-NEXT: [[ZX:%.*]] = zext i8 [[X:%.*]] to i32
+; CHECK-NEXT: [[R:%.*]] = mul nsw i32 [[ZX]], -8388608
+; CHECK-NEXT: ret i32 [[R]]
+;
+ %zx = zext i8 %x to i32
+ %r = mul i32 %zx, -8388608 ; -1 << 23
+ ret i32 %r
+}
+
+define i16 @sext_negpow2(i9 %x) {
+; CHECK-LABEL: @sext_negpow2(
+; CHECK-NEXT: [[SX:%.*]] = sext i9 [[X:%.*]] to i16
+; CHECK-NEXT: [[R:%.*]] = mul i16 [[SX]], -1024
+; CHECK-NEXT: ret i16 [[R]]
+;
+ %sx = sext i9 %x to i16
+ %r = mul i16 %sx, -1024 ; -1 << 10
+ ret i16 %r
+}
+
+define <2 x i16> @sext_negpow2_vec(<2 x i8> %x) {
+; CHECK-LABEL: @sext_negpow2_vec(
+; CHECK-NEXT: [[SX:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i16>
+; CHECK-NEXT: [[R:%.*]] = mul <2 x i16> [[SX]], <i16 -256, i16 poison>
+; CHECK-NEXT: ret <2 x i16> [[R]]
+;
+ %sx = sext <2 x i8> %x to <2 x i16>
+ %r = mul <2 x i16> %sx, <i16 -256, i16 poison> ; -1 << 8
+ ret <2 x i16> %r
+}
+
+define <2 x i16> @sext_negpow2_too_small_vec(<2 x i8> %x) {
+; CHECK-LABEL: @sext_negpow2_too_small_vec(
+; CHECK-NEXT: [[SX:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i16>
+; CHECK-NEXT: [[R:%.*]] = mul <2 x i16> [[SX]], <i16 -128, i16 poison>
+; CHECK-NEXT: ret <2 x i16> [[R]]
+;
+ %sx = sext <2 x i8> %x to <2 x i16>
+ %r = mul <2 x i16> %sx, <i16 -128, i16 poison> ; -1 << 7
+ ret <2 x i16> %r
+}
+
+define i32 @zext_negpow2_use(i8 %x) {
+; CHECK-LABEL: @zext_negpow2_use(
+; CHECK-NEXT: [[ZX:%.*]] = zext i8 [[X:%.*]] to i32
+; CHECK-NEXT: call void @use32(i32 [[ZX]])
+; CHECK-NEXT: [[R:%.*]] = mul i32 [[ZX]], -16777216
+; CHECK-NEXT: ret i32 [[R]]
+;
+ %zx = zext i8 %x to i32
+ call void @use32(i32 %zx)
+ %r = mul i32 %zx, -16777216 ; -1 << 24
+ ret i32 %r
+}
More information about the llvm-commits
mailing list