Describe invoke instruction dependencies. Generalize the text for

terminator instructions so that it applies to all terminators with
multiple successors, including invoke.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102909 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-05-03 14:55:22 +00:00
parent 855abed3cb
commit b532816ac9

View File

@ -2357,6 +2357,11 @@ has undefined behavior.</p>
<a href="#i_ret"><tt>ret</tt></a> instructions that dynamically transfer
control back to them.</li>
<li><a href="#i_invoke"><tt>Invoke</tt></a> instructions depend on the
<a href="#i_ret"><tt>ret</tt></a>, <a href="#i_unwind"><tt>unwind</tt></a>,
or exception-throwing call instructions that dynamically transfer control
back to them.</li>
<li>Non-volatile loads and stores depend on the most recent stores to all of the
referenced memory addresses, following the order in the IR
(including loads and stores implied by intrinsics such as
@ -2374,15 +2379,11 @@ has undefined behavior.</p>
recent preceding instruction with externally visible side effects, following
the order in the IR. (This includes volatile loads and stores.)</li>
<li>An instruction <i>control-depends</i> on a <a href="#i_br"><tt>br</tt></a>,
<a href="#i_switch"><tt>switch</tt></a>, or
<a href="#i_indirectbr"><tt>indirectbr</tt></a> if the <tt>br</tt>,
<tt>switch</tt>, or <tt>indirectbr</tt> has multiple successors and the
instruction is always executed when control transfers to one of the
successors, and may not be executed when control is transfered to
another.</li>
<!-- FIXME: invoke, unwind, exceptions -->
<li>An instruction <i>control-depends</i> on a
<a href="#terminators">terminator instruction</a>
if the terminator instruction has multiple successors and the instruction
is always executed when control transfers to one of the successors, and
may not be executed when control is transfered to another.</li>
<li>Dependence is transitive.</li>