Skip to content

Commit af44e78

Browse files
author
Farzon Lotfi
committed
1. fix typos
2. add arm64 and x86 tests. 3. fix missing ISD::STRICT_FTAN in aarch64
1 parent 51247e4 commit af44e78

10 files changed

+443
-8
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -728,14 +728,14 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
728728
setOperationAction(ISD::FCOPYSIGN, MVT::bf16, Promote);
729729
}
730730

731-
for (auto Op : {ISD::FREM, ISD::FPOW, ISD::FPOWI,
732-
ISD::FCOS, ISD::FSIN, ISD::FSINCOS,
733-
ISD::FTAN, ISD::FEXP, ISD::FEXP2,
734-
ISD::FEXP10, ISD::FLOG, ISD::FLOG2,
735-
ISD::FLOG10, ISD::STRICT_FREM, ISD::STRICT_FPOW,
736-
ISD::STRICT_FPOWI, ISD::STRICT_FCOS, ISD::STRICT_FSIN,
737-
ISD::STRICT_FEXP, ISD::STRICT_FEXP2, ISD::STRICT_FLOG,
738-
ISD::STRICT_FLOG2, ISD::STRICT_FLOG10}) {
731+
for (auto Op : {ISD::FREM, ISD::FPOW, ISD::FPOWI,
732+
ISD::FCOS, ISD::FSIN, ISD::FSINCOS,
733+
ISD::FTAN, ISD::FEXP, ISD::FEXP2,
734+
ISD::FEXP10, ISD::FLOG, ISD::FLOG2,
735+
ISD::FLOG10, ISD::STRICT_FREM, ISD::STRICT_FPOW,
736+
ISD::STRICT_FPOWI, ISD::STRICT_FCOS, ISD::STRICT_FSIN,
737+
ISD::STRICT_FEXP, ISD::STRICT_FEXP2, ISD::STRICT_FLOG,
738+
ISD::STRICT_FLOG2, ISD::STRICT_FLOG10, ISD::STRICT_FTAN}) {
739739
setOperationAction(Op, MVT::f16, Promote);
740740
setOperationAction(Op, MVT::v4f16, Expand);
741741
setOperationAction(Op, MVT::v8f16, Expand);

llvm/test/CodeGen/AArch64/fp-intrinsics-fp16.ll

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,21 @@ define half @cos_f16(half %x) #0 {
338338
ret half %val
339339
}
340340

341+
define half @tan_f16(half %x) #0 {
342+
; CHECK-LABEL: tan_f16:
343+
; CHECK: // %bb.0:
344+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
345+
; CHECK-NEXT: .cfi_def_cfa_offset 16
346+
; CHECK-NEXT: .cfi_offset w30, -16
347+
; CHECK-NEXT: fcvt s0, h0
348+
; CHECK-NEXT: bl tanf
349+
; CHECK-NEXT: fcvt h0, s0
350+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
351+
; CHECK-NEXT: ret
352+
%val = call half @llvm.experimental.constrained.tan.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
353+
ret half %val
354+
}
355+
341356
define half @pow_f16(half %x, half %y) #0 {
342357
; CHECK-LABEL: pow_f16:
343358
; CHECK: // %bb.0:
@@ -1147,6 +1162,7 @@ declare half @llvm.experimental.constrained.sqrt.f16(half, metadata, metadata)
11471162
declare half @llvm.experimental.constrained.powi.f16(half, i32, metadata, metadata)
11481163
declare half @llvm.experimental.constrained.sin.f16(half, metadata, metadata)
11491164
declare half @llvm.experimental.constrained.cos.f16(half, metadata, metadata)
1165+
declare half @llvm.experimental.constrained.tan.f16(half, metadata, metadata)
11501166
declare half @llvm.experimental.constrained.pow.f16(half, half, metadata, metadata)
11511167
declare half @llvm.experimental.constrained.log.f16(half, metadata, metadata)
11521168
declare half @llvm.experimental.constrained.log10.f16(half, metadata, metadata)

llvm/test/CodeGen/AArch64/fp-intrinsics.ll

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ define float @cos_f32(float %x) #0 {
146146
ret float %val
147147
}
148148

149+
; CHECK-LABEL: tan_f32:
150+
; CHECK: bl tanf
151+
define float @tan_f32(float %x) #0 {
152+
%val = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
153+
ret float %val
154+
}
155+
149156
; CHECK-LABEL: pow_f32:
150157
; CHECK: bl powf
151158
define float @pow_f32(float %x, float %y) #0 {
@@ -630,6 +637,13 @@ define double @cos_f64(double %x) #0 {
630637
ret double %val
631638
}
632639

640+
; CHECK-LABEL: tan_f64:
641+
; CHECK: bl tan
642+
define double @tan_f64(double %x) #0 {
643+
%val = call double @llvm.experimental.constrained.tan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
644+
ret double %val
645+
}
646+
633647
; CHECK-LABEL: pow_f64:
634648
; CHECK: bl pow
635649
define double @pow_f64(double %x, double %y) #0 {
@@ -1114,6 +1128,13 @@ define fp128 @cos_f128(fp128 %x) #0 {
11141128
ret fp128 %val
11151129
}
11161130

