Hello, While working on a port of GCC for a non-public architecture that has pre/post-modify memory access instructions, I discovered what looks like a bug which can cause incorrect code generation.
My suggested fix is trivial: https://github.com/tyomitch/gcc/commit/7d9cc102adf11065358d4694109ce3e9f0b5c642 -- but I cannot submit this patch without a testcase, and my expertise in the standard GCC target architectures is insufficient for reproducing this bug in any one of them. So, perhaps a maintainer of any supported architecture having pre/post-modify memory access can take a look at this? Basically, it seems to me that if a BB has a sequence like (using C syntax for clarity) r1 = r2 + 42; r3 = *r1++; r4 = *(r2 + 42); --then the cse pass overlooks the modification of r1 by the second instruction, and changes the last instruction to "r4 = *r1"