1934b4905SJun Sha (Joshua); NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2934b4905SJun Sha (Joshua); RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64d < %s | FileCheck --check-prefixes=CHECK,RV64 %s 3934b4905SJun Sha (Joshua); RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32d < %s | FileCheck --check-prefixes=CHECK,RV32 %s 4934b4905SJun Sha (Joshua) 5934b4905SJun Sha (Joshua)define void @test_load_store(ptr %p, ptr %q) nounwind { 6934b4905SJun Sha (Joshua); CHECK-LABEL: test_load_store: 7934b4905SJun Sha (Joshua); CHECK: # %bb.0: 8934b4905SJun Sha (Joshua); CHECK-NEXT: lh a0, 0(a0) 9934b4905SJun Sha (Joshua); CHECK-NEXT: sh a0, 0(a1) 10934b4905SJun Sha (Joshua); CHECK-NEXT: ret 11934b4905SJun Sha (Joshua) %a = load bfloat, ptr %p 12934b4905SJun Sha (Joshua) store bfloat %a, ptr %q 13934b4905SJun Sha (Joshua) ret void 14934b4905SJun Sha (Joshua)} 15934b4905SJun Sha (Joshua) 16934b4905SJun Sha (Joshua)define float @test_fpextend_float(ptr %p) nounwind { 17934b4905SJun Sha (Joshua); CHECK-LABEL: test_fpextend_float: 18934b4905SJun Sha (Joshua); CHECK: # %bb.0: 19934b4905SJun Sha (Joshua); CHECK-NEXT: lhu a0, 0(a0) 20934b4905SJun Sha (Joshua); CHECK-NEXT: slli a0, a0, 16 21934b4905SJun Sha (Joshua); CHECK-NEXT: fmv.w.x fa0, a0 22934b4905SJun Sha (Joshua); CHECK-NEXT: ret 23934b4905SJun Sha (Joshua) %a = load bfloat, ptr %p 24934b4905SJun Sha (Joshua) %r = fpext bfloat %a to float 25934b4905SJun Sha (Joshua) ret float %r 26934b4905SJun Sha (Joshua)} 27934b4905SJun Sha (Joshua) 28934b4905SJun Sha (Joshua)define double @test_fpextend_double(ptr %p) nounwind { 29934b4905SJun Sha (Joshua); CHECK-LABEL: test_fpextend_double: 30934b4905SJun Sha (Joshua); CHECK: # %bb.0: 31934b4905SJun Sha (Joshua); CHECK-NEXT: lhu a0, 0(a0) 32934b4905SJun Sha (Joshua); CHECK-NEXT: slli a0, a0, 16 33934b4905SJun Sha (Joshua); CHECK-NEXT: fmv.w.x fa5, a0 34934b4905SJun Sha (Joshua); CHECK-NEXT: fcvt.d.s fa0, fa5 35934b4905SJun Sha (Joshua); CHECK-NEXT: ret 36934b4905SJun Sha (Joshua) %a = load bfloat, ptr %p 37934b4905SJun Sha (Joshua) %r = fpext bfloat %a to double 38934b4905SJun Sha (Joshua) ret double %r 39934b4905SJun Sha (Joshua)} 40934b4905SJun Sha (Joshua) 41934b4905SJun Sha (Joshua)define void @test_fptrunc_float(float %f, ptr %p) nounwind { 42934b4905SJun Sha (Joshua); RV64-LABEL: test_fptrunc_float: 43934b4905SJun Sha (Joshua); RV64: # %bb.0: 44934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, -16 45934b4905SJun Sha (Joshua); RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 46934b4905SJun Sha (Joshua); RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 47934b4905SJun Sha (Joshua); RV64-NEXT: mv s0, a0 48eabaee0cSFangrui Song; RV64-NEXT: call __truncsfbf2 49934b4905SJun Sha (Joshua); RV64-NEXT: fmv.x.w a0, fa0 50934b4905SJun Sha (Joshua); RV64-NEXT: sh a0, 0(s0) 51934b4905SJun Sha (Joshua); RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 52934b4905SJun Sha (Joshua); RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 53934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, 16 54934b4905SJun Sha (Joshua); RV64-NEXT: ret 55934b4905SJun Sha (Joshua); 56934b4905SJun Sha (Joshua); RV32-LABEL: test_fptrunc_float: 57934b4905SJun Sha (Joshua); RV32: # %bb.0: 58934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, -16 59934b4905SJun Sha (Joshua); RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 60934b4905SJun Sha (Joshua); RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 61934b4905SJun Sha (Joshua); RV32-NEXT: mv s0, a0 62eabaee0cSFangrui Song; RV32-NEXT: call __truncsfbf2 63934b4905SJun Sha (Joshua); RV32-NEXT: fmv.x.w a0, fa0 64934b4905SJun Sha (Joshua); RV32-NEXT: sh a0, 0(s0) 65934b4905SJun Sha (Joshua); RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 66934b4905SJun Sha (Joshua); RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 67934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, 16 68934b4905SJun Sha (Joshua); RV32-NEXT: ret 69934b4905SJun Sha (Joshua) %a = fptrunc float %f to bfloat 70934b4905SJun Sha (Joshua) store bfloat %a, ptr %p 71934b4905SJun Sha (Joshua) ret void 72934b4905SJun Sha (Joshua)} 73934b4905SJun Sha (Joshua) 74934b4905SJun Sha (Joshua)define void @test_fptrunc_double(double %d, ptr %p) nounwind { 75934b4905SJun Sha (Joshua); RV64-LABEL: test_fptrunc_double: 76934b4905SJun Sha (Joshua); RV64: # %bb.0: 77934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, -16 78934b4905SJun Sha (Joshua); RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 79934b4905SJun Sha (Joshua); RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 80934b4905SJun Sha (Joshua); RV64-NEXT: mv s0, a0 81eabaee0cSFangrui Song; RV64-NEXT: call __truncdfbf2 82934b4905SJun Sha (Joshua); RV64-NEXT: fmv.x.w a0, fa0 83934b4905SJun Sha (Joshua); RV64-NEXT: sh a0, 0(s0) 84934b4905SJun Sha (Joshua); RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 85934b4905SJun Sha (Joshua); RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 86934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, 16 87934b4905SJun Sha (Joshua); RV64-NEXT: ret 88934b4905SJun Sha (Joshua); 89934b4905SJun Sha (Joshua); RV32-LABEL: test_fptrunc_double: 90934b4905SJun Sha (Joshua); RV32: # %bb.0: 91934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, -16 92934b4905SJun Sha (Joshua); RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 93934b4905SJun Sha (Joshua); RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 94934b4905SJun Sha (Joshua); RV32-NEXT: mv s0, a0 95eabaee0cSFangrui Song; RV32-NEXT: call __truncdfbf2 96934b4905SJun Sha (Joshua); RV32-NEXT: fmv.x.w a0, fa0 97934b4905SJun Sha (Joshua); RV32-NEXT: sh a0, 0(s0) 98934b4905SJun Sha (Joshua); RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 99934b4905SJun Sha (Joshua); RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 100934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, 16 101934b4905SJun Sha (Joshua); RV32-NEXT: ret 102934b4905SJun Sha (Joshua) %a = fptrunc double %d to bfloat 103934b4905SJun Sha (Joshua) store bfloat %a, ptr %p 104934b4905SJun Sha (Joshua) ret void 105934b4905SJun Sha (Joshua)} 106934b4905SJun Sha (Joshua) 107934b4905SJun Sha (Joshua)define void @test_fadd(ptr %p, ptr %q) nounwind { 108934b4905SJun Sha (Joshua); RV64-LABEL: test_fadd: 109934b4905SJun Sha (Joshua); RV64: # %bb.0: 110934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, -16 111934b4905SJun Sha (Joshua); RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 112934b4905SJun Sha (Joshua); RV64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 113934b4905SJun Sha (Joshua); RV64-NEXT: mv s0, a0 114*9122c523SPengcheng Wang; RV64-NEXT: lhu a0, 0(a1) 115*9122c523SPengcheng Wang; RV64-NEXT: lhu a1, 0(s0) 116934b4905SJun Sha (Joshua); RV64-NEXT: slli a0, a0, 16 117*9122c523SPengcheng Wang; RV64-NEXT: slli a1, a1, 16 118*9122c523SPengcheng Wang; RV64-NEXT: fmv.w.x fa5, a0 119*9122c523SPengcheng Wang; RV64-NEXT: fmv.w.x fa4, a1 120934b4905SJun Sha (Joshua); RV64-NEXT: fadd.s fa0, fa4, fa5 121eabaee0cSFangrui Song; RV64-NEXT: call __truncsfbf2 122934b4905SJun Sha (Joshua); RV64-NEXT: fmv.x.w a0, fa0 123934b4905SJun Sha (Joshua); RV64-NEXT: sh a0, 0(s0) 124934b4905SJun Sha (Joshua); RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 125934b4905SJun Sha (Joshua); RV64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 126934b4905SJun Sha (Joshua); RV64-NEXT: addi sp, sp, 16 127934b4905SJun Sha (Joshua); RV64-NEXT: ret 128934b4905SJun Sha (Joshua); 129934b4905SJun Sha (Joshua); RV32-LABEL: test_fadd: 130934b4905SJun Sha (Joshua); RV32: # %bb.0: 131934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, -16 132934b4905SJun Sha (Joshua); RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 133934b4905SJun Sha (Joshua); RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 134934b4905SJun Sha (Joshua); RV32-NEXT: mv s0, a0 135*9122c523SPengcheng Wang; RV32-NEXT: lhu a0, 0(a1) 136*9122c523SPengcheng Wang; RV32-NEXT: lhu a1, 0(s0) 137934b4905SJun Sha (Joshua); RV32-NEXT: slli a0, a0, 16 138*9122c523SPengcheng Wang; RV32-NEXT: slli a1, a1, 16 139*9122c523SPengcheng Wang; RV32-NEXT: fmv.w.x fa5, a0 140*9122c523SPengcheng Wang; RV32-NEXT: fmv.w.x fa4, a1 141934b4905SJun Sha (Joshua); RV32-NEXT: fadd.s fa0, fa4, fa5 142eabaee0cSFangrui Song; RV32-NEXT: call __truncsfbf2 143934b4905SJun Sha (Joshua); RV32-NEXT: fmv.x.w a0, fa0 144934b4905SJun Sha (Joshua); RV32-NEXT: sh a0, 0(s0) 145934b4905SJun Sha (Joshua); RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 146934b4905SJun Sha (Joshua); RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 147934b4905SJun Sha (Joshua); RV32-NEXT: addi sp, sp, 16 148934b4905SJun Sha (Joshua); RV32-NEXT: ret 149934b4905SJun Sha (Joshua) %a = load bfloat, ptr %p 150934b4905SJun Sha (Joshua) %b = load bfloat, ptr %q 151934b4905SJun Sha (Joshua) %r = fadd bfloat %a, %b 152934b4905SJun Sha (Joshua) store bfloat %r, ptr %p 153934b4905SJun Sha (Joshua) ret void 154934b4905SJun Sha (Joshua)} 155