[Bug c/60819] dse1 removing not-dead insn (aliasing issue?)
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Apr 11 12:09:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60819
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2014-04-11
Component|rtl-optimization |c
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think you are violating aliasing in your testcase:
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
typedef short __v4hi __attribute__ ((__vector_size__ (8)));
you access __m64 with a __v4hi (__may_alias__ doesn't make the __m64 parameter
have alias-set zero!).
Now, we lower this to
return (int) *((short int *) &VIEW_CONVERT_EXPR<vector(4) short int>(__A) +
(sizetype) ((long unsigned int) __N * 2));
because of the variable indexing which makes this a memory access. So
eventually that lowering should make sure no TBAA issues appear or we
should reject variable indexes here.
That is, variable indexing should use a MEM_REF with alias-set zero
(if we are sure that non-variable indexing will never result in a memory
access,
it seems that the FE lowers constant indexes the same and only later during
gimplification we fold that to use a BIT_FIELD_REF).
Confirmed as a Frontend bug sofar, just in case the testcase is valid.
More information about the Gcc-bugs
mailing list