aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/pr98567-1.c
diff options
context:
space:
mode:
authorArtemiy Volkov <artemiyv@acm.org>2025-08-16 20:40:28 -0600
committerJeff Law <jlaw@ventanamicro.com>2025-08-16 20:40:28 -0600
commit07a0baa7609a5a78d8b4a3c17897768fb2119605 (patch)
tree247a903dc7d84bef4329176181c89cfdad1e61f2 /gcc/testsuite/gcc.target/i386/pr98567-1.c
parent14b15a9a473fc69b0251e625c397e70c396f0c0c (diff)
downloadgcc-master.zip
gcc-master.tar.gz
gcc-master.tar.bz2
ira: tie output allocnos for fused instruction pairsHEADtrunkmaster
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/gcc.target/i386/pr98567-1.c')
0 files changed, 0 insertions, 0 deletions