|
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 i64 @test_llrint_i64_f16(half %x) nounwind { |
12 |
| -; entry: |
13 |
| -; %0 = tail call i64 @llvm.llrint.i64.f16(half %x) |
14 |
| -; ret i64 %0 |
15 |
| -; } |
| 10 | +define i64 @test_llrint_i64_f16(half %x) nounwind { |
| 11 | +; X86-NOSSE-LABEL: test_llrint_i64_f16: |
| 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: movl %eax, (%esp) |
| 16 | +; X86-NOSSE-NEXT: calll __extendhfsf2 |
| 17 | +; X86-NOSSE-NEXT: fstps (%esp) |
| 18 | +; X86-NOSSE-NEXT: calll llrintf |
| 19 | +; X86-NOSSE-NEXT: popl %ecx |
| 20 | +; X86-NOSSE-NEXT: retl |
| 21 | +; |
| 22 | +; X86-SSE2-LABEL: test_llrint_i64_f16: |
| 23 | +; X86-SSE2: # %bb.0: # %entry |
| 24 | +; X86-SSE2-NEXT: pushl %eax |
| 25 | +; X86-SSE2-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0 |
| 26 | +; X86-SSE2-NEXT: pextrw $0, %xmm0, %eax |
| 27 | +; X86-SSE2-NEXT: movw %ax, (%esp) |
| 28 | +; X86-SSE2-NEXT: calll __extendhfsf2 |
| 29 | +; X86-SSE2-NEXT: fstps (%esp) |
| 30 | +; X86-SSE2-NEXT: calll llrintf |
| 31 | +; X86-SSE2-NEXT: popl %ecx |
| 32 | +; X86-SSE2-NEXT: retl |
| 33 | +; |
| 34 | +; X64-SSE-LABEL: test_llrint_i64_f16: |
| 35 | +; X64-SSE: # %bb.0: # %entry |
| 36 | +; X64-SSE-NEXT: pushq %rax |
| 37 | +; X64-SSE-NEXT: callq __extendhfsf2@PLT |
| 38 | +; X64-SSE-NEXT: callq rintf@PLT |
| 39 | +; X64-SSE-NEXT: callq __truncsfhf2@PLT |
| 40 | +; X64-SSE-NEXT: callq __extendhfsf2@PLT |
| 41 | +; X64-SSE-NEXT: cvttss2si %xmm0, %rax |
| 42 | +; X64-SSE-NEXT: popq %rcx |
| 43 | +; X64-SSE-NEXT: retq |
| 44 | +entry: |
| 45 | + %0 = tail call i64 @llvm.llrint.i64.f16(half %x) |
| 46 | + ret i64 %0 |
| 47 | +} |
16 | 48 |
|
17 | 49 | define i64 @test_llrint_i64_f32(float %x) nounwind {
|
18 | 50 | ; X86-NOSSE-LABEL: test_llrint_i64_f32:
|
@@ -217,12 +249,11 @@ entry:
|
217 | 249 | ret i64 %0
|
218 | 250 | }
|
219 | 251 |
|
220 |
| -; FIXME: crash |
221 |
| -; define i64 @test_llrint_i64_f16_strict(half %x) nounwind strictfp { |
222 |
| -; entry: |
223 |
| -; %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f16(half %x, metadata!"round.dynamic", metadata!"fpexcept.strict") |
224 |
| -; ret i64 %0 |
225 |
| -; } |
| 252 | +define i64 @test_llrint_i64_f16_strict(half %x) nounwind strictfp { |
| 253 | +entry: |
| 254 | + %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f16(half %x, metadata!"round.dynamic", metadata!"fpexcept.strict") |
| 255 | + ret i64 %0 |
| 256 | +} |
226 | 257 |
|
227 | 258 | define i64 @test_llrint_i64_f32_strict(float %x) nounwind strictfp {
|
228 | 259 | ; X86-NOSSE-LABEL: test_llrint_i64_f32_strict:
|
|
0 commit comments