|
7 | 7 | ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=X64,X64-AVX
|
8 | 8 | ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64,X64-AVX
|
9 | 9 |
|
10 |
| -; FIXME: crash |
11 |
| -; define i32 @testmswh(half %x) nounwind { |
12 |
| -; entry: |
13 |
| -; %0 = tail call i32 @llvm.lrint.i32.f16(half %x) |
14 |
| -; ret i32 %0 |
15 |
| -; } |
| 10 | +define i32 @testmswh(half %x) nounwind { |
| 11 | +; X86-NOSSE-LABEL: testmswh: |
| 12 | +; X86-NOSSE: # %bb.0: # %entry |
| 13 | +; X86-NOSSE-NEXT: pushl %eax |
| 14 | +; X86-NOSSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax |
| 15 | +; X86-NOSSE-NEXT: pushl %eax |
| 16 | +; X86-NOSSE-NEXT: calll __extendhfsf2 |
| 17 | +; X86-NOSSE-NEXT: addl $4, %esp |
| 18 | +; X86-NOSSE-NEXT: fistpl (%esp) |
| 19 | +; X86-NOSSE-NEXT: movl (%esp), %eax |
| 20 | +; X86-NOSSE-NEXT: popl %ecx |
| 21 | +; X86-NOSSE-NEXT: retl |
| 22 | +; |
| 23 | +; X86-SSE2-LABEL: testmswh: |
| 24 | +; X86-SSE2: # %bb.0: # %entry |
| 25 | +; X86-SSE2-NEXT: subl $8, %esp |
| 26 | +; X86-SSE2-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0 |
| 27 | +; X86-SSE2-NEXT: pextrw $0, %xmm0, %eax |
| 28 | +; X86-SSE2-NEXT: movw %ax, (%esp) |
| 29 | +; X86-SSE2-NEXT: calll __extendhfsf2 |
| 30 | +; X86-SSE2-NEXT: fstps (%esp) |
| 31 | +; X86-SSE2-NEXT: calll rintf |
| 32 | +; X86-SSE2-NEXT: fstps (%esp) |
| 33 | +; X86-SSE2-NEXT: calll __truncsfhf2 |
| 34 | +; X86-SSE2-NEXT: pextrw $0, %xmm0, %eax |
| 35 | +; X86-SSE2-NEXT: movw %ax, (%esp) |
| 36 | +; X86-SSE2-NEXT: calll __extendhfsf2 |
| 37 | +; X86-SSE2-NEXT: fstps {{[0-9]+}}(%esp) |
| 38 | +; X86-SSE2-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax |
| 39 | +; X86-SSE2-NEXT: addl $8, %esp |
| 40 | +; X86-SSE2-NEXT: retl |
| 41 | +; |
| 42 | +; X64-SSE-LABEL: testmswh: |
| 43 | +; X64-SSE: # %bb.0: # %entry |
| 44 | +; X64-SSE-NEXT: pushq %rax |
| 45 | +; X64-SSE-NEXT: callq __extendhfsf2@PLT |
| 46 | +; X64-SSE-NEXT: callq rintf@PLT |
| 47 | +; X64-SSE-NEXT: callq __truncsfhf2@PLT |
| 48 | +; X64-SSE-NEXT: callq __extendhfsf2@PLT |
| 49 | +; X64-SSE-NEXT: cvttss2si %xmm0, %eax |
| 50 | +; X64-SSE-NEXT: popq %rcx |
| 51 | +; X64-SSE-NEXT: retq |
| 52 | +entry: |
| 53 | + %0 = tail call i32 @llvm.lrint.i32.f16(half %x) |
| 54 | + ret i32 %0 |
| 55 | +} |
16 | 56 |
|
17 | 57 | define i32 @testmsws(float %x) nounwind {
|
18 | 58 | ; X86-NOSSE-LABEL: testmsws:
|
|
0 commit comments