diff options
| author | Hans-Peter Nilsson <hp@axis.com> | 2026-02-05 18:34:24 +0100 |
|---|---|---|
| committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2026-02-12 19:32:22 +0100 |
| commit | 5bae3e8edcce9d53350c52ba5bcab6b7749fd1f5 (patch) | |
| tree | e7ff32c4f8252b2ced9480197f1cdcac9be52ded /libjava/classpath/gnu/java | |
| parent | 6eec7a3687aa8195eaf6b7f6694b50ece17590c5 (diff) | |
| download | gcc-5bae3e8edcce9d53350c52ba5bcab6b7749fd1f5.zip gcc-5bae3e8edcce9d53350c52ba5bcab6b7749fd1f5.tar.gz gcc-5bae3e8edcce9d53350c52ba5bcab6b7749fd1f5.tar.bz2 | |
CRIS: Make sure movsf doesn't have two memory operands
Experimenting, I noticed movsf could get two memory operands, and
when the pass I was hacking, adjusted both operands, the rtl-ssa
framework didn't like the situation and signalled failure, for
example compiling gcc.c-torture/compile/pr85945.c. While that's
arguably a wart in rtl-ssa and may be a problem by itself, this
shouldn't happen: one operand should be either a register or
constant 0. It usually doesn't matter because RA fixes up
operands per the constraints. Still, this is low-handing fruit
for improved performance, letting the RTL passes work on more
correct information ...and also, a plausible excuse for not also
hacking rtl-ssa proper. Either way, the port is responsible for
guarding operand validity, so tweak it. Incidental observation:
the two-memory-operands case happened already at expand time.
This mem-to-mem situation doesn't happen for movsi, because it has
special precautions to keep one operand a register or const_int 0,
which were added for reasons of condition-code handling. That
particular condition, checking for REG_P or the subreg being REG_P
looks too restrictive though, not allowing the (subreg mem) case
that register_operand deliberately allows.
* config/cris/cris.md (SISF): New mode_iterator for SI and SF.
("mov<mode>"): Make "movsi" a define_expand to include SFmode by
means of the SISF iterator and adjust to also handle SFmode.
("*movsf_internal"): Anonymize "movsf"; make it a match-only pattern.
Add conditions to guard from source and destination both being memory
operands.
Diffstat (limited to 'libjava/classpath/gnu/java')
0 files changed, 0 insertions, 0 deletions
