https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97532
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The operand in this case is the whole (vec_duplicate:V8DF (mem:DF (reg...) [6 *fact_18(D)+0 S8 A64])) which matches the (define_special_memory_constraint "Br" "@internal bcst memory operand." (match_operand 0 "bcst_mem_operand")) constraint where bcst_mem_operand is: (define_predicate "bcst_mem_operand" (and (match_code "vec_duplicate") (and (match_test "TARGET_AVX512F") (ior (match_test "TARGET_AVX512VL") (match_test "GET_MODE_SIZE (GET_MODE (op)) == 64"))) (match_test "VALID_BCST_MODE_P (GET_MODE_INNER (GET_MODE (op)))") (match_test "memory_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)))"))) I think the extract_mem_from_operand function has been introduced for this in LRA, but perhaps it is not used in all the places where it is needed.