------- Comment #3 from rguenth at gcc dot gnu dot org 2010-02-04 10:33 ------- Well, dse puts
(mem/u/f/c/i:DI (symbol_ref:DI ("q") [flags 0x2] <var_decl 0x7ffff5ae7140 q>) [0 q+0 S8 A64]) (mem/u/f/c/i:DI (symbol_ref:DI ("p") [flags 0x2] <var_decl 0x7ffff5ae70a0 p>) [0 p+0 S8 A64]) into different groups: **scanning insn=9 cselib value 2 0x10f8e58 (reg/f:DI 63 [ q ]) cselib lookup (reg/f:DI 63 [ q ]) => 2 mem: (reg/f:DI 63 [ q ]) after canon_rtx address: (mem/u/f/c/i:DI (symbol_ref:DI ("q") [flags 0x2] <var_decl 0x7ffff5ae7140 q>) [0 q+0 S8 A64]) gid=2 offset=0 processing const load gid=2[0..4) mems_found = 0, cannot_delete = true cselib lookup (mem:SI (reg/f:DI 63 [ q ]) [0 S4 A32]) => 0 **scanning insn=10 cselib lookup (reg/f:DI 58 [ p.0 ]) => 1 mem: (reg/f:DI 58 [ p.0 ]) after canon_rtx address: (mem/u/f/c/i:DI (symbol_ref:DI ("p") [flags 0x2] <var_decl 0x7ffff5ae70a0 p>) [0 p+0 S8 A64]) gid=1 offset=0 processing const base store gid=1[0..4) trying store in insn=7 gid=1[0..4) just because the addresses are MEM_READONLY_P. But that obviously does not mean they do not point to the same thing - no idea what implementor had in mind here. Kenny? The following fixes this for me: Index: dse.c =================================================================== --- dse.c (revision 156468) +++ dse.c (working copy) @@ -1015,9 +1015,6 @@ const_or_frame_p (rtx x) { switch (GET_CODE (x)) { - case MEM: - return MEM_READONLY_P (x); - case CONST: case CONST_INT: case CONST_DOUBLE: -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |zadeck at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42952