10
10
; RUN: llc -mtriple=x86_64-apple-xros8.0 < %s | FileCheck -check-prefix=APPLE %s
11
11
; RUN: llc -mtriple=x86_64-apple-driverkit < %s | FileCheck -check-prefix=APPLE %s
12
12
; 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
13
15
14
16
; RUN: not llc -mtriple=x86_64-apple-macos10.8 -filetype=null %s 2>&1 | FileCheck -check-prefix=ERR %s
15
17
; Check exp10/exp10f is emitted as __exp10/__exp10f on assorted systems.
16
18
17
19
; ERR: no libcall available for fexp10
18
20
19
- define float @test_exp10_f32 (float %x ) {
21
+ define float @test_exp10_f32 (float %x ) nounwind {
20
22
; LINUX-LABEL: test_exp10_f32:
21
23
; LINUX: # %bb.0:
22
24
; LINUX-NEXT: jmp exp10f@PLT # TAILCALL
@@ -25,15 +27,23 @@ define float @test_exp10_f32(float %x) {
25
27
; APPLE: ## %bb.0:
26
28
; APPLE-NEXT: jmp ___exp10f ## TAILCALL
27
29
;
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
32
42
%ret = call float @llvm.exp10.f32 (float %x )
33
43
ret float %ret
34
44
}
35
45
36
- define double @test_exp10_f64 (double %x ) {
46
+ define double @test_exp10_f64 (double %x ) nounwind {
37
47
; LINUX-LABEL: test_exp10_f64:
38
48
; LINUX: # %bb.0:
39
49
; LINUX-NEXT: jmp exp10@PLT # TAILCALL
@@ -42,10 +52,58 @@ define double @test_exp10_f64(double %x) {
42
52
; APPLE: ## %bb.0:
43
53
; APPLE-NEXT: jmp ___exp10 ## TAILCALL
44
54
;
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
48
63
;
64
+ ; GISEL-X64-LABEL: test_exp10_f64:
65
+ ; GISEL-X64: # %bb.0:
66
+ ; GISEL-X64-NEXT: jmp exp10@PLT # TAILCALL
49
67
%ret = call double @llvm.exp10.f64 (double %x )
50
68
ret double %ret
51
69
}
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