@@ -27,9 +27,8 @@ define <4 x float> @fadd_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float>
27
27
; AVX512VL: # %bb.0:
28
28
; AVX512VL-NEXT: vpslld $31, %xmm0, %xmm0
29
29
; AVX512VL-NEXT: vptestmd %xmm0, %xmm0, %k1
30
- ; AVX512VL-NEXT: vbroadcastss {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
31
- ; AVX512VL-NEXT: vmovaps %xmm2, %xmm0 {%k1}
32
- ; AVX512VL-NEXT: vaddps %xmm0, %xmm1, %xmm0
30
+ ; AVX512VL-NEXT: vaddps %xmm2, %xmm1, %xmm1 {%k1}
31
+ ; AVX512VL-NEXT: vmovaps %xmm1, %xmm0
33
32
; AVX512VL-NEXT: retq
34
33
%s = select <4 x i1 > %b , <4 x float > %y , <4 x float > <float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 >
35
34
%r = fadd <4 x float > %x , %s
@@ -62,9 +61,8 @@ define <8 x float> @fadd_v8f32_commute(<8 x i1> %b, <8 x float> noundef %x, <8 x
62
61
; AVX512VL-NEXT: vpmovsxwd %xmm0, %ymm0
63
62
; AVX512VL-NEXT: vpslld $31, %ymm0, %ymm0
64
63
; AVX512VL-NEXT: vptestmd %ymm0, %ymm0, %k1
65
- ; AVX512VL-NEXT: vbroadcastss {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
66
- ; AVX512VL-NEXT: vmovaps %ymm2, %ymm0 {%k1}
67
- ; AVX512VL-NEXT: vaddps %ymm1, %ymm0, %ymm0
64
+ ; AVX512VL-NEXT: vaddps %ymm2, %ymm1, %ymm1 {%k1}
65
+ ; AVX512VL-NEXT: vmovaps %ymm1, %ymm0
68
66
; AVX512VL-NEXT: retq
69
67
%s = select <8 x i1 > %b , <8 x float > %y , <8 x float > <float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 >
70
68
%r = fadd <8 x float > %s , %x
@@ -92,8 +90,8 @@ define <16 x float> @fadd_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16
92
90
; AVX512-NEXT: vpmovsxbd %xmm0, %zmm0
93
91
; AVX512-NEXT: vpslld $31, %zmm0, %zmm0
94
92
; AVX512-NEXT: vptestmd %zmm0, %zmm0, %k1
95
- ; AVX512-NEXT: vbroadcastss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2 {%k1}
96
93
; AVX512-NEXT: vaddps %zmm2, %zmm1, %zmm0
94
+ ; AVX512-NEXT: vmovaps %zmm1, %zmm0 {%k1}
97
95
; AVX512-NEXT: retq
98
96
%s = select <16 x i1 > %b , <16 x float > <float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 >, <16 x float > %y
99
97
%r = fadd <16 x float > %x , %s
@@ -121,8 +119,8 @@ define <16 x float> @fadd_v16f32_commute_swap(<16 x i1> %b, <16 x float> noundef
121
119
; AVX512-NEXT: vpmovsxbd %xmm0, %zmm0
122
120
; AVX512-NEXT: vpslld $31, %zmm0, %zmm0
123
121
; AVX512-NEXT: vptestmd %zmm0, %zmm0, %k1
124
- ; AVX512-NEXT: vbroadcastss {{\.?LCPI[0-9]+_[0-9]+}}(%rip) , %zmm2 {%k1}
125
- ; AVX512-NEXT: vaddps %zmm1, %zmm2, %zmm0
122
+ ; AVX512-NEXT: vaddps %zmm2 , %zmm1, %zmm0
123
+ ; AVX512-NEXT: vmovaps %zmm1, %zmm0 {%k1}
126
124
; AVX512-NEXT: retq
127
125
%s = select <16 x i1 > %b , <16 x float > <float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 >, <16 x float > %y
128
126
%r = fadd <16 x float > %s , %x
@@ -152,14 +150,16 @@ define <4 x float> @fsub_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float>
152
150
; AVX512VL: # %bb.0:
153
151
; AVX512VL-NEXT: vpslld $31, %xmm0, %xmm0
154
152
; AVX512VL-NEXT: vptestmd %xmm0, %xmm0, %k1
155
- ; AVX512VL-NEXT: vmovaps %xmm2, %xmm0 {%k1} {z }
156
- ; AVX512VL-NEXT: vsubps %xmm0, %xmm1, %xmm0
153
+ ; AVX512VL-NEXT: vsubps %xmm2, %xmm1, %xmm1 {%k1 }
154
+ ; AVX512VL-NEXT: vmovaps %xmm1, %xmm0
157
155
; AVX512VL-NEXT: retq
158
156
%s = select <4 x i1 > %b , <4 x float > %y , <4 x float > zeroinitializer
159
157
%r = fsub <4 x float > %x , %s
160
158
ret <4 x float > %r
161
159
}
162
160
161
+ ; negative test - fsub is not commutative; there is no identity constant for operand 0
162
+
163
163
define <8 x float > @fsub_v8f32_commute (<8 x i1 > %b , <8 x float > noundef %x , <8 x float > noundef %y ) {
164
164
; AVX2-LABEL: fsub_v8f32_commute:
165
165
; AVX2: # %bb.0:
@@ -214,15 +214,17 @@ define <16 x float> @fsub_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16
214
214
; AVX512: # %bb.0:
215
215
; AVX512-NEXT: vpmovsxbd %xmm0, %zmm0
216
216
; AVX512-NEXT: vpslld $31, %zmm0, %zmm0
217
- ; AVX512-NEXT: vptestnmd %zmm0, %zmm0, %k1
218
- ; AVX512-NEXT: vmovaps %zmm2, %zmm0 {%k1} {z}
219
- ; AVX512-NEXT: vsubps %zmm0, % zmm1, %zmm0
217
+ ; AVX512-NEXT: vptestmd %zmm0, %zmm0, %k1
218
+ ; AVX512-NEXT: vsubps %zmm2, %zmm1, %zmm0
219
+ ; AVX512-NEXT: vmovaps % zmm1, %zmm0 {%k1}
220
220
; AVX512-NEXT: retq
221
221
%s = select <16 x i1 > %b , <16 x float > zeroinitializer , <16 x float > %y
222
222
%r = fsub <16 x float > %x , %s
223
223
ret <16 x float > %r
224
224
}
225
225
226
+ ; negative test - fsub is not commutative; there is no identity constant for operand 0
227
+
226
228
define <16 x float > @fsub_v16f32_commute_swap (<16 x i1 > %b , <16 x float > noundef %x , <16 x float > noundef %y ) {
227
229
; AVX2-LABEL: fsub_v16f32_commute_swap:
228
230
; AVX2: # %bb.0:
@@ -570,9 +572,7 @@ define <8 x float> @fadd_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> nou
570
572
; AVX512VL-LABEL: fadd_v8f32_cast_cond:
571
573
; AVX512VL: # %bb.0:
572
574
; AVX512VL-NEXT: kmovw %edi, %k1
573
- ; AVX512VL-NEXT: vbroadcastss {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
574
- ; AVX512VL-NEXT: vmovaps %ymm1, %ymm2 {%k1}
575
- ; AVX512VL-NEXT: vaddps %ymm2, %ymm0, %ymm0
575
+ ; AVX512VL-NEXT: vaddps %ymm1, %ymm0, %ymm0 {%k1}
576
576
; AVX512VL-NEXT: retq
577
577
%b = bitcast i8 %pb to <8 x i1 >
578
578
%s = select <8 x i1 > %b , <8 x float > %y , <8 x float > <float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 , float -0 .0 >
@@ -636,9 +636,7 @@ define <8 x double> @fadd_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> n
636
636
; AVX512-LABEL: fadd_v8f64_cast_cond:
637
637
; AVX512: # %bb.0:
638
638
; AVX512-NEXT: kmovw %edi, %k1
639
- ; AVX512-NEXT: vbroadcastsd {{.*#+}} zmm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
640
- ; AVX512-NEXT: vmovapd %zmm1, %zmm2 {%k1}
641
- ; AVX512-NEXT: vaddpd %zmm2, %zmm0, %zmm0
639
+ ; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm0 {%k1}
642
640
; AVX512-NEXT: retq
643
641
%b = bitcast i8 %pb to <8 x i1 >
644
642
%s = select <8 x i1 > %b , <8 x double > %y , <8 x double > <double -0 .0 , double -0 .0 , double -0 .0 , double -0 .0 , double -0 .0 , double -0 .0 , double -0 .0 , double -0 .0 >
@@ -709,8 +707,7 @@ define <8 x float> @fsub_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> nou
709
707
; AVX512VL-LABEL: fsub_v8f32_cast_cond:
710
708
; AVX512VL: # %bb.0:
711
709
; AVX512VL-NEXT: kmovw %edi, %k1
712
- ; AVX512VL-NEXT: vmovaps %ymm1, %ymm1 {%k1} {z}
713
- ; AVX512VL-NEXT: vsubps %ymm1, %ymm0, %ymm0
710
+ ; AVX512VL-NEXT: vsubps %ymm1, %ymm0, %ymm0 {%k1}
714
711
; AVX512VL-NEXT: retq
715
712
%b = bitcast i8 %pb to <8 x i1 >
716
713
%s = select <8 x i1 > %b , <8 x float > %y , <8 x float > zeroinitializer
@@ -775,8 +772,7 @@ define <8 x double> @fsub_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> n
775
772
; AVX512-LABEL: fsub_v8f64_cast_cond:
776
773
; AVX512: # %bb.0:
777
774
; AVX512-NEXT: kmovw %edi, %k1
778
- ; AVX512-NEXT: vmovapd %zmm1, %zmm1 {%k1} {z}
779
- ; AVX512-NEXT: vsubpd %zmm1, %zmm0, %zmm0
775
+ ; AVX512-NEXT: vsubpd %zmm1, %zmm0, %zmm0 {%k1}
780
776
; AVX512-NEXT: retq
781
777
%b = bitcast i8 %pb to <8 x i1 >
782
778
%s = select <8 x i1 > %b , <8 x double > %y , <8 x double > zeroinitializer
0 commit comments