Am 19.11.24 um 14:48 schrieb Georg-Johann Lay:
Am 19.11.24 um 13:31 schrieb Andreas Schwab:
../../gcc/config/avr/avr-passes.cc: In member function ‘void
{anonymous}::memento_t::apply_insn1(rtx_insn*, bool)’:
../../gcc/config/avr/avr-passes.cc:2119:9: error: no match for
‘operator&=’ (operand types are ‘{anonymous}::gprmask_t’ {aka
‘unsigned int’} and ‘HARD_REG_SET’)
2119 | known &= ~rset;
| ~~~~~~^~~~~~~~
In file included from ../../gcc/coretypes.h:513,
from ../../gcc/config/avr/avr-passes.cc:27:
../../gcc/dumpfile.h:240:1: note: candidate: ‘dump_flags_t&
operator&=(dump_flags_t&, dump_flags_t)’
240 | operator&= (dump_flags_t &lhs, dump_flags_t rhs)
| ^~~~~~~~
../../gcc/dumpfile.h:240:45: note: no known conversion for argument
2 from ‘HARD_REG_SET’ to ‘dump_flags_t’ {aka ‘dump_flag’}
240 | operator&= (dump_flags_t &lhs, dump_flags_t rhs)
| ~~~~~~~~~~~~~^~~
make[2]: *** [../../gcc/config/avr/t-avr:65: avr-passes.o] Error 1
Thank you.
Presumably that's on a host (i386?) where HARD_REG_SET is not a scalar
but an array of HARD_REG_ELT_TYPEs?
Does it build with the following patch that should fix it:
diff --git a/gcc/config/avr/avr-passes.cc b/gcc/config/avr/avr-passes.cc
index 2b67f9fa32c..3d55cf885c2 100644
--- a/gcc/config/avr/avr-passes.cc
+++ b/gcc/config/avr/avr-passes.cc
@@ -2116,7 +2116,7 @@ memento_t::apply_insn1 (rtx_insn *insn, bool unused)
HARD_REG_SET rset;
find_all_hard_reg_sets (insn, &rset, true /* implicit */);
- known &= ~rset;
+ (*this) &= ~rset;
rtx set = single_set (insn);
rtx dest;
Johann
...I went ahead and applied it preemptively because HARD_REG_SET should
be applied to memento_t, not to memento_t.known.
Thank you again.
Applied as https://gcc.gnu.org/r15-5460
Johann
--
AVR: ad target/84211 - Fix a build failure on some hosts.
This fixes a build failure on hosts where HARD_REG_SET is
not a scalar.
The issue was introduced with the patch for PR84211 in
r15-5415.
PR target/84211
gcc/
* config/avr/avr-passes.cc (memento_t::apply_insn1): Don't
use operator &= on memento_t.known but on memento_t itself.
diff --git a/gcc/config/avr/avr-passes.cc b/gcc/config/avr/avr-passes.cc
index 2b67f9fa32c..3d55cf885c2 100644
--- a/gcc/config/avr/avr-passes.cc
+++ b/gcc/config/avr/avr-passes.cc
@@ -2116,7 +2116,7 @@ memento_t::apply_insn1 (rtx_insn *insn, bool unused)
HARD_REG_SET rset;
find_all_hard_reg_sets (insn, &rset, true /* implicit */);
- known &= ~rset;
+ (*this) &= ~rset;
rtx set = single_set (insn);
rtx dest;