https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84279
--- Comment #4 from Peter Bergner <bergner at gcc dot gnu.org> ---
This actually seems to be a constraint problem caused by mem_operand_gpr()
which implements the "Y" constraint (ie, mem's ok for GPR load/stores) allowing
altivec type addresses that contain the 'and' like we see in the ICE above.
The patch below fixes the ICE and I'm going to bootstrap and regtest it.
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 257606)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -8220,6 +8220,12 @@
int extra;
rtx addr = XEXP (op, 0);
+ /* Don't allow altivec type addresses like (mem: (and: ...)).
+ See PR target/84279. */
+
+ if (GET_CODE (addr) == AND)
+ return false;
+
op = address_offset (addr);
if (op == NULL_RTX)
return true;