diff options
author | Richard Guenther <rguenther@suse.de> | 2007-08-22 11:43:32 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-08-22 11:43:32 +0000 |
commit | 968fc3b64fd72e5ebab888ca442a007efc1dc1b4 (patch) | |
tree | f54588d06d55df4ab4c422240ba545ab8e292eed /gcc/builtins.c | |
parent | 3fe42b898a374eeef732567f0b50168a4a1e3ccc (diff) | |
download | gcc-968fc3b64fd72e5ebab888ca442a007efc1dc1b4.zip gcc-968fc3b64fd72e5ebab888ca442a007efc1dc1b4.tar.gz gcc-968fc3b64fd72e5ebab888ca442a007efc1dc1b4.tar.bz2 |
re PR middle-end/33007 (builtin lround doesn't work)
2007-08-22 Richard Guenther <rguenther@suse.de>
PR middle-end/33007
* builtins.c (expand_builtin_int_roundingfn): Replace call
argument wrapped with SAVE_EXPR directly.
(expand_builtin_int_roundingfn_2): Likewise.
* gcc.dg/pr33007.c: New testcase.
From-SVN: r127701
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index cbe00c7..64f8185 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -2516,7 +2516,7 @@ expand_builtin_int_roundingfn (tree exp, rtx target, rtx subtarget) enum built_in_function fallback_fn; tree fallback_fndecl; enum machine_mode mode; - tree arg, narg; + tree arg; if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE)) gcc_unreachable (); @@ -2549,12 +2549,7 @@ expand_builtin_int_roundingfn (tree exp, rtx target, rtx subtarget) /* Wrap the computation of the argument in a SAVE_EXPR, as we may need to expand the argument again. This way, we will not perform side-effects more the once. */ - narg = builtin_save_expr (arg); - if (narg != arg) - { - arg = narg; - exp = build_call_expr (fndecl, 1, arg); - } + CALL_EXPR_ARG (exp, 0) = builtin_save_expr (arg); op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL); @@ -2646,7 +2641,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) convert_optab builtin_optab; rtx op0, insns; tree fndecl = get_callee_fndecl (exp); - tree arg, narg; + tree arg; enum machine_mode mode; /* There's no easy way to detect the case we need to set EDOM. */ @@ -2678,12 +2673,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) /* Wrap the computation of the argument in a SAVE_EXPR, as we may need to expand the argument again. This way, we will not perform side-effects more the once. */ - narg = builtin_save_expr (arg); - if (narg != arg) - { - arg = narg; - exp = build_call_expr (fndecl, 1, arg); - } + CALL_EXPR_ARG (exp, 0) = builtin_save_expr (arg); op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL); |