aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-03-03 17:43:42 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-03-03 17:43:42 +0100
commit067dd3c96dbb75465d32f914e72feb49f234dd0a (patch)
treee0ac34092b00fab8436a07f2c7efb7e65119157c /gcc/gimplify.c
parent9bd9f73827bfddb9485bcc9a8a2c80d4ed5c9cd8 (diff)
downloadgcc-067dd3c96dbb75465d32f914e72feb49f234dd0a.zip
gcc-067dd3c96dbb75465d32f914e72feb49f234dd0a.tar.gz
gcc-067dd3c96dbb75465d32f914e72feb49f234dd0a.tar.bz2
re PR fortran/39354 (bad codegen for openmp atomics (Intel64 Fortran logical ops))
PR fortran/39354 * gimplify.c (goa_stabilize_expr): Handle tcc_comparison, TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR. * gfortran.dg/gomp/pr39354.f90: New test. From-SVN: r144575
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index ae12424..02d4923 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -6047,12 +6047,27 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
switch (TREE_CODE_CLASS (TREE_CODE (expr)))
{
case tcc_binary:
+ case tcc_comparison:
saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p, lhs_addr,
lhs_var);
case tcc_unary:
saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p, lhs_addr,
lhs_var);
break;
+ case tcc_expression:
+ switch (TREE_CODE (expr))
+ {
+ case TRUTH_ANDIF_EXPR:
+ case TRUTH_ORIF_EXPR:
+ saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p,
+ lhs_addr, lhs_var);
+ saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p,
+ lhs_addr, lhs_var);
+ break;
+ default:
+ break;
+ }
+ break;
default:
break;
}