The Procedure Call Standard for the Arm Architecture
states that float16x4_t and float16x8_t behave just
as uint16x4_t and uint16x8_t for argument passing.
This patch adds the fp16 vectors to the
ARMCallingConv.td file.
Details
Diff Detail
- Repository
- rL LLVM
- Build Status
Buildable 30608 Build 30607: arc lint + arc unit
Event Timeline
test/CodeGen/ARM/fp16-vector-argument.ll | ||
---|---|---|
7 | This is only testing the soft-float calling convention, we should also test hard-float. We should also cover multiple vector arguments, including enough arguments that some must be passed on the stack. |
Tests updated
- Added:
- hard-float calling convention
- bit-endian tests to be activated by D60618
test/CodeGen/ARM/fp16-vector-argument.ll | ||
---|---|---|
32 | This test is labelled as hard-float, but is passing the vector argument in GPRs. I suspect that this is because the APCS calling convention doesn't support hard-float. Actually, i think you could remove all of the tests for APCS to simplify this file, because it's a very old calling convention, which was superseded by AAPCS a long time ago, and it's unlikely to ever be used with v8.2A. |
llvm/trunk/lib/Target/ARM/ARMCallingConv.td | ||
---|---|---|
168 ↗ | (On Diff #197076) | @dnsampaio @ostannard This introduces duplicate v4f16/v8f16 types which is causing PVS Studio warnings: ARMGenCallingConv.inc 63 err V501 There are identical sub-expressions 'LocVT == MVT::v4f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 74 err V501 There are identical sub-expressions 'LocVT == MVT::v8f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 235 err V501 There are identical sub-expressions 'LocVT == MVT::v4f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 246 err V501 There are identical sub-expressions 'LocVT == MVT::v8f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 605 err V501 There are identical sub-expressions 'LocVT == MVT::v4f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 616 err V501 There are identical sub-expressions 'LocVT == MVT::v8f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 710 err V501 There are identical sub-expressions 'LocVT == MVT::v4f16' to the left and to the right of the '||' operator. ARMGenCallingConv.inc 721 err V501 There are identical sub-expressions 'LocVT == MVT::v8f16' to the left and to the right of the '||' operator. |
This is only testing the soft-float calling convention, we should also test hard-float. We should also cover multiple vector arguments, including enough arguments that some must be passed on the stack.