diff options
author | Roger Sayle <roger@eyesopen.com> | 2003-09-08 18:57:32 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2003-09-08 18:57:32 +0000 |
commit | fae111c115aa3600318caec13070c3166d28fb11 (patch) | |
tree | 6c1bd00354a27f7741f4fc070bef38a17e4f1531 /gcc/fold-const.c | |
parent | fa531100f1956d00ec74cc4df7d6d5cbc510058e (diff) | |
download | gcc-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.c | 18 |
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) |