Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 49 additions & 8 deletions tests/codegen-llvm/float/f16b.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
//@ compile-flags: -Copt-level=3
//@ revisions: GENERIC LOONGARCH32 LOONGARCH64 RISCV32 RISCV64
//@ [GENERIC] ignore-loongarch32
//@ [GENERIC] ignore-loongarch64
//@ [GENERIC] ignore-riscv32
//@ [GENERIC] ignore-riscv64
//@ [LOONGARCH32] only-loongarch32
//@ [LOONGARCH64] only-loongarch64
//@ [RISCV32] only-riscv32
//@ [RISCV64] only-riscv64

#![crate_type = "lib"]
#![feature(f16b)]
Expand All @@ -8,31 +17,63 @@ extern crate core;

use core::num::f16b;

// CHECK-LABEL: define{{.*}} bfloat @identity_f16b(bfloat
// GENERIC-LABEL: define{{.*}} bfloat @identity_f16b(bfloat
// LOONGARCH32-LABEL: define{{.*}} half @identity_f16b(half
// LOONGARCH64-LABEL: define{{.*}} half @identity_f16b(half
// RISCV32-LABEL: define{{.*}} half @identity_f16b(half
// RISCV64-LABEL: define{{.*}} half @identity_f16b(half
#[no_mangle]
pub extern "C" fn identity_f16b(value: f16b) -> f16b {
// CHECK: ret bfloat
// GENERIC: ret bfloat
// LOONGARCH32: ret half
// LOONGARCH64: ret half
// RISCV32: ret half
// RISCV64: ret half
value
}

// CHECK-LABEL: define{{.*}} i16 @f16b_to_bits(bfloat
// GENERIC-LABEL: define{{.*}} i16 @f16b_to_bits(bfloat
// LOONGARCH32-LABEL: define{{.*}} i16 @f16b_to_bits(half
// LOONGARCH64-LABEL: define{{.*}} i16 @f16b_to_bits(half
// RISCV32-LABEL: define{{.*}} i16 @f16b_to_bits(half
// RISCV64-LABEL: define{{.*}} i16 @f16b_to_bits(half
#[no_mangle]
pub extern "C" fn f16b_to_bits(value: f16b) -> u16 {
// CHECK: bitcast bfloat %value to i16
// GENERIC: bitcast bfloat %value to i16
// LOONGARCH32: bitcast half %0 to i16
// LOONGARCH64: bitcast half %0 to i16
// RISCV32: bitcast half %0 to i16
// RISCV64: bitcast half %0 to i16
value.to_bits()
}

// CHECK-LABEL: define{{.*}} bfloat @f16b_from_bits(i16
// GENERIC-LABEL: define{{.*}} bfloat @f16b_from_bits(i16
// LOONGARCH32-LABEL: define{{.*}} half @f16b_from_bits(i16
// LOONGARCH64-LABEL: define{{.*}} half @f16b_from_bits(i16
// RISCV32-LABEL: define{{.*}} half @f16b_from_bits(i16
// RISCV64-LABEL: define{{.*}} half @f16b_from_bits(i16
#[no_mangle]
pub extern "C" fn f16b_from_bits(bits: u16) -> f16b {
// CHECK: bitcast i16 %bits to bfloat
// GENERIC: bitcast i16 %bits to bfloat
// LOONGARCH32: bitcast i16 %bits to half
// LOONGARCH64: bitcast i16 %bits to half
// RISCV32: bitcast i16 %bits to half
// RISCV64: bitcast i16 %bits to half
f16b::from_bits(bits)
}

// CHECK-LABEL: define{{.*}} float @widen_f16b(bfloat
// GENERIC-LABEL: define{{.*}} float @widen_f16b(bfloat
// LOONGARCH32-LABEL: define{{.*}} float @widen_f16b(half
// LOONGARCH64-LABEL: define{{.*}} float @widen_f16b(half
// RISCV32-LABEL: define{{.*}} float @widen_f16b(half
// RISCV64-LABEL: define{{.*}} float @widen_f16b(half
#[no_mangle]
pub extern "C" fn widen_f16b(value: f16b) -> f32 {
// CHECK: bitcast bfloat %value to i16
// GENERIC: bitcast bfloat %value to i16
// LOONGARCH32: bitcast half %0 to i16
// LOONGARCH64: bitcast half %0 to i16
// RISCV32: bitcast half %0 to i16
// RISCV64: bitcast half %0 to i16
// CHECK: zext i16
// CHECK: shl nuw i32 {{.*}}, 16
// CHECK: bitcast i32 {{.*}} to float
Expand Down
Loading