https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65689
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Adding a hack where stmt.c (parse_input_constraint) so that it handles case 'S': the same as say case 'i': fixes the test, so it is all about whether the expander and middle-end thinks that "S" constraint allows_reg || allows_mem (right now both, ideally none). So, to fix this, perhaps hack up genpreds.c, so that it generates another function or two which returns true if the constraint can be easily proved not to allow reg (or not to allow mem). Say "S" is: (and (match_code "const,symbol_ref,label_ref") (match_test "aarch64_symbolic_address_p (op)"))) and so genpreds can conservatively assume match_test can return anything, but match_code clearly doesn't satisfy a reg/subreg nor mem (requires something other), so process_{input,output}_constraint should be able to safely set both of those to false.