| //@ compile-flags: -C opt-level=3 -C target-cpu=cannonlake |
| //@ only-x86_64 |
| |
| // In a previous implementation, _mm512_reduce_add_pd did the reduction with all fast-math flags |
| // enabled, making it UB to reduce a vector containing a NaN. |
| |
| #![crate_type = "lib"] |
| #![feature(stdarch_x86_avx512, avx512_target_feature)] |
| use std::arch::x86_64::*; |
| |
| // CHECK-LABEL: @demo( |
| #[no_mangle] |
| #[target_feature(enable = "avx512f")] // Function-level target feature mismatches inhibit inlining |
| pub unsafe fn demo() -> bool { |
| // CHECK: %0 = tail call reassoc double @llvm.vector.reduce.fadd.v8f64( |
| // CHECK: %_0.i = fcmp uno double %0, 0.000000e+00 |
| // CHECK: ret i1 %_0.i |
| let res = unsafe { |
| _mm512_reduce_add_pd(_mm512_set_pd(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, f64::NAN)) |
| }; |
| res.is_nan() |
| } |