diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2023-08-31 16:15:10 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2023-08-31 16:15:10 +0100 |
commit | 629efe27744d13c3b83bbe8338b84c37c83dbe4f (patch) | |
tree | bf408413d809bf0846fce9ae797ddb4ed452aa93 /gcc/objc | |
parent | 80277e18e1a77b68f938b605c3ecd2750194ed75 (diff) | |
download | gcc-629efe27744d13c3b83bbe8338b84c37c83dbe4f.zip gcc-629efe27744d13c3b83bbe8338b84c37c83dbe4f.tar.gz gcc-629efe27744d13c3b83bbe8338b84c37c83dbe4f.tar.bz2 |
aarch64: Fix return register handling in untyped_call
While working on another patch, I hit a problem with the aarch64
expansion of untyped_call. The expander emits the usual:
(set (mem ...) (reg resN))
instructions to store the result registers to memory, but it didn't
say in RTL where those resN results came from. This eventually led
to a failure of gcc.dg/torture/stackalign/builtin-return-2.c,
via regrename.
This patch turns the untyped call from a plain call to a call_value,
to represent that the call returns (or might return) a useful value.
The patch also uses a PARALLEL return rtx to represent all the possible
return registers.
gcc/
* config/aarch64/aarch64.md (untyped_call): Emit a call_value
rather than a call. List each possible destination register
in the call pattern.
Diffstat (limited to 'gcc/objc')
0 files changed, 0 insertions, 0 deletions