@@ -2758,6 +2758,58 @@ entry:
2758
2758
ret float %result
2759
2759
}
2760
2760
2761
+ ; Verify that tan(42.0) isn't simplified when the rounding mode is unknown.
2762
+ define double @ftan () #0 {
2763
+ ; X87-LABEL: ftan:
2764
+ ; X87: # %bb.0: # %entry
2765
+ ; X87-NEXT: subl $12, %esp
2766
+ ; X87-NEXT: .cfi_def_cfa_offset 16
2767
+ ; X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2768
+ ; X87-NEXT: fstpl (%esp)
2769
+ ; X87-NEXT: wait
2770
+ ; X87-NEXT: calll tan
2771
+ ; X87-NEXT: addl $12, %esp
2772
+ ; X87-NEXT: .cfi_def_cfa_offset 4
2773
+ ; X87-NEXT: retl
2774
+ ;
2775
+ ; X86-SSE-LABEL: ftan:
2776
+ ; X86-SSE: # %bb.0: # %entry
2777
+ ; X86-SSE-NEXT: subl $12, %esp
2778
+ ; X86-SSE-NEXT: .cfi_def_cfa_offset 16
2779
+ ; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = [4.2E+1,0.0E+0]
2780
+ ; X86-SSE-NEXT: movsd %xmm0, (%esp)
2781
+ ; X86-SSE-NEXT: calll tan
2782
+ ; X86-SSE-NEXT: addl $12, %esp
2783
+ ; X86-SSE-NEXT: .cfi_def_cfa_offset 4
2784
+ ; X86-SSE-NEXT: retl
2785
+ ;
2786
+ ; SSE-LABEL: ftan:
2787
+ ; SSE: # %bb.0: # %entry
2788
+ ; SSE-NEXT: pushq %rax
2789
+ ; SSE-NEXT: .cfi_def_cfa_offset 16
2790
+ ; SSE-NEXT: movsd {{.*#+}} xmm0 = [4.2E+1,0.0E+0]
2791
+ ; SSE-NEXT: callq tan@PLT
2792
+ ; SSE-NEXT: popq %rax
2793
+ ; SSE-NEXT: .cfi_def_cfa_offset 8
2794
+ ; SSE-NEXT: retq
2795
+ ;
2796
+ ; AVX-LABEL: ftan:
2797
+ ; AVX: # %bb.0: # %entry
2798
+ ; AVX-NEXT: pushq %rax
2799
+ ; AVX-NEXT: .cfi_def_cfa_offset 16
2800
+ ; AVX-NEXT: vmovsd {{.*#+}} xmm0 = [4.2E+1,0.0E+0]
2801
+ ; AVX-NEXT: callq tan@PLT
2802
+ ; AVX-NEXT: popq %rax
2803
+ ; AVX-NEXT: .cfi_def_cfa_offset 8
2804
+ ; AVX-NEXT: retq
2805
+ entry:
2806
+ %result = call double @llvm.experimental.constrained.tan.f64 (double 42 .0 ,
2807
+ metadata !"round.dynamic" ,
2808
+ metadata !"fpexcept.strict" ) #0
2809
+ ret double %result
2810
+ }
2811
+
2812
+
2761
2813
attributes #0 = { strictfp }
2762
2814
2763
2815
@llvm.fp.env = thread_local global i8 zeroinitializer , section "llvm.metadata"
@@ -2771,6 +2823,7 @@ declare double @llvm.experimental.constrained.pow.f64(double, double, metadata,
2771
2823
declare double @llvm.experimental.constrained.powi.f64 (double , i32 , metadata , metadata )
2772
2824
declare double @llvm.experimental.constrained.sin.f64 (double , metadata , metadata )
2773
2825
declare double @llvm.experimental.constrained.cos.f64 (double , metadata , metadata )
2826
+ declare double @llvm.experimental.constrained.tan.f64 (double , metadata , metadata )
2774
2827
declare double @llvm.experimental.constrained.exp.f64 (double , metadata , metadata )
2775
2828
declare double @llvm.experimental.constrained.exp2.f64 (double , metadata , metadata )
2776
2829
declare double @llvm.experimental.constrained.log.f64 (double , metadata , metadata )
0 commit comments