middle-end/94539 - void * aliases every other pointer
This makes same_type_for_tbaa_p conservative in the same way get_alias_set is about void * which we allow to alias all other pointers. 2020-04-15 Richard Biener <rguenther@suse.de> PR middle-end/94539 * tree-ssa-alias.c (same_type_for_tbaa): Defer to alias_sets_conflict_p for pointers. * gcc.dg/alias-14.c: Make dg-do run.
This commit is contained in:
parent
5b6551bc60
commit
e71b408aa2
|
@ -1,3 +1,9 @@
|
||||||
|
2020-04-15 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR middle-end/94539
|
||||||
|
* tree-ssa-alias.c (same_type_for_tbaa): Defer to
|
||||||
|
alias_sets_conflict_p for pointers.
|
||||||
|
|
||||||
2020-04-14 Max Filippov <jcmvbkbc@gmail.com>
|
2020-04-14 Max Filippov <jcmvbkbc@gmail.com>
|
||||||
|
|
||||||
PR target/94584
|
PR target/94584
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2020-04-15 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR middle-end/94539
|
||||||
|
* gcc.dg/alias-14.c: Make dg-do run.
|
||||||
|
|
||||||
2020-04-13 Max Filippov <jcmvbkbc@gmail.com>
|
2020-04-13 Max Filippov <jcmvbkbc@gmail.com>
|
||||||
|
|
||||||
PR target/94584
|
PR target/94584
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do run } */
|
||||||
/* { dg-options "-O2" } */
|
/* { dg-options "-O2" } */
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
void *a;
|
void *a;
|
||||||
|
|
|
@ -839,7 +839,16 @@ same_type_for_tbaa (tree type1, tree type2)
|
||||||
would mean that conversions between them are useless, whereas they are
|
would mean that conversions between them are useless, whereas they are
|
||||||
not (e.g. type and subtypes can have different modes). So, in the end,
|
not (e.g. type and subtypes can have different modes). So, in the end,
|
||||||
they are only guaranteed to have the same alias set. */
|
they are only guaranteed to have the same alias set. */
|
||||||
if (get_alias_set (type1) == get_alias_set (type2))
|
alias_set_type set1 = get_alias_set (type1);
|
||||||
|
alias_set_type set2 = get_alias_set (type2);
|
||||||
|
if (set1 == set2)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Pointers to void are considered compatible with all other pointers,
|
||||||
|
so for two pointers see what the alias set resolution thinks. */
|
||||||
|
if (POINTER_TYPE_P (type1)
|
||||||
|
&& POINTER_TYPE_P (type2)
|
||||||
|
&& alias_sets_conflict_p (set1, set2))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* The types are known to be not equal. */
|
/* The types are known to be not equal. */
|
||||||
|
|
Loading…
Reference in New Issue