%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
+}