@@ -2862,3 +2862,123 @@ define i1 @isnan_d_fpclass(half %x) {
2862
2862
%1 = call i1 @llvm.is.fpclass.f16 (half %x , i32 3 ) ; nan
2863
2863
ret i1 %1
2864
2864
}
2865
+
2866
+ declare half @llvm.tan.f16 (half )
2867
+
2868
+ define half @tan_f16 (half %a ) nounwind {
2869
+ ; RV32IZFH-LABEL: tan_f16:
2870
+ ; RV32IZFH: # %bb.0:
2871
+ ; RV32IZFH-NEXT: addi sp, sp, -16
2872
+ ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2873
+ ; RV32IZFH-NEXT: fcvt.s.h fa0, fa0
2874
+ ; RV32IZFH-NEXT: call tanf
2875
+ ; RV32IZFH-NEXT: fcvt.h.s fa0, fa0
2876
+ ; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2877
+ ; RV32IZFH-NEXT: addi sp, sp, 16
2878
+ ; RV32IZFH-NEXT: ret
2879
+ ;
2880
+ ; RV64IZFH-LABEL: tan_f16:
2881
+ ; RV64IZFH: # %bb.0:
2882
+ ; RV64IZFH-NEXT: addi sp, sp, -16
2883
+ ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2884
+ ; RV64IZFH-NEXT: fcvt.s.h fa0, fa0
2885
+ ; RV64IZFH-NEXT: call tanf
2886
+ ; RV64IZFH-NEXT: fcvt.h.s fa0, fa0
2887
+ ; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2888
+ ; RV64IZFH-NEXT: addi sp, sp, 16
2889
+ ; RV64IZFH-NEXT: ret
2890
+ ;
2891
+ ; RV32IZHINX-LABEL: tan_f16:
2892
+ ; RV32IZHINX: # %bb.0:
2893
+ ; RV32IZHINX-NEXT: addi sp, sp, -16
2894
+ ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2895
+ ; RV32IZHINX-NEXT: fcvt.s.h a0, a0
2896
+ ; RV32IZHINX-NEXT: call tanf
2897
+ ; RV32IZHINX-NEXT: fcvt.h.s a0, a0
2898
+ ; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2899
+ ; RV32IZHINX-NEXT: addi sp, sp, 16
2900
+ ; RV32IZHINX-NEXT: ret
2901
+ ;
2902
+ ; RV64IZHINX-LABEL: tan_f16:
2903
+ ; RV64IZHINX: # %bb.0:
2904
+ ; RV64IZHINX-NEXT: addi sp, sp, -16
2905
+ ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2906
+ ; RV64IZHINX-NEXT: fcvt.s.h a0, a0
2907
+ ; RV64IZHINX-NEXT: call tanf
2908
+ ; RV64IZHINX-NEXT: fcvt.h.s a0, a0
2909
+ ; RV64IZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2910
+ ; RV64IZHINX-NEXT: addi sp, sp, 16
2911
+ ; RV64IZHINX-NEXT: ret
2912
+ ;
2913
+ ; RV32I-LABEL: tan_f16:
2914
+ ; RV32I: # %bb.0:
2915
+ ; RV32I-NEXT: addi sp, sp, -16
2916
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2917
+ ; RV32I-NEXT: slli a0, a0, 16
2918
+ ; RV32I-NEXT: srli a0, a0, 16
2919
+ ; RV32I-NEXT: call __extendhfsf2
2920
+ ; RV32I-NEXT: call tanf
2921
+ ; RV32I-NEXT: call __truncsfhf2
2922
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2923
+ ; RV32I-NEXT: addi sp, sp, 16
2924
+ ; RV32I-NEXT: ret
2925
+ ;
2926
+ ; RV64I-LABEL: tan_f16:
2927
+ ; RV64I: # %bb.0:
2928
+ ; RV64I-NEXT: addi sp, sp, -16
2929
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2930
+ ; RV64I-NEXT: slli a0, a0, 48
2931
+ ; RV64I-NEXT: srli a0, a0, 48
2932
+ ; RV64I-NEXT: call __extendhfsf2
2933
+ ; RV64I-NEXT: call tanf
2934
+ ; RV64I-NEXT: call __truncsfhf2
2935
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2936
+ ; RV64I-NEXT: addi sp, sp, 16
2937
+ ; RV64I-NEXT: ret
2938
+ ;
2939
+ ; RV32IZFHMIN-LABEL: tan_f16:
2940
+ ; RV32IZFHMIN: # %bb.0:
2941
+ ; RV32IZFHMIN-NEXT: addi sp, sp, -16
2942
+ ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2943
+ ; RV32IZFHMIN-NEXT: fcvt.s.h fa0, fa0
2944
+ ; RV32IZFHMIN-NEXT: call tanf
2945
+ ; RV32IZFHMIN-NEXT: fcvt.h.s fa0, fa0
2946
+ ; RV32IZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2947
+ ; RV32IZFHMIN-NEXT: addi sp, sp, 16
2948
+ ; RV32IZFHMIN-NEXT: ret
2949
+ ;
2950
+ ; RV64IZFHMIN-LABEL: tan_f16:
2951
+ ; RV64IZFHMIN: # %bb.0:
2952
+ ; RV64IZFHMIN-NEXT: addi sp, sp, -16
2953
+ ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2954
+ ; RV64IZFHMIN-NEXT: fcvt.s.h fa0, fa0
2955
+ ; RV64IZFHMIN-NEXT: call tanf
2956
+ ; RV64IZFHMIN-NEXT: fcvt.h.s fa0, fa0
2957
+ ; RV64IZFHMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2958
+ ; RV64IZFHMIN-NEXT: addi sp, sp, 16
2959
+ ; RV64IZFHMIN-NEXT: ret
2960
+ ;
2961
+ ; RV32IZHINXMIN-LABEL: tan_f16:
2962
+ ; RV32IZHINXMIN: # %bb.0:
2963
+ ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
2964
+ ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2965
+ ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
2966
+ ; RV32IZHINXMIN-NEXT: call tanf
2967
+ ; RV32IZHINXMIN-NEXT: fcvt.h.s a0, a0
2968
+ ; RV32IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2969
+ ; RV32IZHINXMIN-NEXT: addi sp, sp, 16
2970
+ ; RV32IZHINXMIN-NEXT: ret
2971
+ ;
2972
+ ; RV64IZHINXMIN-LABEL: tan_f16:
2973
+ ; RV64IZHINXMIN: # %bb.0:
2974
+ ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
2975
+ ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2976
+ ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
2977
+ ; RV64IZHINXMIN-NEXT: call tanf
2978
+ ; RV64IZHINXMIN-NEXT: fcvt.h.s a0, a0
2979
+ ; RV64IZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2980
+ ; RV64IZHINXMIN-NEXT: addi sp, sp, 16
2981
+ ; RV64IZHINXMIN-NEXT: ret
2982
+ %1 = call half @llvm.tan.f16 (half %a )
2983
+ ret half %1
2984
+ }
0 commit comments