diff options
author | Artemiy Volkov <artemiyv@acm.org> | 2025-08-16 20:40:28 -0600 |
---|---|---|
committer | Jeff Law <jlaw@ventanamicro.com> | 2025-08-16 20:40:28 -0600 |
commit | 07a0baa7609a5a78d8b4a3c17897768fb2119605 (patch) | |
tree | 247a903dc7d84bef4329176181c89cfdad1e61f2 /gcc/testsuite/gnat.dg/specs/lto12_pkg.ads | |
parent | 14b15a9a473fc69b0251e625c397e70c396f0c0c (diff) | |
download | gcc-master.zip gcc-master.tar.gz gcc-master.tar.bz2 |
Some of the instruction pairs recognized as fusible by a preceding
invocation of the dep_fusion pass require that both components of a pair
have the same hard register output for the fusion to work in hardware.
(An example of this would be a multiply-add operation, or a zero-extract
operation composed of two shifts.)
For all such pairs, the following conditions will hold:
(a) Both insns are single_sets
(b) Both insns have a register destination
(c) The pair has been marked as fusible by setting the second insn's
SCHED_GROUP flag
(d) Additionally, post-RA, both instructions' destination regnos are
equal
(All of these conditions are encapsulated in the newly created
single_output_fused_pair_p () predicate.)
During IRA, if conditions (a)-(c) above hold, we need to tie the two
instructions' destination allocnos together so that they are allocated
to the same hard register. We do this in add_insn_allocno_copies () by
adding a constraint conflict to the output operands of the two
instructions.
gcc/ChangeLog:
* ira-conflicts.cc (add_insn_allocno_copies): Handle fused insn pairs.
* rtl.h (single_output_fused_pair_p): Declare new function.
* rtlanal.cc (single_output_fused_pair_p): Define it.
Diffstat (limited to 'gcc/testsuite/gnat.dg/specs/lto12_pkg.ads')
0 files changed, 0 insertions, 0 deletions