Skip to content

Commit 35bbeed

Browse files
author
Farzon Lotfi
committed
now that x86 and arm64 backends landed, add constrained tests for those backends
1 parent 7772ca4 commit 35bbeed

6 files changed

+386
-1
lines changed

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)