|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s |
| 2 | +; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=CHECK,SSE |
| 3 | +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,AVX |
3 | 4 |
|
4 | 5 | ; PR31455 - https://bugs.llvm.org/show_bug.cgi?id=31455
|
5 | 6 | ; We have to assume that errno can be set, so we have to make a libcall in that case.
|
|
9 | 10 | ; for that), but we're checking the final asm to make sure that comes out as expected too.
|
10 | 11 |
|
11 | 12 | define float @f(float %val) nounwind {
|
12 |
| -; CHECK-LABEL: f: |
13 |
| -; CHECK: # %bb.0: |
14 |
| -; CHECK-NEXT: xorps %xmm1, %xmm1 |
15 |
| -; CHECK-NEXT: ucomiss %xmm1, %xmm0 |
16 |
| -; CHECK-NEXT: jb .LBB0_2 |
17 |
| -; CHECK-NEXT: # %bb.1: # %.split |
18 |
| -; CHECK-NEXT: sqrtss %xmm0, %xmm0 |
19 |
| -; CHECK-NEXT: retq |
20 |
| -; CHECK-NEXT: .LBB0_2: # %call.sqrt |
21 |
| -; CHECK-NEXT: jmp sqrtf # TAILCALL |
| 13 | +; SSE-LABEL: f: |
| 14 | +; SSE: # %bb.0: |
| 15 | +; SSE-NEXT: xorps %xmm1, %xmm1 |
| 16 | +; SSE-NEXT: ucomiss %xmm1, %xmm0 |
| 17 | +; SSE-NEXT: jb .LBB0_2 |
| 18 | +; SSE-NEXT: # %bb.1: # %.split |
| 19 | +; SSE-NEXT: sqrtss %xmm0, %xmm0 |
| 20 | +; SSE-NEXT: retq |
| 21 | +; SSE-NEXT: .LBB0_2: # %call.sqrt |
| 22 | +; SSE-NEXT: jmp sqrtf # TAILCALL |
| 23 | +; |
| 24 | +; AVX-LABEL: f: |
| 25 | +; AVX: # %bb.0: |
| 26 | +; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 |
| 27 | +; AVX-NEXT: vucomiss %xmm1, %xmm0 |
| 28 | +; AVX-NEXT: jb .LBB0_2 |
| 29 | +; AVX-NEXT: # %bb.1: # %.split |
| 30 | +; AVX-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 |
| 31 | +; AVX-NEXT: retq |
| 32 | +; AVX-NEXT: .LBB0_2: # %call.sqrt |
| 33 | +; AVX-NEXT: jmp sqrtf # TAILCALL |
22 | 34 | %res = tail call float @sqrtf(float %val)
|
23 | 35 | ret float %res
|
24 | 36 | }
|
25 | 37 |
|
26 | 38 | define double @d(double %val) nounwind {
|
27 |
| -; CHECK-LABEL: d: |
28 |
| -; CHECK: # %bb.0: |
29 |
| -; CHECK-NEXT: xorps %xmm1, %xmm1 |
30 |
| -; CHECK-NEXT: ucomisd %xmm1, %xmm0 |
31 |
| -; CHECK-NEXT: jb .LBB1_2 |
32 |
| -; CHECK-NEXT: # %bb.1: # %.split |
33 |
| -; CHECK-NEXT: sqrtsd %xmm0, %xmm0 |
34 |
| -; CHECK-NEXT: retq |
35 |
| -; CHECK-NEXT: .LBB1_2: # %call.sqrt |
36 |
| -; CHECK-NEXT: jmp sqrt # TAILCALL |
| 39 | +; SSE-LABEL: d: |
| 40 | +; SSE: # %bb.0: |
| 41 | +; SSE-NEXT: xorps %xmm1, %xmm1 |
| 42 | +; SSE-NEXT: ucomisd %xmm1, %xmm0 |
| 43 | +; SSE-NEXT: jb .LBB1_2 |
| 44 | +; SSE-NEXT: # %bb.1: # %.split |
| 45 | +; SSE-NEXT: sqrtsd %xmm0, %xmm0 |
| 46 | +; SSE-NEXT: retq |
| 47 | +; SSE-NEXT: .LBB1_2: # %call.sqrt |
| 48 | +; SSE-NEXT: jmp sqrt # TAILCALL |
| 49 | +; |
| 50 | +; AVX-LABEL: d: |
| 51 | +; AVX: # %bb.0: |
| 52 | +; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 |
| 53 | +; AVX-NEXT: vucomisd %xmm1, %xmm0 |
| 54 | +; AVX-NEXT: jb .LBB1_2 |
| 55 | +; AVX-NEXT: # %bb.1: # %.split |
| 56 | +; AVX-NEXT: vsqrtsd %xmm0, %xmm0, %xmm0 |
| 57 | +; AVX-NEXT: retq |
| 58 | +; AVX-NEXT: .LBB1_2: # %call.sqrt |
| 59 | +; AVX-NEXT: jmp sqrt # TAILCALL |
37 | 60 | %res = tail call double @sqrt(double %val)
|
38 | 61 | ret double %res
|
39 | 62 | }
|
40 | 63 |
|
41 | 64 | define double @minsize(double %x, double %y) minsize {
|
42 |
| -; CHECK-LABEL: minsize: |
43 |
| -; CHECK: # %bb.0: |
44 |
| -; CHECK-NEXT: mulsd %xmm0, %xmm0 |
45 |
| -; CHECK-NEXT: mulsd %xmm1, %xmm1 |
46 |
| -; CHECK-NEXT: addsd %xmm0, %xmm1 |
47 |
| -; CHECK-NEXT: xorps %xmm0, %xmm0 |
48 |
| -; CHECK-NEXT: sqrtsd %xmm1, %xmm0 |
49 |
| -; CHECK-NEXT: retq |
| 65 | +; SSE-LABEL: minsize: |
| 66 | +; SSE: # %bb.0: |
| 67 | +; SSE-NEXT: mulsd %xmm0, %xmm0 |
| 68 | +; SSE-NEXT: mulsd %xmm1, %xmm1 |
| 69 | +; SSE-NEXT: addsd %xmm0, %xmm1 |
| 70 | +; SSE-NEXT: xorps %xmm0, %xmm0 |
| 71 | +; SSE-NEXT: sqrtsd %xmm1, %xmm0 |
| 72 | +; SSE-NEXT: retq |
| 73 | +; |
| 74 | +; AVX-LABEL: minsize: |
| 75 | +; AVX: # %bb.0: |
| 76 | +; AVX-NEXT: vmulsd %xmm0, %xmm0, %xmm0 |
| 77 | +; AVX-NEXT: vmulsd %xmm1, %xmm1, %xmm1 |
| 78 | +; AVX-NEXT: vaddsd %xmm1, %xmm0, %xmm0 |
| 79 | +; AVX-NEXT: vsqrtsd %xmm0, %xmm0, %xmm0 |
| 80 | +; AVX-NEXT: retq |
50 | 81 | %t3 = fmul fast double %x, %x
|
51 | 82 | %t4 = fmul fast double %y, %y
|
52 | 83 | %t5 = fadd fast double %t3, %t4
|
|
0 commit comments