155 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64d < %s | FileCheck --check-prefixes=CHECK,RV64 %s3; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32d < %s | FileCheck --check-prefixes=CHECK,RV32 %s4 5define void @test_load_store(ptr %p, ptr %q) nounwind {6; CHECK-LABEL: test_load_store:7; CHECK: # %bb.0:8; CHECK-NEXT: lh a0, 0(a0)9; CHECK-NEXT: sh a0, 0(a1)10; CHECK-NEXT: ret11 %a = load bfloat, ptr %p12 store bfloat %a, ptr %q13 ret void14}15 16define float @test_fpextend_float(ptr %p) nounwind {17; CHECK-LABEL: test_fpextend_float:18; CHECK: # %bb.0:19; CHECK-NEXT: lhu a0, 0(a0)20; CHECK-NEXT: slli a0, a0, 1621; CHECK-NEXT: fmv.w.x fa0, a022; CHECK-NEXT: ret23 %a = load bfloat, ptr %p24 %r = fpext bfloat %a to float25 ret float %r26}27 28define double @test_fpextend_double(ptr %p) nounwind {29; CHECK-LABEL: test_fpextend_double:30; CHECK: # %bb.0:31; CHECK-NEXT: lhu a0, 0(a0)32; CHECK-NEXT: slli a0, a0, 1633; CHECK-NEXT: fmv.w.x fa5, a034; CHECK-NEXT: fcvt.d.s fa0, fa535; CHECK-NEXT: ret36 %a = load bfloat, ptr %p37 %r = fpext bfloat %a to double38 ret double %r39}40 41define void @test_fptrunc_float(float %f, ptr %p) nounwind {42; RV64-LABEL: test_fptrunc_float:43; RV64: # %bb.0:44; RV64-NEXT: addi sp, sp, -1645; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill46; RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill47; RV64-NEXT: mv s0, a048; RV64-NEXT: call __truncsfbf249; RV64-NEXT: fmv.x.w a0, fa050; RV64-NEXT: sh a0, 0(s0)51; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload52; RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload53; RV64-NEXT: addi sp, sp, 1654; RV64-NEXT: ret55;56; RV32-LABEL: test_fptrunc_float:57; RV32: # %bb.0:58; RV32-NEXT: addi sp, sp, -1659; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill60; RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill61; RV32-NEXT: mv s0, a062; RV32-NEXT: call __truncsfbf263; RV32-NEXT: fmv.x.w a0, fa064; RV32-NEXT: sh a0, 0(s0)65; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload66; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload67; RV32-NEXT: addi sp, sp, 1668; RV32-NEXT: ret69 %a = fptrunc float %f to bfloat70 store bfloat %a, ptr %p71 ret void72}73 74define void @test_fptrunc_double(double %d, ptr %p) nounwind {75; RV64-LABEL: test_fptrunc_double:76; RV64: # %bb.0:77; RV64-NEXT: addi sp, sp, -1678; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill79; RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill80; RV64-NEXT: mv s0, a081; RV64-NEXT: call __truncdfbf282; RV64-NEXT: fmv.x.w a0, fa083; RV64-NEXT: sh a0, 0(s0)84; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload85; RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload86; RV64-NEXT: addi sp, sp, 1687; RV64-NEXT: ret88;89; RV32-LABEL: test_fptrunc_double:90; RV32: # %bb.0:91; RV32-NEXT: addi sp, sp, -1692; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill93; RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill94; RV32-NEXT: mv s0, a095; RV32-NEXT: call __truncdfbf296; RV32-NEXT: fmv.x.w a0, fa097; RV32-NEXT: sh a0, 0(s0)98; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload99; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload100; RV32-NEXT: addi sp, sp, 16101; RV32-NEXT: ret102 %a = fptrunc double %d to bfloat103 store bfloat %a, ptr %p104 ret void105}106 107define void @test_fadd(ptr %p, ptr %q) nounwind {108; RV64-LABEL: test_fadd:109; RV64: # %bb.0:110; RV64-NEXT: addi sp, sp, -16111; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill112; RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill113; RV64-NEXT: mv s0, a0114; RV64-NEXT: lhu a0, 0(a1)115; RV64-NEXT: lhu a1, 0(s0)116; RV64-NEXT: slli a0, a0, 16117; RV64-NEXT: slli a1, a1, 16118; RV64-NEXT: fmv.w.x fa5, a0119; RV64-NEXT: fmv.w.x fa4, a1120; RV64-NEXT: fadd.s fa0, fa4, fa5121; RV64-NEXT: call __truncsfbf2122; RV64-NEXT: fmv.x.w a0, fa0123; RV64-NEXT: sh a0, 0(s0)124; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload125; RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload126; RV64-NEXT: addi sp, sp, 16127; RV64-NEXT: ret128;129; RV32-LABEL: test_fadd:130; RV32: # %bb.0:131; RV32-NEXT: addi sp, sp, -16132; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill133; RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill134; RV32-NEXT: mv s0, a0135; RV32-NEXT: lhu a0, 0(a1)136; RV32-NEXT: lhu a1, 0(s0)137; RV32-NEXT: slli a0, a0, 16138; RV32-NEXT: slli a1, a1, 16139; RV32-NEXT: fmv.w.x fa5, a0140; RV32-NEXT: fmv.w.x fa4, a1141; RV32-NEXT: fadd.s fa0, fa4, fa5142; RV32-NEXT: call __truncsfbf2143; RV32-NEXT: fmv.x.w a0, fa0144; RV32-NEXT: sh a0, 0(s0)145; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload146; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload147; RV32-NEXT: addi sp, sp, 16148; RV32-NEXT: ret149 %a = load bfloat, ptr %p150 %b = load bfloat, ptr %q151 %r = fadd bfloat %a, %b152 store bfloat %r, ptr %p153 ret void154}155