aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-09-08 18:57:32 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-09-08 18:57:32 +0000
commitfae111c115aa3600318caec13070c3166d28fb11 (patch)
tree6c1bd00354a27f7741f4fc070bef38a17e4f1531 /gcc/fold-const.c
parentfa531100f1956d00ec74cc4df7d6d5cbc510058e (diff)
downloadgcc-fae111c115aa3600318caec13070c3166d28fb11.zip
gcc-fae111c115aa3600318caec13070c3166d28fb11.tar.gz
gcc-fae111c115aa3600318caec13070c3166d28fb11.tar.bz2
* fold-const.c (operand_equal_p): Clarify documentation.
From-SVN: r71214
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 27a3da1..d5b98fe 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1822,13 +1822,27 @@ truth_value_p (enum tree_code code)
|| code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR);
}
-/* Return nonzero if two operands are necessarily equal.
+/* Return nonzero if two operands (typically of the same tree node)
+ are necessarily equal. If either argument has side-effects this
+ function returns zero.
+
If ONLY_CONST is nonzero, only return nonzero for constants.
This function tests whether the operands are indistinguishable;
it does not test whether they are equal using C's == operation.
The distinction is important for IEEE floating point, because
(1) -0.0 and 0.0 are distinguishable, but -0.0==0.0, and
- (2) two NaNs may be indistinguishable, but NaN!=NaN. */
+ (2) two NaNs may be indistinguishable, but NaN!=NaN.
+
+ If ONLY_CONST is zero, a VAR_DECL is considered equal to itself
+ even though it may hold multiple values during a function.
+ This is because a GCC tree node guarantees that nothing else is
+ executed between the evaluation of its "operands" (which may often
+ be evaluated in arbitrary order). Hence if the operands themselves
+ don't side-effect, the VAR_DECLs, PARM_DECLs etc... must hold the
+ same value in each operand/subexpression. Hence a zero value for
+ ONLY_CONST assumes isochronic (or instantaneous) tree equivalence.
+ If comparing arbitrary expression trees, such as from different
+ statements, ONLY_CONST must usually be non-zero. */
int
operand_equal_p (tree arg0, tree arg1, int only_const)