diff options
author | Richard Stallman <rms@gnu.org> | 1993-07-18 20:24:45 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-07-18 20:24:45 +0000 |
commit | 551064b16e9a308ebc279316494adc2763e48a5d (patch) | |
tree | 1db7eacc135a8ed0f7727b7b6b08b9cf9c4391eb /gcc/fold-const.c | |
parent | cba389cdf9bd114a1f28bea0a4ca6b6036fecfba (diff) | |
download | gcc-551064b16e9a308ebc279316494adc2763e48a5d.zip gcc-551064b16e9a308ebc279316494adc2763e48a5d.tar.gz gcc-551064b16e9a308ebc279316494adc2763e48a5d.tar.bz2 |
(fold): Handle CONJ_EXPR.
From-SVN: r4938
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index de5630b..5b9d851 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3485,6 +3485,30 @@ fold (expr) return build1 (ABS_EXPR, type, TREE_OPERAND (arg0, 0)); return t; + case CONJ_EXPR: + if (TREE_CODE (TREE_TYPE (arg0)) != COMPLEX_TYPE) + return arg0; + else if (TREE_CODE (arg0) == COMPLEX_EXPR) + return build (COMPLEX_EXPR, TREE_TYPE (arg0), + TREE_OPERAND (arg0, 0), + fold (build1 (NEGATE_EXPR, + TREE_TYPE (TREE_TYPE (arg0)), + TREE_OPERAND (arg0, 1)))); + else if (TREE_CODE (arg0) == COMPLEX_CST) + return build_complex (TREE_OPERAND (arg0, 0), + fold (build1 (NEGATE_EXPR, + TREE_TYPE (TREE_TYPE (arg0)), + TREE_OPERAND (arg0, 1)))); + else if (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR) + return fold (build (TREE_CODE (arg0), type, + fold (build1 (CONJ_EXPR, type, + TREE_OPERAND (arg0, 0))), + fold (build1 (CONJ_EXPR, + type, TREE_OPERAND (arg0, 1))))); + else if (TREE_CODE (arg0) == CONJ_EXPR) + return TREE_OPERAND (arg0, 0); + return t; + case BIT_NOT_EXPR: if (wins) { |