aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-06-10 19:46:03 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-06-10 19:46:03 +0000
commitaa6c7c3a3a02b5518c9a1398145160ddf8df2f56 (patch)
tree27e962afc2c93f9a1bdca1d109ae79576073d54b /gcc/builtins.c
parent5a57f1b2c005ba13c7214d1d4cf8a6d882f43b59 (diff)
downloadgcc-aa6c7c3a3a02b5518c9a1398145160ddf8df2f56.zip
gcc-aa6c7c3a3a02b5518c9a1398145160ddf8df2f56.tar.gz
gcc-aa6c7c3a3a02b5518c9a1398145160ddf8df2f56.tar.bz2
builtins.c (expand_builtin): Fall back to library function call for conj...
* builtins.c (expand_builtin): Fall back to library function call for conj, conjf, conjl, creal, crealf, creall, cimag, cimagf and cimagl. (fold_builtin_1): Lower built-ins BUILT_IN_CONJ{,F,L} to CONJ_EXPR, BUILT_IN_CREAL{,F,L} to REALPART_EXPR, and BUILT_IN_CIMAG{,F,L} to IMAGPART_EXPR respectively. From-SVN: r82938
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 384173f..199900e 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5656,19 +5656,6 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
}
break;
- case BUILT_IN_CONJ:
- case BUILT_IN_CONJF:
- case BUILT_IN_CONJL:
- case BUILT_IN_CREAL:
- case BUILT_IN_CREALF:
- case BUILT_IN_CREALL:
- case BUILT_IN_CIMAG:
- case BUILT_IN_CIMAGF:
- case BUILT_IN_CIMAGL:
- /* expand_tree_builtin changes these into CONJ_EXPR, REALPART_EXPR
- and IMAGPART_EXPR. */
- abort ();
-
case BUILT_IN_EXP:
case BUILT_IN_EXPF:
case BUILT_IN_EXPL:
@@ -7670,6 +7657,29 @@ fold_builtin_1 (tree exp)
case BUILT_IN_IMAXABS:
return fold_builtin_abs (arglist, type);
+ case BUILT_IN_CONJ:
+ case BUILT_IN_CONJF:
+ case BUILT_IN_CONJL:
+ if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
+ return fold (build1 (CONJ_EXPR, type, TREE_VALUE (arglist)));
+ break;
+
+ case BUILT_IN_CREAL:
+ case BUILT_IN_CREALF:
+ case BUILT_IN_CREALL:
+ if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
+ return non_lvalue (fold (build1 (REALPART_EXPR, type,
+ TREE_VALUE (arglist))));
+ break;
+
+ case BUILT_IN_CIMAG:
+ case BUILT_IN_CIMAGF:
+ case BUILT_IN_CIMAGL:
+ if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
+ return non_lvalue (fold (build1 (IMAGPART_EXPR, type,
+ TREE_VALUE (arglist))));
+ break;
+
case BUILT_IN_CABS:
case BUILT_IN_CABSF:
case BUILT_IN_CABSL: