|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
2 | 2 | ; RUN: llc < %s -mtriple=armv7-none-eabi -float-abi=soft | FileCheck %s --check-prefixes=CHECK,CHECK-SOFT |
3 | 3 | ; RUN: llc < %s -mtriple=armv7-none-eabihf -mattr=+vfp2 -float-abi=hard | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16 |
4 | | -; RUN: llc < %s -mtriple=armv7-none-eabihf -mattr=+vfp2,+fullfp16 -float-abi=hard | FileCheck %s --check-prefixes=CHECK,CHECK-FP16 |
| 4 | +; RUN: llc < %s -mtriple=armv8-none-eabihf -mattr=+fp-armv8 -float-abi=hard | FileCheck %s --check-prefixes=CHECK,CHECK-FPv8 |
| 5 | +; RUN: llc < %s -mtriple=armv8-none-eabihf -mattr=+fp-armv8,+fullfp16 -float-abi=hard | FileCheck %s --check-prefixes=CHECK,CHECK-FP16 |
5 | 6 |
|
6 | | -; FIXME: crash |
7 | | -; define i32 @testmswh_builtin(half %x) { |
8 | | -; entry: |
9 | | -; %0 = tail call i32 @llvm.lrint.i32.f16(half %x) |
10 | | -; ret i32 %0 |
11 | | -; } |
| 7 | +define i32 @testmswh_builtin(half %x) { |
| 8 | +; CHECK-SOFT-LABEL: testmswh_builtin: |
| 9 | +; CHECK-SOFT: @ %bb.0: @ %entry |
| 10 | +; CHECK-SOFT-NEXT: .save {r11, lr} |
| 11 | +; CHECK-SOFT-NEXT: push {r11, lr} |
| 12 | +; CHECK-SOFT-NEXT: bl __aeabi_h2f |
| 13 | +; CHECK-SOFT-NEXT: pop {r11, lr} |
| 14 | +; CHECK-SOFT-NEXT: b lrintf |
| 15 | +; |
| 16 | +; CHECK-NOFP16-LABEL: testmswh_builtin: |
| 17 | +; CHECK-NOFP16: @ %bb.0: @ %entry |
| 18 | +; CHECK-NOFP16-NEXT: .save {r11, lr} |
| 19 | +; CHECK-NOFP16-NEXT: push {r11, lr} |
| 20 | +; CHECK-NOFP16-NEXT: vmov r0, s0 |
| 21 | +; CHECK-NOFP16-NEXT: bl __aeabi_h2f |
| 22 | +; CHECK-NOFP16-NEXT: vmov s0, r0 |
| 23 | +; CHECK-NOFP16-NEXT: pop {r11, lr} |
| 24 | +; CHECK-NOFP16-NEXT: b lrintf |
| 25 | +; |
| 26 | +; CHECK-FPv8-LABEL: testmswh_builtin: |
| 27 | +; CHECK-FPv8: @ %bb.0: @ %entry |
| 28 | +; CHECK-FPv8-NEXT: vcvtb.f32.f16 s0, s0 |
| 29 | +; CHECK-FPv8-NEXT: b lrintf |
| 30 | +; |
| 31 | +; CHECK-FP16-LABEL: testmswh_builtin: |
| 32 | +; CHECK-FP16: @ %bb.0: @ %entry |
| 33 | +; CHECK-FP16-NEXT: vrintx.f16 s0, s0 |
| 34 | +; CHECK-FP16-NEXT: vcvt.s32.f16 s0, s0 |
| 35 | +; CHECK-FP16-NEXT: vmov r0, s0 |
| 36 | +; CHECK-FP16-NEXT: bx lr |
| 37 | +entry: |
| 38 | + %0 = tail call i32 @llvm.lrint.i32.f16(half %x) |
| 39 | + ret i32 %0 |
| 40 | +} |
12 | 41 |
|
13 | 42 | define i32 @testmsws_builtin(float %x) { |
14 | 43 | ; CHECK-LABEL: testmsws_builtin: |
|
39 | 68 | %0 = tail call i32 @llvm.lrint.i32.f128(fp128 %x) |
40 | 69 | ret i32 %0 |
41 | 70 | } |
42 | | - |
43 | | -;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
44 | | -; CHECK-FP16: {{.*}} |
45 | | -; CHECK-NOFP16: {{.*}} |
46 | | -; CHECK-SOFT: {{.*}} |
|
0 commit comments