https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107115
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amonakov at gcc dot gnu.org, | |jakub at gcc dot gnu.org --- Comment #6 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Cc'ing Jakub for the problematic i386.md peephole that loses alias set info. As Andrew mentioned in comment #2, the next stop is combine, which sees (set (mem:DI (plus:DI (mult:DI (sign_extend:DI (reg:SI 101)) (const_int 8 [0x8])) (reg/v/f:DI 90 [ p4 ])) [1 MEM[(long int *)_11]+0 S8 A64]) (mem:DI (plus:DI (mult:DI (sign_extend:DI (reg:SI 101)) (const_int 8 [0x8])) (reg/v/f:DI 90 [ p4 ])) [2 *_11+0 S8 A64])) as a no-op move and removes it (but note differing alias sets in the MEMs). And with -fdisable-rtl-combine it is then broken by peephole2 of all things: ;; Attempt to optimize away memory stores of values the memory already ;; has. See PR79593. (define_peephole2 [(set (match_operand 0 "register_operand") (match_operand 1 "memory_operand")) (set (match_operand 2 "memory_operand") (match_dup 0))] "!MEM_VOLATILE_P (operands[1]) && !MEM_VOLATILE_P (operands[2]) && rtx_equal_p (operands[1], operands[2]) && !reg_overlap_mentioned_p (operands[0], operands[2])" [(set (match_dup 0) (match_dup 1))])