[InstCombine] add tests for demanded bit of mul; NFC
authorSanjay Patel <spatel@rotateright.com>
Fri, 28 Jan 2022 22:10:39 +0000 (17:10 -0500)
committerSanjay Patel <spatel@rotateright.com>
Sat, 29 Jan 2022 17:55:23 +0000 (12:55 -0500)
llvm/test/Transforms/InstCombine/mul-masked-bits.ll

index 4886cd5..783674a 100644 (file)
@@ -58,3 +58,36 @@ define <4 x i1> @PR48683_vec_undef(<4 x i32> %x) {
   %c = icmp ne <4 x i32> %b, zeroinitializer
   ret <4 x i1> %c
 }
+
+define i8 @one_demanded_bit(i8 %x) {
+; CHECK-LABEL: @one_demanded_bit(
+; CHECK-NEXT:    [[M:%.*]] = mul i8 [[X:%.*]], -64
+; CHECK-NEXT:    [[R:%.*]] = or i8 [[M]], -65
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %m = mul i8 %x, 192  ; 0b1100_0000
+  %r = or i8 %m, 191   ; 0b1011_1111
+  ret i8 %r
+}
+
+define <2 x i8> @one_demanded_bit_splat(<2 x i8> %x) {
+; CHECK-LABEL: @one_demanded_bit_splat(
+; CHECK-NEXT:    [[M:%.*]] = mul <2 x i8> [[X:%.*]], <i8 -96, i8 -96>
+; CHECK-NEXT:    [[R:%.*]] = and <2 x i8> [[M]], <i8 32, i8 32>
+; CHECK-NEXT:    ret <2 x i8> [[R]]
+;
+  %m = mul <2 x i8> %x, <i8 160, i8 160> ; 0b1010_0000
+  %r = and <2 x i8> %m, <i8 32, i8 32>   ; 0b0010_0000
+  ret <2 x i8> %r
+}
+
+define i67 @one_demanded_low_bit(i67 %x) {
+; CHECK-LABEL: @one_demanded_low_bit(
+; CHECK-NEXT:    [[M:%.*]] = mul i67 [[X:%.*]], -63
+; CHECK-NEXT:    [[R:%.*]] = and i67 [[M]], 1
+; CHECK-NEXT:    ret i67 [[R]]
+;
+  %m = mul i67 %x, -63 ; any odd number will do
+  %r = and i67 %m, 1
+  ret i67 %r
+}