@@ -2862,3 +2862,123 @@ define i1 @isnan_d_fpclass(half %x) {
28622862 %1 = call i1 @llvm.is.fpclass.f16 (half %x , i32 3 ) ; nan
28632863 ret i1 %1
28642864}
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