Commit cc099b03 by Richard Biener Committed by Richard Biener

match-and-simplify.texi: Update for changed syntax of inner ifs and the new switch expression.

2015-09-14  Richard Biener  <rguenther@suse.de>

	* doc/match-and-simplify.texi: Update for changed syntax
	of inner ifs and the new switch expression.

From-SVN: r227741
parent 64106a1a
2015-09-14 Richard Biener <rguenther@suse.de>
* doc/match-and-simplify.texi: Update for changed syntax
of inner ifs and the new switch expression.
2015-09-14 Yuri Rumyantsev <ysrumyan@gmail.com> 2015-09-14 Yuri Rumyantsev <ysrumyan@gmail.com>
* config/i386/haswell.md: New file describing Haswell pipeline. * config/i386/haswell.md: New file describing Haswell pipeline.
......
...@@ -118,8 +118,8 @@ be a valid GIMPLE operand (so you cannot generate expressions in C code). ...@@ -118,8 +118,8 @@ be a valid GIMPLE operand (so you cannot generate expressions in C code).
@smallexample @smallexample
(simplify (simplify
(trunc_mod integer_zerop@@0 @@1) (trunc_mod integer_zerop@@0 @@1)
(if (!integer_zerop (@@1))) (if (!integer_zerop (@@1))
@@0) @@0))
@end smallexample @end smallexample
Here @code{@@0} captures the first operand of the trunc_mod expression Here @code{@@0} captures the first operand of the trunc_mod expression
...@@ -130,9 +130,11 @@ can be unconstrained or capture expresions or predicates. ...@@ -130,9 +130,11 @@ can be unconstrained or capture expresions or predicates.
This example introduces an optional operand of simplify, This example introduces an optional operand of simplify,
the if-expression. This condition is evaluated after the the if-expression. This condition is evaluated after the
expression matched in the IL and is required to evaluate to true expression matched in the IL and is required to evaluate to true
to enable the replacement expression. The expression operand to enable the replacement expression in the second operand
of the @code{if} is a standard C expression which may contain references position. The expression operand of the @code{if} is a standard C
to captures. expression which may contain references to captures. The @code{if}
has an optional third operand which may contain the replacement
expression that is enabled when the condition evaluates to false.
A @code{if} expression can be used to specify a common condition A @code{if} expression can be used to specify a common condition
for multiple simplify patterns, avoiding the need for multiple simplify patterns, avoiding the need
...@@ -149,8 +151,48 @@ to repeat that multiple times: ...@@ -149,8 +151,48 @@ to repeat that multiple times:
(negate @@1))) (negate @@1)))
@end smallexample @end smallexample
Note that @code{if}s in outer position do not have the optional
else clause but instead have multiple then clauses.
Ifs can be nested. Ifs can be nested.
There exists a @code{switch} expression which can be used to
chain conditions avoiding nesting @code{if}s too much:
@smallexample
(simplify
(simple_comparison @@0 REAL_CST@@1)
(switch
/* a CMP (-0) -> a CMP 0 */
(if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@@1)))
(cmp @@0 @{ build_real (TREE_TYPE (@@1), dconst0); @}))
/* x != NaN is always true, other ops are always false. */
(if (REAL_VALUE_ISNAN (TREE_REAL_CST (@@1))
&& ! HONOR_SNANS (@@1))
@{ constant_boolean_node (cmp == NE_EXPR, type); @})))
@end smallexample
Is equal to
@smallexample
(simplify
(simple_comparison @@0 REAL_CST@@1)
(switch
/* a CMP (-0) -> a CMP 0 */
(if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@@1)))
(cmp @@0 @{ build_real (TREE_TYPE (@@1), dconst0); @})
/* x != NaN is always true, other ops are always false. */
(if (REAL_VALUE_ISNAN (TREE_REAL_CST (@@1))
&& ! HONOR_SNANS (@@1))
@{ constant_boolean_node (cmp == NE_EXPR, type); @}))))
@end smallexample
which has the second @code{if} in the else operand of the first.
The @code{switch} expression takes @code{if} expressions as
operands (which may not have else clauses) and as a last operand
a replacement expression which should be enabled by default if
no other condition evaluated to true.
Captures can also be used for capturing results of sub-expressions. Captures can also be used for capturing results of sub-expressions.
@smallexample @smallexample
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment