diff options
Diffstat (limited to 'gcc/gimplify.c')
| -rw-r--r-- | gcc/gimplify.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 7105698..82e747f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1970,9 +1970,8 @@ gimplify_call_expr (tree *expr_p, tree *pre_p, bool want_value) decl = get_callee_fndecl (*expr_p); if (decl && DECL_BUILT_IN (decl)) { - tree fndecl = get_callee_fndecl (*expr_p); tree arglist = TREE_OPERAND (*expr_p, 1); - tree new = fold_builtin (fndecl, arglist, !want_value); + tree new = fold_builtin (decl, arglist, !want_value); if (new && new != *expr_p) { @@ -2026,19 +2025,22 @@ gimplify_call_expr (tree *expr_p, tree *pre_p, bool want_value) TREE_OPERAND (*expr_p, 1) = nreverse (TREE_OPERAND (*expr_p, 1)); /* Try this again in case gimplification exposed something. */ - if (ret != GS_ERROR && decl && DECL_BUILT_IN (decl)) + if (ret != GS_ERROR) { - tree fndecl = get_callee_fndecl (*expr_p); - tree arglist = TREE_OPERAND (*expr_p, 1); - tree new = fold_builtin (fndecl, arglist, !want_value); - - if (new && new != *expr_p) + decl = get_callee_fndecl (*expr_p); + if (decl && DECL_BUILT_IN (decl)) { - /* There was a transformation of this call which computes the - same value, but in a more efficient way. Return and try - again. */ - *expr_p = new; - return GS_OK; + tree arglist = TREE_OPERAND (*expr_p, 1); + tree new = fold_builtin (decl, arglist, !want_value); + + if (new && new != *expr_p) + { + /* There was a transformation of this call which computes the + same value, but in a more efficient way. Return and try + again. */ + *expr_p = new; + return GS_OK; + } } } |
