[RISCV] Fix passing two floating-point values in complex separately by two GPRs on...
authorJim Lin <tclin914@gmail.com>
Mon, 18 May 2020 03:10:46 +0000 (11:10 +0800)
committerJim Lin <tclin914@gmail.com>
Mon, 18 May 2020 05:13:22 +0000 (13:13 +0800)
commit7ee479a760e0a4402b4eb7fb6168768a44f66945
tree5a2e2974b6bd52155ed5616b4f82638ce8a278bf
parenta7abe8dd297baa3843f3623ae293525986649247
[RISCV] Fix passing two floating-point values in complex separately by two GPRs on RV64

Summary:
This patch fixed the error of counting the remaining FPRs. Complex floating-point
values should be passed by two FPRs for the hard-float ABI. If no two FPRs are
available, it should be passed via a 64-bit GPR (fp+fp). `ArgFPRsLeft` is only
decreased one while the type is complex floating-point. It causes two floating-point
values in the complex are passed separately by two GPRs.

Reviewers: asb, luismarques, lenary

Reviewed By: asb

Subscribers: rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, s.egerton, pzheng, sameer.abuasal, apazos, evandro, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D79770
clang/lib/CodeGen/TargetInfo.cpp
clang/test/CodeGen/riscv64-lp64-abi.c
clang/test/CodeGen/riscv64-lp64f-lp64d-abi.c