1131+
; CHECK-LABEL: tan_f128:
1132+
; CHECK: bl tanl
1133+
define fp128 @tan_f128(fp128 %x) #0 {
1134+
%val = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1135+
ret fp128 %val
1136+
}
1137+
11171138
; CHECK-LABEL: pow_f128:
11181139
; CHECK: bl powl
11191140
define fp128 @pow_f128(fp128 %x, fp128 %y) #0 {
@@ -1491,6 +1512,13 @@ define <1 x double> @cos_v1f64(<1 x double> %x, <1 x double> %y) #0 {
14911512
ret <1 x double> %val
14921513
}
14931514

1515+
; CHECK-LABEL: tan_v1f64:
1516+
; CHECK: bl tan
1517+
define <1 x double> @tan_v1f64(<1 x double> %x, <1 x double> %y) #0 {
1518+
%val = call <1 x double> @llvm.experimental.constrained.tan.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1519+
ret <1 x double> %val
1520+
}
1521+
14941522
; CHECK-LABEL: pow_v1f64:
14951523
; CHECK: bl pow
14961524
define <1 x double> @pow_v1f64(<1 x double> %x, <1 x double> %y) #0 {
@@ -1555,6 +1583,7 @@ declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)
15551583
declare float @llvm.experimental.constrained.powi.f32(float, i32, metadata, metadata)
15561584
declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
15571585
declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)
1586+
declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)
15581587
declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
15591588
declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
15601589
declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
@@ -1599,6 +1628,7 @@ declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadat
15991628
declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
16001629
declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
16011630
declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
1631+
declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)
16021632
declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
16031633
declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
16041634
declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)
@@ -1643,6 +1673,7 @@ declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata
16431673
declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)
16441674
declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
16451675
declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)
1676+
declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata)
16461677
declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)
16471678
declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)
16481679
declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)

llvm/test/CodeGen/ARM/fp-intrinsics.ll

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@ define float @cos_f32(float %x) #0 {
139139
ret float %val
140140
}
141141

142+
; CHECK-LABEL: tan_f32:
143+
; CHECK: bl tanf
144+
define float @tan_f32(float %x) #0 {
145+
%val = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
146+
ret float %val
147+
}
148+
142149
; CHECK-LABEL: pow_f32:
143150
; CHECK: bl powf
144151
define float @pow_f32(float %x, float %y) #0 {
@@ -596,6 +603,13 @@ define double @cos_f64(double %x) #0 {
596603
ret double %val
597604
}
598605

606+
; CHECK-LABEL: tan_f64:
607+
; CHECK: bl tan
608+
define double @tan_f64(double %x) #0 {
609+
%val = call double @llvm.experimental.constrained.tan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
610+
ret double %val
611+
}
612+
599613
; CHECK-LABEL: pow_f64:
600614
; CHECK: bl pow
601615
define double @pow_f64(double %x, double %y) #0 {
@@ -1023,6 +1037,7 @@ declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)
10231037
declare float @llvm.experimental.constrained.powi.f32(float, i32, metadata, metadata)
10241038
declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
10251039
declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)
1040+
declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)
10261041
declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
10271042
declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
10281043
declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
@@ -1056,6 +1071,7 @@ declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadat
10561071
declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
10571072
declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
10581073
declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
1074+
declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)
10591075
declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
10601076
declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
10611077
declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)

llvm/test/CodeGen/X86/fp-intrinsics.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2758,6 +2758,58 @@ entry:
27582758
ret float %result
27592759
}
27602760

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+
27612813
attributes #0 = { strictfp }
27622814

27632815
@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,
27712823
declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
27722824
declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
27732825
declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
2826+
declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)
27742827
declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)
27752828
declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)
27762829
declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)

llvm/test/CodeGen/X86/fp-strict-libcalls-msvc32.ll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,23 @@ define float @sin(float %x) #0 {
160160
ret float %result
161161
}
162162

163+
define float @tan(float %x) #0 {
164+
; CHECK-LABEL: tan:
165+
; CHECK: # %bb.0:
166+
; CHECK-NEXT: subl $12, %esp
167+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
168+
; CHECK-NEXT: fstpl (%esp)
169+
; CHECK-NEXT: wait
170+
; CHECK-NEXT: calll _tan
171+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
172+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
173+
; CHECK-NEXT: wait
174+
; CHECK-NEXT: addl $12, %esp
175+
; CHECK-NEXT: retl
176+
%result = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
177+
ret float %result
178+
}
179+
163180
attributes #0 = { strictfp }
164181

