Skip to content

Commit 82d5622

Browse files
authored
X86: Add more sincos vector test checks (#166041)
Macos sincos stret was not well covered, and 64-bit wasn't checked for vector sincos cases.
1 parent 9cf51a7 commit 82d5622

File tree

2 files changed

+454
-83
lines changed

2 files changed

+454
-83
lines changed

llvm/test/CodeGen/X86/isel-llvm.sincos.ll

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
44
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=X86,SDAG-X86
55
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=X64,SDAG-X64
6+
; RUN: llc < %s -mtriple=x86_64-apple-macosx10.9.0 -mcpu=core2 | FileCheck %s --check-prefix=MACOS-SINCOS-STRET
7+
; RUN: llc < %s -mtriple=x86_64-apple-macosx10.8.0 -mcpu=core2 | FileCheck %s --check-prefix=MACOS-NOSINCOS-STRET
8+
69
; TODO: The below RUN line will fails GISEL selection and will fallback to DAG selection due to lack of support for loads/stores in i686 mode, support is expected soon enough, for this reason the llvm/test/CodeGen/X86/GlobalISel/llvm.sincos.mir test is added for now because of the lack of support for i686 in GlobalISel.
710
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X86
811
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X64
@@ -34,6 +37,29 @@ define { float, float } @test_sincos_f32(float %Val) nounwind {
3437
; X64-NEXT: popq %rax
3538
; X64-NEXT: retq
3639
;
40+
; MACOS-SINCOS-STRET-LABEL: test_sincos_f32:
41+
; MACOS-SINCOS-STRET: ## %bb.0:
42+
; MACOS-SINCOS-STRET-NEXT: pushq %rax
43+
; MACOS-SINCOS-STRET-NEXT: callq ___sincosf_stret
44+
; MACOS-SINCOS-STRET-NEXT: movshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
45+
; MACOS-SINCOS-STRET-NEXT: popq %rax
46+
; MACOS-SINCOS-STRET-NEXT: retq
47+
;
48+
; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f32:
49+
; MACOS-NOSINCOS-STRET: ## %bb.0:
50+
; MACOS-NOSINCOS-STRET-NEXT: pushq %rax
51+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, (%rsp) ## 4-byte Spill
52+
; MACOS-NOSINCOS-STRET-NEXT: callq _sinf
53+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
54+
; MACOS-NOSINCOS-STRET-NEXT: movss (%rsp), %xmm0 ## 4-byte Reload
55+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero,zero,zero
56+
; MACOS-NOSINCOS-STRET-NEXT: callq _cosf
57+
; MACOS-NOSINCOS-STRET-NEXT: movaps %xmm0, %xmm1
58+
; MACOS-NOSINCOS-STRET-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload
59+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero,zero,zero
60+
; MACOS-NOSINCOS-STRET-NEXT: popq %rax
61+
; MACOS-NOSINCOS-STRET-NEXT: retq
62+
;
3763
; GISEL-X86-LABEL: test_sincos_f32:
3864
; GISEL-X86: # %bb.0:
3965
; GISEL-X86-NEXT: subl $28, %esp
@@ -93,6 +119,28 @@ define { double, double } @test_sincos_f64(double %Val) nounwind {
93119
; X64-NEXT: addq $24, %rsp
94120
; X64-NEXT: retq
95121
;
122+
; MACOS-SINCOS-STRET-LABEL: test_sincos_f64:
123+
; MACOS-SINCOS-STRET: ## %bb.0:
124+
; MACOS-SINCOS-STRET-NEXT: pushq %rax
125+
; MACOS-SINCOS-STRET-NEXT: callq ___sincos_stret
126+
; MACOS-SINCOS-STRET-NEXT: popq %rax
127+
; MACOS-SINCOS-STRET-NEXT: retq
128+
;
129+
; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f64:
130+
; MACOS-NOSINCOS-STRET: ## %bb.0:
131+
; MACOS-NOSINCOS-STRET-NEXT: subq $24, %rsp
132+
; MACOS-NOSINCOS-STRET-NEXT: movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill
133+
; MACOS-NOSINCOS-STRET-NEXT: callq _sin
134+
; MACOS-NOSINCOS-STRET-NEXT: movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill
135+
; MACOS-NOSINCOS-STRET-NEXT: movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload
136+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero
137+
; MACOS-NOSINCOS-STRET-NEXT: callq _cos
138+
; MACOS-NOSINCOS-STRET-NEXT: movaps %xmm0, %xmm1
139+
; MACOS-NOSINCOS-STRET-NEXT: movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload
140+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero
141+
; MACOS-NOSINCOS-STRET-NEXT: addq $24, %rsp
142+
; MACOS-NOSINCOS-STRET-NEXT: retq
143+
;
96144
; GISEL-X86-LABEL: test_sincos_f64:
97145
; GISEL-X86: # %bb.0:
98146
; GISEL-X86-NEXT: subl $44, %esp
@@ -153,6 +201,40 @@ define { x86_fp80, x86_fp80 } @test_sincos_f80(x86_fp80 %Val) nounwind {
153201
; X64-NEXT: addq $56, %rsp
154202
; X64-NEXT: retq
155203
;
204+
; MACOS-SINCOS-STRET-LABEL: test_sincos_f80:
205+
; MACOS-SINCOS-STRET: ## %bb.0:
206+
; MACOS-SINCOS-STRET-NEXT: subq $40, %rsp
207+
; MACOS-SINCOS-STRET-NEXT: fldt {{[0-9]+}}(%rsp)
208+
; MACOS-SINCOS-STRET-NEXT: fld %st(0)
209+
; MACOS-SINCOS-STRET-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill
210+
; MACOS-SINCOS-STRET-NEXT: fstpt (%rsp)
211+
; MACOS-SINCOS-STRET-NEXT: callq _cosl
212+
; MACOS-SINCOS-STRET-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill
213+
; MACOS-SINCOS-STRET-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload
214+
; MACOS-SINCOS-STRET-NEXT: fstpt (%rsp)
215+
; MACOS-SINCOS-STRET-NEXT: callq _sinl
216+
; MACOS-SINCOS-STRET-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload
217+
; MACOS-SINCOS-STRET-NEXT: fxch %st(1)
218+
; MACOS-SINCOS-STRET-NEXT: addq $40, %rsp
219+
; MACOS-SINCOS-STRET-NEXT: retq
220+
;
221+
; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f80:
222+
; MACOS-NOSINCOS-STRET: ## %bb.0:
223+
; MACOS-NOSINCOS-STRET-NEXT: subq $40, %rsp
224+
; MACOS-NOSINCOS-STRET-NEXT: fldt {{[0-9]+}}(%rsp)
225+
; MACOS-NOSINCOS-STRET-NEXT: fld %st(0)
226+
; MACOS-NOSINCOS-STRET-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill
227+
; MACOS-NOSINCOS-STRET-NEXT: fstpt (%rsp)
228+
; MACOS-NOSINCOS-STRET-NEXT: callq _cosl
229+
; MACOS-NOSINCOS-STRET-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill
230+
; MACOS-NOSINCOS-STRET-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload
231+
; MACOS-NOSINCOS-STRET-NEXT: fstpt (%rsp)
232+
; MACOS-NOSINCOS-STRET-NEXT: callq _sinl
233+
; MACOS-NOSINCOS-STRET-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload
234+
; MACOS-NOSINCOS-STRET-NEXT: fxch %st(1)
235+
; MACOS-NOSINCOS-STRET-NEXT: addq $40, %rsp
236+
; MACOS-NOSINCOS-STRET-NEXT: retq
237+
;
156238
; GISEL-X86-LABEL: test_sincos_f80:
157239
; GISEL-X86: # %bb.0:
158240
; GISEL-X86-NEXT: subl $60, %esp
@@ -288,6 +370,57 @@ define void @can_fold_with_call_in_chain(float %x, ptr noalias %a, ptr noalias %
288370
; SDAG-X64-NEXT: popq %r14
289371
; SDAG-X64-NEXT: retq
290372
;
373+
; MACOS-SINCOS-STRET-LABEL: can_fold_with_call_in_chain:
374+
; MACOS-SINCOS-STRET: ## %bb.0: ## %entry
375+
; MACOS-SINCOS-STRET-NEXT: pushq %r14
376+
; MACOS-SINCOS-STRET-NEXT: pushq %rbx
377+
; MACOS-SINCOS-STRET-NEXT: subq $40, %rsp
378+
; MACOS-SINCOS-STRET-NEXT: movq %rsi, %rbx
379+
; MACOS-SINCOS-STRET-NEXT: movq %rdi, %r14
380+
; MACOS-SINCOS-STRET-NEXT: callq ___sincosf_stret
381+
; MACOS-SINCOS-STRET-NEXT: movaps %xmm0, (%rsp) ## 16-byte Spill
382+
; MACOS-SINCOS-STRET-NEXT: movshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
383+
; MACOS-SINCOS-STRET-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 16-byte Spill
384+
; MACOS-SINCOS-STRET-NEXT: movq %r14, %rdi
385+
; MACOS-SINCOS-STRET-NEXT: movq %rbx, %rsi
386+
; MACOS-SINCOS-STRET-NEXT: callq _foo
387+
; MACOS-SINCOS-STRET-NEXT: movaps (%rsp), %xmm0 ## 16-byte Reload
388+
; MACOS-SINCOS-STRET-NEXT: movss %xmm0, (%r14)
389+
; MACOS-SINCOS-STRET-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 16-byte Reload
390+
; MACOS-SINCOS-STRET-NEXT: movss %xmm0, (%rbx)
391+
; MACOS-SINCOS-STRET-NEXT: addq $40, %rsp
392+
; MACOS-SINCOS-STRET-NEXT: popq %rbx
393+
; MACOS-SINCOS-STRET-NEXT: popq %r14
394+
; MACOS-SINCOS-STRET-NEXT: retq
395+
;
396+
; MACOS-NOSINCOS-STRET-LABEL: can_fold_with_call_in_chain:
397+
; MACOS-NOSINCOS-STRET: ## %bb.0: ## %entry
398+
; MACOS-NOSINCOS-STRET-NEXT: pushq %r14
399+
; MACOS-NOSINCOS-STRET-NEXT: pushq %rbx
400+
; MACOS-NOSINCOS-STRET-NEXT: pushq %rax
401+
; MACOS-NOSINCOS-STRET-NEXT: movq %rsi, %rbx
402+
; MACOS-NOSINCOS-STRET-NEXT: movq %rdi, %r14
403+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, (%rsp) ## 4-byte Spill
404+
; MACOS-NOSINCOS-STRET-NEXT: callq _sinf
405+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
406+
; MACOS-NOSINCOS-STRET-NEXT: movss (%rsp), %xmm0 ## 4-byte Reload
407+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero,zero,zero
408+
; MACOS-NOSINCOS-STRET-NEXT: callq _cosf
409+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, (%rsp) ## 4-byte Spill
410+
; MACOS-NOSINCOS-STRET-NEXT: movq %r14, %rdi
411+
; MACOS-NOSINCOS-STRET-NEXT: movq %rbx, %rsi
412+
; MACOS-NOSINCOS-STRET-NEXT: callq _foo
413+
; MACOS-NOSINCOS-STRET-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload
414+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero,zero,zero
415+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, (%r14)
416+
; MACOS-NOSINCOS-STRET-NEXT: movss (%rsp), %xmm0 ## 4-byte Reload
417+
; MACOS-NOSINCOS-STRET-NEXT: ## xmm0 = mem[0],zero,zero,zero
418+
; MACOS-NOSINCOS-STRET-NEXT: movss %xmm0, (%rbx)
419+
; MACOS-NOSINCOS-STRET-NEXT: addq $8, %rsp
420+
; MACOS-NOSINCOS-STRET-NEXT: popq %rbx
421+
; MACOS-NOSINCOS-STRET-NEXT: popq %r14
422+
; MACOS-NOSINCOS-STRET-NEXT: retq
423+
;
291424
; GISEL-X86-LABEL: can_fold_with_call_in_chain:
292425
; GISEL-X86: # %bb.0: # %entry
293426
; GISEL-X86-NEXT: pushl %ebx

0 commit comments

Comments
 (0)