https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91927
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think the following patch is the correct fix: diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index ad4676bc167..787323255cb 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -41,7 +41,7 @@ (define_expand "movmisalign<mode>" [(set (match_operand:VALL 0 "nonimmediate_operand") (match_operand:VALL 1 "general_operand"))] - "TARGET_SIMD" + "TARGET_SIMD && !STRICT_ALIGNMENT" { /* This pattern is not permitted to fail during expansion: if both arguments are non-registers (e.g. memory := constant, which can be created by the Basically movmisalign should not be there if strict alignment as it is just emitting a set.