Commit 582d1f90 by Paul Koning Committed by Paul Koning

Update internal documentation to describe that DONE and FAIL

	also apply to define_split and define_peephole2.

	* doc/md.texi (define_split): Document DONE and FAIL.
	(define_peephole2): Ditto.

From-SVN: r262479
parent 5840e3b8
2018-07-06 Paul Koning <ni1d@arrl.net>
* doc/md.texi (define_split): Document DONE and FAIL.
(define_peephole2): Ditto.
2018-07-05 Jeff Law <law@redhat.com>
PR tree-optimization/86010
......
......@@ -8060,6 +8060,30 @@ those in @code{define_expand}, however, these statements must not
generate any new pseudo-registers. Once reload has completed, they also
must not allocate any space in the stack frame.
There are two special macros defined for use in the preparation statements:
@code{DONE} and @code{FAIL}. Use them with a following semicolon,
as a statement.
@table @code
@findex DONE
@item DONE
Use the @code{DONE} macro to end RTL generation for the splitter. The
only RTL insns generated as replacement for the matched input insn will
be those already emitted by explicit calls to @code{emit_insn} within
the preparation statements; the replacement pattern is not used.
@findex FAIL
@item FAIL
Make the @code{define_split} fail on this occasion. When a @code{define_split}
fails, it means that the splitter was not truly available for the inputs
it was given, and the input insn will not be split.
@end table
If the preparation falls through (invokes neither @code{DONE} nor
@code{FAIL}), then the @code{define_split} uses the replacement
template.
Patterns are matched against @var{insn-pattern} in two different
circumstances. If an insn needs to be split for delay slot scheduling
or insn scheduling, the insn is already known to be valid, which means
......@@ -8615,6 +8639,33 @@ so here's a silly made-up example:
"")
@end smallexample
There are two special macros defined for use in the preparation statements:
@code{DONE} and @code{FAIL}. Use them with a following semicolon,
as a statement.
@table @code
@findex DONE
@item DONE
Use the @code{DONE} macro to end RTL generation for the peephole. The
only RTL insns generated as replacement for the matched input insn will
be those already emitted by explicit calls to @code{emit_insn} within
the preparation statements; the replacement pattern is not used.
@findex FAIL
@item FAIL
Make the @code{define_peephole2} fail on this occasion. When a @code{define_peephole2}
fails, it means that the replacement was not truly available for the
particular inputs it was given. In that case, GCC may still apply a
later @code{define_peephole2} that also matches the given insn pattern.
(Note that this is different from @code{define_split}, where @code{FAIL}
prevents the input insn from being split at all.)
@end table
If the preparation falls through (invokes neither @code{DONE} nor
@code{FAIL}), then the @code{define_peephole2} uses the replacement
template.
@noindent
If we had not added the @code{(match_dup 4)} in the middle of the input
sequence, it might have been the case that the register we chose at the
......
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