+2011-01-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/gimple.texi (Temporaries, Operands, Compound Lvalues)
+ (Conditional Expressions, Logical Operators)
+ (Statement and operand traversals): Do not indent smallexample
+ code. Fix duplicate function argument in example.
+
2011-01-10 Jeff Law <law@redhat.com>
* PR tree-optimization/47141
Currently, an expression like @code{a = b + 5} is not reduced any
further. We tried converting it to something like
@smallexample
- T1 = b + 5;
- a = T1;
+T1 = b + 5;
+a = T1;
@end smallexample
but this bloated the representation for minimal benefit. However, a
variable which must live in memory cannot appear in an expression; its
variable. More complex operands are factored out into temporaries, so
that
@smallexample
- a = b + c + d
+a = b + c + d
@end smallexample
becomes
@smallexample
- T1 = b + c;
- a = T1 + d;
+T1 = b + c;
+a = T1 + d;
@end smallexample
The same rule holds for arguments to a @code{GIMPLE_CALL}.
to
@smallexample
- T1 = &a.b;
- T1[2] = 42;
+T1 = &a.b;
+T1[2] = 42;
@end smallexample
alias analysis would not remember that the reference to @code{T1[2]} came
each branch assigning to the same temporary. So,
@smallexample
- a = b ? c : d;
+a = b ? c : d;
@end smallexample
becomes
@smallexample
- if (b == 1)
- T1 = c;
- else
- T1 = d;
- a = T1;
+if (b == 1)
+ T1 = c;
+else
+ T1 = d;
+a = T1;
@end smallexample
The GIMPLE level if-conversion pass re-introduces @code{?:}
as follows: @code{a = b && c} becomes
@smallexample
- T1 = (bool)b;
- if (T1 == true)
- T1 = (bool)c;
- a = T1;
+T1 = (bool)b;
+if (T1 == true)
+ T1 = (bool)c;
+a = T1;
@end smallexample
Note that @code{T1} in this example cannot be an expression temporary,
each operand @code{OP}, @code{walk_tree} is called as:
@smallexample
- walk_tree (&@code{OP}, @code{CALLBACK_OP}, @code{WI}, @code{WI}- @code{PSET})
+walk_tree (&@code{OP}, @code{CALLBACK_OP}, @code{WI}, @code{PSET})
@end smallexample
If @code{CALLBACK_OP} returns non-@code{NULL} for an operand, the remaining