diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-03-03 17:43:42 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-03-03 17:43:42 +0100 |
commit | 067dd3c96dbb75465d32f914e72feb49f234dd0a (patch) | |
tree | e0ac34092b00fab8436a07f2c7efb7e65119157c /gcc/gimplify.c | |
parent | 9bd9f73827bfddb9485bcc9a8a2c80d4ed5c9cd8 (diff) | |
download | gcc-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.c | 15 |
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; } |