operand swapping in get_expr_operands.
Jeffrey A Law
law@redhat.com
Wed May 4 15:16:00 GMT 2005
On Wed, 2005-05-04 at 10:28 -0400, Andrew MacLeod wrote:
> Why is it we try to swap operands in get_expr_operands, where we are
> otherwise simply parsing not modifying?
>
> /* If it would be profitable to swap the operands, then do so to
> canonicalize the statement, enabling better optimization.
> By placing canonicalization of such expressions here we
> transparently keep statements in canonical form, even
> when the statement is modified. */
>
>
> Is this statement still true? and if so, who is counting on it? DOM?
> And does it need to be done in update_stmt? Its been a minor wart
> everytime I turn around that we are modifying the stmt when in the
> middle of building operands. I'm curious if we still need to do it here,
> now its making comparing operands more difficult.
Any code which is hashing expressions is probably dependent on this
to some extent.
> I believe it basically attempts to have the first operand of a pair be
> the lower ssa_name index... ie, so commutative or comparision pairs are
> sorted.
That's its primary purpose -- to ensure that SSA_NAMEs appear in a
predictable order within an expression.
An alternate approach would be to twiddle the hashing code -- that works
OK for commutative operands, but not necessarily for things like LT_EXPR
where putting things into canonical form involves changing the tree
code.
jeff
More information about the Gcc
mailing list