xref: /llvm-project/llvm/test/CodeGen/RISCV/zcmp-with-float.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
1976df42eSYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2976df42eSYeting Kuo; RUN: llc -mtriple=riscv32 -mattr=+f,+zcmp -target-abi ilp32f -verify-machineinstrs < %s | FileCheck %s --check-prefix=RV32
3976df42eSYeting Kuo; RUN: llc -mtriple=riscv64 -mattr=+f,+zcmp -target-abi lp64f -verify-machineinstrs < %s | FileCheck %s --check-prefix=RV64
4976df42eSYeting Kuo
5976df42eSYeting Kuodeclare void @callee()
6976df42eSYeting Kuo
7976df42eSYeting Kuo; Test the file could be compiled successfully.
8976df42eSYeting Kuodefine float @foo(float %arg) {
9976df42eSYeting Kuo; RV32-LABEL: foo:
10976df42eSYeting Kuo; RV32:       # %bb.0: # %entry
11976df42eSYeting Kuo; RV32-NEXT:    cm.push {ra}, -32
12976df42eSYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 32
13976df42eSYeting Kuo; RV32-NEXT:    .cfi_offset ra, -4
14*97982a8cSdlav-sc; RV32-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
157c70e50bSYeting Kuo; RV32-NEXT:    .cfi_offset fs0, -20
16976df42eSYeting Kuo; RV32-NEXT:    fmv.s fs0, fa0
17eabaee0cSFangrui Song; RV32-NEXT:    call callee
18976df42eSYeting Kuo; RV32-NEXT:    fmv.s fa0, fs0
19976df42eSYeting Kuo; RV32-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
20*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore fs0
21976df42eSYeting Kuo; RV32-NEXT:    cm.popret {ra}, 32
22976df42eSYeting Kuo;
23976df42eSYeting Kuo; RV64-LABEL: foo:
24976df42eSYeting Kuo; RV64:       # %bb.0: # %entry
25976df42eSYeting Kuo; RV64-NEXT:    cm.push {ra}, -32
26976df42eSYeting Kuo; RV64-NEXT:    .cfi_def_cfa_offset 32
27976df42eSYeting Kuo; RV64-NEXT:    .cfi_offset ra, -8
28*97982a8cSdlav-sc; RV64-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
297c70e50bSYeting Kuo; RV64-NEXT:    .cfi_offset fs0, -20
30976df42eSYeting Kuo; RV64-NEXT:    fmv.s fs0, fa0
31eabaee0cSFangrui Song; RV64-NEXT:    call callee
32976df42eSYeting Kuo; RV64-NEXT:    fmv.s fa0, fs0
33976df42eSYeting Kuo; RV64-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
34*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore fs0
35976df42eSYeting Kuo; RV64-NEXT:    cm.popret {ra}, 32
36976df42eSYeting Kuoentry:
37976df42eSYeting Kuo  call void @callee()
38976df42eSYeting Kuo  ret float %arg
39976df42eSYeting Kuo}
407c70e50bSYeting Kuo
417c70e50bSYeting Kuodefine void @foo2(i32 %x, float %y) {
427c70e50bSYeting Kuo; RV32-LABEL: foo2:
437c70e50bSYeting Kuo; RV32:       # %bb.0: # %entry
447c70e50bSYeting Kuo; RV32-NEXT:    cm.push {ra, s0}, -32
457c70e50bSYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 32
467c70e50bSYeting Kuo; RV32-NEXT:    .cfi_offset ra, -8
477c70e50bSYeting Kuo; RV32-NEXT:    .cfi_offset s0, -4
48*97982a8cSdlav-sc; RV32-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
497c70e50bSYeting Kuo; RV32-NEXT:    .cfi_offset fs0, -20
507c70e50bSYeting Kuo; RV32-NEXT:    fmv.s fs0, fa0
517c70e50bSYeting Kuo; RV32-NEXT:    mv s0, a0
52eabaee0cSFangrui Song; RV32-NEXT:    call bar
537c70e50bSYeting Kuo; RV32-NEXT:    mv a0, s0
547c70e50bSYeting Kuo; RV32-NEXT:    fmv.s fa0, fs0
557c70e50bSYeting Kuo; RV32-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
56*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore fs0
577c70e50bSYeting Kuo; RV32-NEXT:    cm.pop {ra, s0}, 32
58*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore ra
59*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore s0
60*97982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
61eabaee0cSFangrui Song; RV32-NEXT:    tail func
627c70e50bSYeting Kuo;
637c70e50bSYeting Kuo; RV64-LABEL: foo2:
647c70e50bSYeting Kuo; RV64:       # %bb.0: # %entry
657c70e50bSYeting Kuo; RV64-NEXT:    cm.push {ra, s0}, -32
667c70e50bSYeting Kuo; RV64-NEXT:    .cfi_def_cfa_offset 32
677c70e50bSYeting Kuo; RV64-NEXT:    .cfi_offset ra, -16
687c70e50bSYeting Kuo; RV64-NEXT:    .cfi_offset s0, -8
69*97982a8cSdlav-sc; RV64-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
707c70e50bSYeting Kuo; RV64-NEXT:    .cfi_offset fs0, -20
717c70e50bSYeting Kuo; RV64-NEXT:    fmv.s fs0, fa0
727c70e50bSYeting Kuo; RV64-NEXT:    mv s0, a0
73eabaee0cSFangrui Song; RV64-NEXT:    call bar
747c70e50bSYeting Kuo; RV64-NEXT:    mv a0, s0
757c70e50bSYeting Kuo; RV64-NEXT:    fmv.s fa0, fs0
767c70e50bSYeting Kuo; RV64-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
77*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore fs0
787c70e50bSYeting Kuo; RV64-NEXT:    cm.pop {ra, s0}, 32
79*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore ra
80*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore s0
81*97982a8cSdlav-sc; RV64-NEXT:    .cfi_def_cfa_offset 0
82eabaee0cSFangrui Song; RV64-NEXT:    tail func
837c70e50bSYeting Kuoentry:
847c70e50bSYeting Kuo  tail call void @bar()
857c70e50bSYeting Kuo  tail call void @func(i32 %x, float %y)
867c70e50bSYeting Kuo  ret void
877c70e50bSYeting Kuo}
887c70e50bSYeting Kuo
897c70e50bSYeting Kuodeclare void @bar()
907c70e50bSYeting Kuodeclare void @func(i32, float)
91