diff options
author | Richard Biener <rguenth@gcc.gnu.org> | 2012-09-03 13:24:07 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-09-03 13:24:07 +0000 |
commit | 6cadda8be2f75200026930e24075868718f4843e (patch) | |
tree | 63286dde41d2ffb9e2ca68dfc3027fd1c3ce40bb /gcc | |
parent | a4cf6e468278c96222738657dbea85b9ccf2d76d (diff) | |
download | gcc-6cadda8be2f75200026930e24075868718f4843e.zip gcc-6cadda8be2f75200026930e24075868718f4843e.tar.gz gcc-6cadda8be2f75200026930e24075868718f4843e.tar.bz2 |
re PR middle-end/54362 (COND_EXPR not understood by either alias or ITM)
2012-09-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54362
* tree-ssa-structalias.c (find_func_aliases): Handle COND_EXPR.
From-SVN: r190889
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b3891c..a6cf328 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,9 +1,15 @@ +2012-09-03 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/54362 + * tree-ssa-structalias.c (find_func_aliases): Handle COND_EXPR. + 2012-09-03 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.c (s390_loadrelative_operand_p): New function. (s390_check_qrst_address, print_operand_address): Use s390_loadrelative_operand_p instead of s390_symref_operand_p. - (s390_check_symref_alignment): Accept pointer size alignment for GOT slots. + (s390_check_symref_alignment): Accept pointer size alignment for + GOT slots. (legitimize_pic_address): Use load relative on z10 or later. 2012-09-03 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 609ee2c..6e71d55 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4527,6 +4527,18 @@ find_func_aliases (gimple origt) && !POINTER_TYPE_P (TREE_TYPE (rhsop)))) || gimple_assign_single_p (t)) get_constraint_for_rhs (rhsop, &rhsc); + else if (code == COND_EXPR) + { + /* The result is a merge of both COND_EXPR arms. */ + VEC (ce_s, heap) *tmp = NULL; + struct constraint_expr *rhsp; + unsigned i; + get_constraint_for_rhs (gimple_assign_rhs2 (t), &rhsc); + get_constraint_for_rhs (gimple_assign_rhs3 (t), &tmp); + FOR_EACH_VEC_ELT (ce_s, tmp, i, rhsp) + VEC_safe_push (ce_s, heap, rhsc, rhsp); + VEC_free (ce_s, heap, tmp); + } else if (truth_value_p (code)) /* Truth value results are not pointer (parts). Or at least very very unreasonable obfuscation of a part. */ |