@@ -117,3 +117,56 @@ define double @fsel_nonzero_true_val(double %x, double %y, double %z) {
117
117
ret double %r
118
118
}
119
119
120
+ define double @fsel_nonzero_constants (double %x , double %y ) {
121
+ ; SSE-LABEL: fsel_nonzero_constants:
122
+ ; SSE: # %bb.0:
123
+ ; SSE-NEXT: cmpeqsd %xmm1, %xmm0
124
+ ; SSE-NEXT: movq %xmm0, %rax
125
+ ; SSE-NEXT: andl $1, %eax
126
+ ; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
127
+ ; SSE-NEXT: retq
128
+ ;
129
+ ; AVX-LABEL: fsel_nonzero_constants:
130
+ ; AVX: # %bb.0:
131
+ ; AVX-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0
132
+ ; AVX-NEXT: vmovq %xmm0, %rax
133
+ ; AVX-NEXT: andl $1, %eax
134
+ ; AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
135
+ ; AVX-NEXT: retq
136
+ %cond = fcmp oeq double %x , %y
137
+ %r = select i1 %cond , double 12 .0 , double 42 .0
138
+ ret double %r
139
+ }
140
+
141
+ define <2 x double > @vsel_nonzero_constants (<2 x double > %x , <2 x double > %y ) {
142
+ ; SSE2-LABEL: vsel_nonzero_constants:
143
+ ; SSE2: # %bb.0:
144
+ ; SSE2-NEXT: cmplepd %xmm0, %xmm1
145
+ ; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
146
+ ; SSE2-NEXT: movapd %xmm1, %xmm2
147
+ ; SSE2-NEXT: andnpd %xmm0, %xmm2
148
+ ; SSE2-NEXT: andpd {{.*}}(%rip), %xmm1
149
+ ; SSE2-NEXT: orpd %xmm2, %xmm1
150
+ ; SSE2-NEXT: movapd %xmm1, %xmm0
151
+ ; SSE2-NEXT: retq
152
+ ;
153
+ ; SSE42-LABEL: vsel_nonzero_constants:
154
+ ; SSE42: # %bb.0:
155
+ ; SSE42-NEXT: cmplepd %xmm0, %xmm1
156
+ ; SSE42-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
157
+ ; SSE42-NEXT: movapd %xmm1, %xmm0
158
+ ; SSE42-NEXT: blendvpd %xmm0, {{.*}}(%rip), %xmm2
159
+ ; SSE42-NEXT: movapd %xmm2, %xmm0
160
+ ; SSE42-NEXT: retq
161
+ ;
162
+ ; AVX-LABEL: vsel_nonzero_constants:
163
+ ; AVX: # %bb.0:
164
+ ; AVX-NEXT: vcmplepd %xmm0, %xmm1, %xmm0
165
+ ; AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
166
+ ; AVX-NEXT: vblendvpd %xmm0, {{.*}}(%rip), %xmm1, %xmm0
167
+ ; AVX-NEXT: retq
168
+ %cond = fcmp oge <2 x double > %x , %y
169
+ %r = select <2 x i1 > %cond , <2 x double > <double 12 .0 , double -1 .0 >, <2 x double > <double 42 .0 , double 0 .0 >
170
+ ret <2 x double > %r
171
+ }
172
+
0 commit comments