@@ -149,6 +149,51 @@ define i32 @testpdnzc_256_invert0(<4 x double> %c, <4 x double> %d, i32 %a, i32
149
149
ret i32 %t5
150
150
}
151
151
152
+ ;
153
+ ; SimplifyDemandedBits - only the sign bit is required
154
+ ;
155
+
156
+ define i32 @testpdc_128_signbit (<2 x double > %c , <2 x double > %d , i32 %a , i32 %b ) {
157
+ ; CHECK-LABEL: testpdc_128_signbit:
158
+ ; CHECK: # %bb.0:
159
+ ; CHECK-NEXT: movl %edi, %eax
160
+ ; CHECK-NEXT: vpxor %xmm2, %xmm2, %xmm2
161
+ ; CHECK-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm0
162
+ ; CHECK-NEXT: vtestpd %xmm1, %xmm0
163
+ ; CHECK-NEXT: cmovael %esi, %eax
164
+ ; CHECK-NEXT: retq
165
+ %t0 = bitcast <2 x double > %c to <2 x i64 >
166
+ %t1 = ashr <2 x i64 > %t0 , <i64 63 , i64 63 >
167
+ %t2 = bitcast <2 x i64 > %t1 to <2 x double >
168
+ %t3 = call i32 @llvm.x86.avx.vtestc.pd (<2 x double > %t2 , <2 x double > %d )
169
+ %t4 = icmp ne i32 %t3 , 0
170
+ %t5 = select i1 %t4 , i32 %a , i32 %b
171
+ ret i32 %t5
172
+ }
173
+
174
+ define i32 @testpdz_256_signbit (<4 x double > %c , <4 x double > %d , i32 %a , i32 %b ) {
175
+ ; CHECK-LABEL: testpdz_256_signbit:
176
+ ; CHECK: # %bb.0:
177
+ ; CHECK-NEXT: movl %edi, %eax
178
+ ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2
179
+ ; CHECK-NEXT: vpxor %xmm3, %xmm3, %xmm3
180
+ ; CHECK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
181
+ ; CHECK-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm0
182
+ ; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
183
+ ; CHECK-NEXT: vtestpd %ymm1, %ymm0
184
+ ; CHECK-NEXT: cmovnel %esi, %eax
185
+ ; CHECK-NEXT: vzeroupper
186
+ ; CHECK-NEXT: retq
187
+ %t0 = bitcast <4 x double > %c to <4 x i64 >
188
+ %t1 = icmp sgt <4 x i64 > zeroinitializer , %t0
189
+ %t2 = sext <4 x i1 > %t1 to <4 x i64 >
190
+ %t3 = bitcast <4 x i64 > %t2 to <4 x double >
191
+ %t4 = call i32 @llvm.x86.avx.vtestz.pd.256 (<4 x double > %t3 , <4 x double > %d )
192
+ %t5 = icmp ne i32 %t4 , 0
193
+ %t6 = select i1 %t5 , i32 %a , i32 %b
194
+ ret i32 %t6
195
+ }
196
+
152
197
declare i32 @llvm.x86.avx.vtestz.pd (<2 x double >, <2 x double >) nounwind readnone
153
198
declare i32 @llvm.x86.avx.vtestc.pd (<2 x double >, <2 x double >) nounwind readnone
154
199
declare i32 @llvm.x86.avx.vtestnzc.pd (<2 x double >, <2 x double >) nounwind readnone
0 commit comments