165182
declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
@@ -171,3 +188,4 @@ declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
171188
declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
172189
declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
173190
declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
191+
declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)

llvm/test/CodeGen/X86/fp128-libcalls-strict.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,46 @@ entry:
10471047
ret fp128 %sqrt
10481048
}
10491049

1050+
define fp128 @tan(fp128 %x) nounwind strictfp {
1051+
; ANDROID-LABEL: tan:
1052+
; ANDROID: # %bb.0: # %entry
1053+
; ANDROID-NEXT: pushq %rax
1054+
; ANDROID-NEXT: callq tanl@PLT
1055+
; ANDROID-NEXT: popq %rax
1056+
; ANDROID-NEXT: retq
1057+
;
1058+
; GNU-LABEL: tan:
1059+
; GNU: # %bb.0: # %entry
1060+
; GNU-NEXT: pushq %rax
1061+
; GNU-NEXT: callq tanf128@PLT
1062+
; GNU-NEXT: popq %rax
1063+
; GNU-NEXT: retq
1064+
;
1065+
; X86-LABEL: tan:
1066+
; X86: # %bb.0: # %entry
1067+
; X86-NEXT: pushl %esi
1068+
; X86-NEXT: subl $24, %esp
1069+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1070+
; X86-NEXT: subl $12, %esp
1071+
; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1072+
; X86-NEXT: pushl {{[0-9]+}}(%esp)
1073+
; X86-NEXT: pushl {{[0-9]+}}(%esp)
1074+
; X86-NEXT: pushl {{[0-9]+}}(%esp)
1075+
; X86-NEXT: pushl {{[0-9]+}}(%esp)
1076+
; X86-NEXT: pushl %eax
1077+
; X86-NEXT: calll tanl
1078+
; X86-NEXT: addl $28, %esp
1079+
; X86-NEXT: movaps (%esp), %xmm0
1080+
; X86-NEXT: movaps %xmm0, (%esi)
1081+
; X86-NEXT: movl %esi, %eax
1082+
; X86-NEXT: addl $24, %esp
1083+
; X86-NEXT: popl %esi
1084+
; X86-NEXT: retl $4
1085+
entry:
1086+
%tan = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1087+
ret fp128 %tan
1088+
}
1089+
10501090
define fp128 @trunc(fp128 %x) nounwind strictfp {
10511091
; ANDROID-LABEL: trunc:
10521092
; ANDROID: # %bb.0: # %entry
@@ -1663,6 +1703,7 @@ declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)
16631703
declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)
16641704
declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
16651705
declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)
1706+
declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata)
16661707
declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)
16671708
declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata)
16681709
declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata)

llvm/test/CodeGen/X86/fp80-strict-libcalls.ll

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,31 @@ entry:
504504
ret x86_fp80 %sin
505505
}
506506

507+
define x86_fp80 @tan(x86_fp80 %x) nounwind strictfp {
508+
; X86-LABEL: tan:
509+
; X86: # %bb.0: # %entry
510+
; X86-NEXT: subl $12, %esp
511+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
512+
; X86-NEXT: fstpt (%esp)
513+
; X86-NEXT: wait
514+
; X86-NEXT: calll tanl
515+
; X86-NEXT: addl $12, %esp
516+
; X86-NEXT: retl
517+
;
518+
; X64-LABEL: tan:
519+
; X64: # %bb.0: # %entry
520+
; X64-NEXT: subq $24, %rsp
521+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
522+
; X64-NEXT: fstpt (%rsp)
523+
; X64-NEXT: wait
524+
; X64-NEXT: callq tanl@PLT
525+
; X64-NEXT: addq $24, %rsp
526+
; X64-NEXT: retq
527+
entry:
528+
%tan = call x86_fp80 @llvm.experimental.constrained.tan.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
529+
ret x86_fp80 %tan
530+
}
531+
507532
define x86_fp80 @trunc(x86_fp80 %x) nounwind strictfp {
508533
; X86-LABEL: trunc:
509534
; X86: # %bb.0: # %entry
@@ -650,6 +675,7 @@ declare x86_fp80 @llvm.experimental.constrained.rint.f80(x86_fp80, metadata, met
650675
declare x86_fp80 @llvm.experimental.constrained.round.f80(x86_fp80, metadata)
651676
declare x86_fp80 @llvm.experimental.constrained.roundeven.f80(x86_fp80, metadata)
652677
declare x86_fp80 @llvm.experimental.constrained.sin.f80(x86_fp80, metadata, metadata)
678+
declare x86_fp80 @llvm.experimental.constrained.tan.f80(x86_fp80, metadata, metadata)
653679
declare x86_fp80 @llvm.experimental.constrained.trunc.f80(x86_fp80, metadata)
654680
declare i32 @llvm.experimental.constrained.lrint.i32.f80(x86_fp80, metadata, metadata)
655681
declare i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80, metadata, metadata)

0 commit comments

Comments
 (0)