1010; RUN: llc -mtriple=x86_64-apple-xros8.0 < %s | FileCheck -check-prefix=APPLE %s
1111; RUN: llc -mtriple=x86_64-apple-driverkit < %s | FileCheck -check-prefix=APPLE %s
1212; RUN: llc -mtriple=x86_64-apple-driverkit24.0 < %s | FileCheck -check-prefix=APPLE %s
13+ ; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefix=GISEL-X86
14+ ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefix=GISEL-X64
1315
1416; RUN: not llc -mtriple=x86_64-apple-macos10.8 -filetype=null %s 2>&1 | FileCheck -check-prefix=ERR %s
1517; Check exp10/exp10f is emitted as __exp10/__exp10f on assorted systems.
1618
1719; ERR: no libcall available for fexp10
1820
19- define float @test_exp10_f32 (float %x ) {
21+ define float @test_exp10_f32 (float %x ) nounwind {
2022; LINUX-LABEL: test_exp10_f32:
2123; LINUX: # %bb.0:
2224; LINUX-NEXT: jmp exp10f@PLT # TAILCALL
@@ -25,15 +27,23 @@ define float @test_exp10_f32(float %x) {
2527; APPLE: ## %bb.0:
2628; APPLE-NEXT: jmp ___exp10f ## TAILCALL
2729;
28- ; MISSED-LABEL: test_exp10_f32:
29- ; MISSED: ## %bb.0:
30- ; MISSED-NEXT: jmp _exp10f ## TAILCALL
31-
30+ ; GISEL-X86-LABEL: test_exp10_f32:
31+ ; GISEL-X86: # %bb.0:
32+ ; GISEL-X86-NEXT: subl $12, %esp
33+ ; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)
34+ ; GISEL-X86-NEXT: fstps (%esp)
35+ ; GISEL-X86-NEXT: calll exp10f
36+ ; GISEL-X86-NEXT: addl $12, %esp
37+ ; GISEL-X86-NEXT: retl
38+ ;
39+ ; GISEL-X64-LABEL: test_exp10_f32:
40+ ; GISEL-X64: # %bb.0:
41+ ; GISEL-X64-NEXT: jmp exp10f@PLT # TAILCALL
3242 %ret = call float @llvm.exp10.f32 (float %x )
3343 ret float %ret
3444}
3545
36- define double @test_exp10_f64 (double %x ) {
46+ define double @test_exp10_f64 (double %x ) nounwind {
3747; LINUX-LABEL: test_exp10_f64:
3848; LINUX: # %bb.0:
3949; LINUX-NEXT: jmp exp10@PLT # TAILCALL
@@ -42,10 +52,58 @@ define double @test_exp10_f64(double %x) {
4252; APPLE: ## %bb.0:
4353; APPLE-NEXT: jmp ___exp10 ## TAILCALL
4454;
45- ; MISSED-LABEL: test_exp10_f64:
46- ; MISSED: ## %bb.0:
47- ; MISSED-NEXT: jmp _exp10 ## TAILCALL
55+ ; GISEL-X86-LABEL: test_exp10_f64:
56+ ; GISEL-X86: # %bb.0:
57+ ; GISEL-X86-NEXT: subl $12, %esp
58+ ; GISEL-X86-NEXT: fldl {{[0-9]+}}(%esp)
59+ ; GISEL-X86-NEXT: fstpl (%esp)
60+ ; GISEL-X86-NEXT: calll exp10
61+ ; GISEL-X86-NEXT: addl $12, %esp
62+ ; GISEL-X86-NEXT: retl
4863;
64+ ; GISEL-X64-LABEL: test_exp10_f64:
65+ ; GISEL-X64: # %bb.0:
66+ ; GISEL-X64-NEXT: jmp exp10@PLT # TAILCALL
4967 %ret = call double @llvm.exp10.f64 (double %x )
5068 ret double %ret
5169}
70+
71+ define x86_fp80 @test_exp10_f80 (x86_fp80 %x ) nounwind {
72+ ; LINUX-LABEL: test_exp10_f80:
73+ ; LINUX: # %bb.0:
74+ ; LINUX-NEXT: subq $24, %rsp
75+ ; LINUX-NEXT: fldt {{[0-9]+}}(%rsp)
76+ ; LINUX-NEXT: fstpt (%rsp)
77+ ; LINUX-NEXT: callq exp10l@PLT
78+ ; LINUX-NEXT: addq $24, %rsp
79+ ; LINUX-NEXT: retq
80+ ;
81+ ; APPLE-LABEL: test_exp10_f80:
82+ ; APPLE: ## %bb.0:
83+ ; APPLE-NEXT: subq $24, %rsp
84+ ; APPLE-NEXT: fldt {{[0-9]+}}(%rsp)
85+ ; APPLE-NEXT: fstpt (%rsp)
86+ ; APPLE-NEXT: callq _exp10l
87+ ; APPLE-NEXT: addq $24, %rsp
88+ ; APPLE-NEXT: retq
89+ ;
90+ ; GISEL-X86-LABEL: test_exp10_f80:
91+ ; GISEL-X86: # %bb.0:
92+ ; GISEL-X86-NEXT: subl $12, %esp
93+ ; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)
94+ ; GISEL-X86-NEXT: fstpt (%esp)
95+ ; GISEL-X86-NEXT: calll exp10l
96+ ; GISEL-X86-NEXT: addl $12, %esp
97+ ; GISEL-X86-NEXT: retl
98+ ;
99+ ; GISEL-X64-LABEL: test_exp10_f80:
100+ ; GISEL-X64: # %bb.0:
101+ ; GISEL-X64-NEXT: subq $24, %rsp
102+ ; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)
103+ ; GISEL-X64-NEXT: fstpt (%rsp)
104+ ; GISEL-X64-NEXT: callq exp10l@PLT
105+ ; GISEL-X64-NEXT: addq $24, %rsp
106+ ; GISEL-X64-NEXT: retq
107+ %ret = call x86_fp80 @llvm.exp10.f80 (x86_fp80 %x )
108+ ret x86_fp80 %ret
109+ }
0 commit comments