%t3 = fmul fast <vscale x 2 x float> %shuf, %z
ret <vscale x 2 x float> %t3
}
+
+define half @mul_zero_nnan(half %x) {
+; CHECK-LABEL: @mul_zero_nnan(
+; CHECK-NEXT: [[R:%.*]] = fmul nnan half [[X:%.*]], 0xH0000
+; CHECK-NEXT: ret half [[R]]
+;
+ %r = fmul nnan half %x, 0.0
+ ret half %r
+}
+
+define <2 x float> @mul_zero_nnan_vec_poison(<2 x float> %x) {
+; CHECK-LABEL: @mul_zero_nnan_vec_poison(
+; CHECK-NEXT: [[R:%.*]] = fmul nnan <2 x float> [[X:%.*]], <float 0.000000e+00, float poison>
+; CHECK-NEXT: ret <2 x float> [[R]]
+;
+ %r = fmul nnan <2 x float> %x, <float 0.0, float poison>
+ ret <2 x float> %r
+}
+
+define half @mul_zero(half %x) {
+; CHECK-LABEL: @mul_zero(
+; CHECK-NEXT: [[R:%.*]] = fmul ninf nsz half [[X:%.*]], 0xH0000
+; CHECK-NEXT: ret half [[R]]
+;
+ %r = fmul ninf nsz half %x, 0.0
+ ret half %r
+}
+
+define half @mul_negzero_nnan(half %x) {
+; CHECK-LABEL: @mul_negzero_nnan(
+; CHECK-NEXT: [[R:%.*]] = fmul nnan half [[X:%.*]], 0xH8000
+; CHECK-NEXT: ret half [[R]]
+;
+ %r = fmul nnan half %x, -0.0
+ ret half %r
+}