diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-10-27 11:55:38 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-10-27 11:55:38 +0000 |
commit | 4e48e02be82c63ebe6687bca93f07b76b5765261 (patch) | |
tree | 911d54ae3690050b7e38b2abd27d129aa38af6ba /gcc | |
parent | efc8f0d8d16144627d0fad4c43496f8e6e869161 (diff) | |
download | gcc-4e48e02be82c63ebe6687bca93f07b76b5765261.zip gcc-4e48e02be82c63ebe6687bca93f07b76b5765261.tar.gz gcc-4e48e02be82c63ebe6687bca93f07b76b5765261.tar.bz2 |
Split constant handling out of fold_builtin_fma
Just makes an upcoming patch a bit clearer.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* builtins.c (fold_builtin_fma): Remove constant handling.
(fold_builtin_3): Handle constant fma arguments here.
From-SVN: r229428
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/builtins.c | 16 |
2 files changed, 11 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f59587..06b27fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2015-10-27 Richard Sandiford <richard.sandiford@arm.com> + * builtins.c (fold_builtin_fma): Remove constant handling. + (fold_builtin_3): Handle constant fma arguments here. + +2015-10-27 Richard Sandiford <richard.sandiford@arm.com> + * builtins.c (fold_builtin_fabs): Remove constant handling. (fold_builtin_abs): Likewise. diff --git a/gcc/builtins.c b/gcc/builtins.c index a03dffc..6cd8879 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7881,18 +7881,13 @@ fold_fma (location_t loc ATTRIBUTE_UNUSED, static tree fold_builtin_fma (location_t loc, tree arg0, tree arg1, tree arg2, tree type) { + /* ??? Only expand to FMA_EXPR if it's directly supported. */ if (validate_arg (arg0, REAL_TYPE) && validate_arg (arg1, REAL_TYPE) - && validate_arg (arg2, REAL_TYPE)) - { - tree tem = fold_fma (loc, type, arg0, arg1, arg2); - if (tem) - return tem; + && validate_arg (arg2, REAL_TYPE) + && optab_handler (fma_optab, TYPE_MODE (type)) != CODE_FOR_nothing) + return fold_build3_loc (loc, FMA_EXPR, type, arg0, arg1, arg2); - /* ??? Only expand to FMA_EXPR if it's directly supported. */ - if (optab_handler (fma_optab, TYPE_MODE (type)) != CODE_FOR_nothing) - return fold_build3_loc (loc, FMA_EXPR, type, arg0, arg1, arg2); - } return NULL_TREE; } @@ -9307,8 +9302,9 @@ fold_builtin_3 (location_t loc, tree fndecl, return fold_builtin_sincos (loc, arg0, arg1, arg2); CASE_FLT_FN (BUILT_IN_FMA): + if (tree tem = fold_fma (loc, type, arg0, arg1, arg2)) + return tem; return fold_builtin_fma (loc, arg0, arg1, arg2, type); - break; CASE_FLT_FN (BUILT_IN_REMQUO): if (validate_arg (arg0, REAL_TYPE) |