|
3 | 3 | ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64 |
4 | 4 | ; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=X86,SDAG-X86 |
5 | 5 | ; 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 | + |
6 | 9 | ; 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. |
7 | 10 | ; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X86 |
8 | 11 | ; 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 { |
34 | 37 | ; X64-NEXT: popq %rax |
35 | 38 | ; X64-NEXT: retq |
36 | 39 | ; |
| 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 | +; |
37 | 63 | ; GISEL-X86-LABEL: test_sincos_f32: |
38 | 64 | ; GISEL-X86: # %bb.0: |
39 | 65 | ; GISEL-X86-NEXT: subl $28, %esp |
@@ -93,6 +119,28 @@ define { double, double } @test_sincos_f64(double %Val) nounwind { |
93 | 119 | ; X64-NEXT: addq $24, %rsp |
94 | 120 | ; X64-NEXT: retq |
95 | 121 | ; |
| 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 | +; |
96 | 144 | ; GISEL-X86-LABEL: test_sincos_f64: |
97 | 145 | ; GISEL-X86: # %bb.0: |
98 | 146 | ; GISEL-X86-NEXT: subl $44, %esp |
@@ -153,6 +201,40 @@ define { x86_fp80, x86_fp80 } @test_sincos_f80(x86_fp80 %Val) nounwind { |
153 | 201 | ; X64-NEXT: addq $56, %rsp |
154 | 202 | ; X64-NEXT: retq |
155 | 203 | ; |
| 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 | +; |
156 | 238 | ; GISEL-X86-LABEL: test_sincos_f80: |
157 | 239 | ; GISEL-X86: # %bb.0: |
158 | 240 | ; 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 % |
288 | 370 | ; SDAG-X64-NEXT: popq %r14 |
289 | 371 | ; SDAG-X64-NEXT: retq |
290 | 372 | ; |
| 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 | +; |
291 | 424 | ; GISEL-X86-LABEL: can_fold_with_call_in_chain: |
292 | 425 | ; GISEL-X86: # %bb.0: # %entry |
293 | 426 | ; GISEL-X86-NEXT: pushl %ebx |
|
0 commit comments