86 lines · plain
1; RUN: llc < %s -mtriple=thumbv7-apple-ios7.0 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OLD2; RUN: llc < %s -mtriple=thumbv7s-apple-ios7.0 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-F163; RUN: llc < %s -mtriple=thumbv8-apple-ios7.0 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V84; RUN: llc < %s -mtriple=armv8r-none-none-eabi -mattr=+neon,+fp-armv8 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V85; RUN: llc < %s -mtriple=armv8r-none-none-eabi | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V8-SP6; RUN: llc < %s -mtriple=armv8.1m-none-none-eabi -mattr=+fp-armv8 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V87; RUN: llc < %s -mtriple=armv8.1m-none-none-eabi -mattr=+fp-armv8,-fp64 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V8-SP8; RUN: llc < %s -mtriple=armv8.1m-none-none-eabi -mattr=+mve.fp,+fp64 | FileCheck %s --check-prefix=CHECK-V89; RUN: llc < %s -mtriple=armv8.1m-none-none-eabi -mattr=+mve.fp | FileCheck %s --check-prefix=CHECK-V8-SP10 11define void @test_load_store(ptr %in, ptr %out) {12; CHECK-LABEL: test_load_store:13; CHECK: ldrh [[TMP:r[0-9]+]], [r0]14; CHECK: strh [[TMP]], [r1]15 %val = load half, ptr %in16 store half %val, ptr %out17 ret void18}19 20define i16 @test_bitcast_from_half(ptr %addr) {21; CHECK-LABEL: test_bitcast_from_half:22; CHECK: ldrh r0, [r0]23 %val = load half, ptr %addr24 %val_int = bitcast half %val to i1625 ret i16 %val_int26}27 28define void @test_bitcast_to_half(ptr %addr, i16 %in) {29; CHECK-LABEL: test_bitcast_to_half:30; CHECK: strh r1, [r0]31 %val_fp = bitcast i16 %in to half32 store half %val_fp, ptr %addr33 ret void34}35 36define float @test_extend32(ptr %addr) {37; CHECK-LABEL: test_extend32:38 39; CHECK-OLD: b.w ___extendhfsf240; CHECK-F16: vcvtb.f32.f1641; CHECK-V8: vcvtb.f32.f1642; CHECK-V8-SP: vcvtb.f32.f1643 %val16 = load half, ptr %addr44 %val32 = fpext half %val16 to float45 ret float %val3246}47 48define double @test_extend64(ptr %addr) {49; CHECK-LABEL: test_extend64:50 51; CHECK-OLD: bl ___extendhfsf252; CHECK-OLD: vcvt.f64.f3253; CHECK-F16: vcvtb.f32.f1654; CHECK-F16: vcvt.f64.f3255; CHECK-V8: vcvtb.f64.f1656; CHECK-V8-SP: vcvtb.f32.f1657; CHECK-V8-SP: bl __aeabi_f2d58 %val16 = load half, ptr %addr59 %val32 = fpext half %val16 to double60 ret double %val3261}62 63define void @test_trunc32(float %in, ptr %addr) {64; CHECK-LABEL: test_trunc32:65 66; CHECK-OLD: bl ___truncsfhf267; CHECK-F16: vcvtb.f16.f3268; CHECK-V8: vcvtb.f16.f3269; CHECK-V8-SP: vcvtb.f16.f3270 %val16 = fptrunc float %in to half71 store half %val16, ptr %addr72 ret void73}74 75define void @test_trunc64(double %in, ptr %addr) {76; CHECK-LABEL: test_trunc64:77 78; CHECK-OLD: bl ___truncdfhf279; CHECK-F16: bl ___truncdfhf280; CHECK-V8: vcvtb.f16.f6481; CHECK-V8-SP: bl __aeabi_d2h82 %val16 = fptrunc double %in to half83 store half %val16, ptr %addr84 ret void85}86