|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -mtriple=x86_64-linux-gnu < %s | FileCheck %s
|
3 | 3 |
|
4 |
| -; FIXME: Ensure vectorized FREMs are not widened/unrolled such that they get lowered |
| 4 | +; Ensure vectorized FREMs are not widened/unrolled such that they get lowered |
5 | 5 | ; into libcalls on undef elements.
|
6 | 6 |
|
7 | 7 | define float @frem(<2 x float> %a0, <2 x float> %a1, <2 x float> %a2, <2 x float> *%p3) nounwind {
|
8 | 8 | ; CHECK-LABEL: frem:
|
9 | 9 | ; CHECK: # %bb.0:
|
10 | 10 | ; CHECK-NEXT: pushq %rbx
|
11 |
| -; CHECK-NEXT: subq $80, %rsp |
| 11 | +; CHECK-NEXT: subq $64, %rsp |
12 | 12 | ; CHECK-NEXT: movq %rdi, %rbx
|
13 | 13 | ; CHECK-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
14 | 14 | ; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
15 |
| -; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill |
16 |
| -; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] |
17 |
| -; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] |
18 |
| -; CHECK-NEXT: callq fmodf@PLT |
19 |
| -; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill |
20 |
| -; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload |
21 |
| -; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] |
22 |
| -; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload |
23 |
| -; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] |
24 |
| -; CHECK-NEXT: callq fmodf@PLT |
25 |
| -; CHECK-NEXT: unpcklps (%rsp), %xmm0 # 16-byte Folded Reload |
26 |
| -; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] |
27 | 15 | ; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
|
28 |
| -; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload |
29 |
| -; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload |
30 | 16 | ; CHECK-NEXT: callq fmodf@PLT
|
31 | 17 | ; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
32 |
| -; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload |
| 18 | +; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload |
33 | 19 | ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
|
34 | 20 | ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
|
35 | 21 | ; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]
|
36 | 22 | ; CHECK-NEXT: callq fmodf@PLT
|
37 | 23 | ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
|
38 | 24 | ; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
|
39 |
| -; CHECK-NEXT: unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload |
40 |
| -; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] |
41 | 25 | ; CHECK-NEXT: divps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload
|
42 | 26 | ; CHECK-NEXT: movaps %xmm1, %xmm0
|
43 | 27 | ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]
|
44 | 28 | ; CHECK-NEXT: addss %xmm1, %xmm0
|
45 | 29 | ; CHECK-NEXT: movlps %xmm1, (%rbx)
|
46 |
| -; CHECK-NEXT: addq $80, %rsp |
| 30 | +; CHECK-NEXT: addq $64, %rsp |
47 | 31 | ; CHECK-NEXT: popq %rbx
|
48 | 32 | ; CHECK-NEXT: retq
|
49 | 33 | %frem = frem <2 x float> %a0, %a1
|
|
0 commit comments