153 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr +d -target-abi ilp32d < %s | FileCheck %s3 4define void @test_load_store(ptr %p, ptr %q) nounwind {5; CHECK-LABEL: test_load_store:6; CHECK: # %bb.0:7; CHECK-NEXT: lh a0, 0(a0)8; CHECK-NEXT: sh a0, 0(a1)9; CHECK-NEXT: ret10 %a = load half, ptr %p11 store half %a, ptr %q12 ret void13}14 15define float @test_fpextend_float(ptr %p) nounwind {16; CHECK-LABEL: test_fpextend_float:17; CHECK: # %bb.0:18; CHECK-NEXT: addi sp, sp, -1619; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill20; CHECK-NEXT: lhu a0, 0(a0)21; CHECK-NEXT: fmv.w.x fa0, a022; CHECK-NEXT: call __extendhfsf223; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload24; CHECK-NEXT: addi sp, sp, 1625; CHECK-NEXT: ret26 %a = load half, ptr %p27 %r = fpext half %a to float28 ret float %r29}30 31define double @test_fpextend_double(ptr %p) nounwind {32; CHECK-LABEL: test_fpextend_double:33; CHECK: # %bb.0:34; CHECK-NEXT: addi sp, sp, -1635; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill36; CHECK-NEXT: lhu a0, 0(a0)37; CHECK-NEXT: fmv.w.x fa0, a038; CHECK-NEXT: call __extendhfsf239; CHECK-NEXT: fcvt.d.s fa0, fa040; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload41; CHECK-NEXT: addi sp, sp, 1642; CHECK-NEXT: ret43 %a = load half, ptr %p44 %r = fpext half %a to double45 ret double %r46}47 48define void @test_fptrunc_float(float %f, ptr %p) nounwind {49; CHECK-LABEL: test_fptrunc_float:50; CHECK: # %bb.0:51; CHECK-NEXT: addi sp, sp, -1652; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill53; CHECK-NEXT: sw s0, 8(sp) # 4-byte Folded Spill54; CHECK-NEXT: mv s0, a055; CHECK-NEXT: call __truncsfhf256; CHECK-NEXT: fmv.x.w a0, fa057; CHECK-NEXT: sh a0, 0(s0)58; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload59; CHECK-NEXT: lw s0, 8(sp) # 4-byte Folded Reload60; CHECK-NEXT: addi sp, sp, 1661; CHECK-NEXT: ret62 %a = fptrunc float %f to half63 store half %a, ptr %p64 ret void65}66 67define void @test_fptrunc_double(double %d, ptr %p) nounwind {68; CHECK-LABEL: test_fptrunc_double:69; CHECK: # %bb.0:70; CHECK-NEXT: addi sp, sp, -1671; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill72; CHECK-NEXT: sw s0, 8(sp) # 4-byte Folded Spill73; CHECK-NEXT: mv s0, a074; CHECK-NEXT: call __truncdfhf275; CHECK-NEXT: fmv.x.w a0, fa076; CHECK-NEXT: sh a0, 0(s0)77; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload78; CHECK-NEXT: lw s0, 8(sp) # 4-byte Folded Reload79; CHECK-NEXT: addi sp, sp, 1680; CHECK-NEXT: ret81 %a = fptrunc double %d to half82 store half %a, ptr %p83 ret void84}85 86define void @test_fadd(ptr %p, ptr %q) nounwind {87; CHECK-LABEL: test_fadd:88; CHECK: # %bb.0:89; CHECK-NEXT: addi sp, sp, -3290; CHECK-NEXT: sw ra, 28(sp) # 4-byte Folded Spill91; CHECK-NEXT: sw s0, 24(sp) # 4-byte Folded Spill92; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill93; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill94; CHECK-NEXT: mv s0, a095; CHECK-NEXT: lhu a0, 0(a0)96; CHECK-NEXT: lhu a1, 0(a1)97; CHECK-NEXT: fmv.w.x fs0, a098; CHECK-NEXT: fmv.w.x fa0, a199; CHECK-NEXT: call __extendhfsf2100; CHECK-NEXT: fmv.s fs1, fa0101; CHECK-NEXT: fmv.s fa0, fs0102; CHECK-NEXT: call __extendhfsf2103; CHECK-NEXT: fadd.s fa0, fa0, fs1104; CHECK-NEXT: call __truncsfhf2105; CHECK-NEXT: fmv.x.w a0, fa0106; CHECK-NEXT: sh a0, 0(s0)107; CHECK-NEXT: lw ra, 28(sp) # 4-byte Folded Reload108; CHECK-NEXT: lw s0, 24(sp) # 4-byte Folded Reload109; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload110; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload111; CHECK-NEXT: addi sp, sp, 32112; CHECK-NEXT: ret113 %a = load half, ptr %p114 %b = load half, ptr %q115 %r = fadd half %a, %b116 store half %r, ptr %p117 ret void118}119 120define void @test_fmul(ptr %p, ptr %q) nounwind {121; CHECK-LABEL: test_fmul:122; CHECK: # %bb.0:123; CHECK-NEXT: addi sp, sp, -32124; CHECK-NEXT: sw ra, 28(sp) # 4-byte Folded Spill125; CHECK-NEXT: sw s0, 24(sp) # 4-byte Folded Spill126; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill127; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill128; CHECK-NEXT: mv s0, a0129; CHECK-NEXT: lhu a0, 0(a0)130; CHECK-NEXT: lhu a1, 0(a1)131; CHECK-NEXT: fmv.w.x fs0, a0132; CHECK-NEXT: fmv.w.x fa0, a1133; CHECK-NEXT: call __extendhfsf2134; CHECK-NEXT: fmv.s fs1, fa0135; CHECK-NEXT: fmv.s fa0, fs0136; CHECK-NEXT: call __extendhfsf2137; CHECK-NEXT: fmul.s fa0, fa0, fs1138; CHECK-NEXT: call __truncsfhf2139; CHECK-NEXT: fmv.x.w a0, fa0140; CHECK-NEXT: sh a0, 0(s0)141; CHECK-NEXT: lw ra, 28(sp) # 4-byte Folded Reload142; CHECK-NEXT: lw s0, 24(sp) # 4-byte Folded Reload143; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload144; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload145; CHECK-NEXT: addi sp, sp, 32146; CHECK-NEXT: ret147 %a = load half, ptr %p148 %b = load half, ptr %q149 %r = fmul half %a, %b150 store half %r, ptr %p151 ret void152}153