mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Address Reid's review feedback.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241889 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
751c4be705
commit
a5d05b7711
@ -5183,15 +5183,15 @@ none of the ``catchblock`` instructions are suitable for catching the
|
|||||||
in-flight exception.
|
in-flight exception.
|
||||||
|
|
||||||
If a ``nextaction`` label is not present, the instruction unwinds out of
|
If a ``nextaction`` label is not present, the instruction unwinds out of
|
||||||
the function it is located in. The
|
its parent function. The
|
||||||
:ref:`personality function <personalityfn>` will look for an appropriate
|
:ref:`personality function <personalityfn>` will continue processing
|
||||||
catch block in the caller.
|
exception handling actions in the caller.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
""""""""""
|
""""""""""
|
||||||
|
|
||||||
The instruction optionally takes a label, ``nextaction``, indicating
|
The instruction optionally takes a label, ``nextaction``, indicating
|
||||||
where control should transfer to if none of the constituent
|
where control should transfer to if none of the preceding
|
||||||
``catchblock`` instructions are suitable for the in-flight exception.
|
``catchblock`` instructions are suitable for the in-flight exception.
|
||||||
|
|
||||||
Semantics:
|
Semantics:
|
||||||
@ -5212,6 +5212,7 @@ The ``catchendblock`` instruction has several restrictions:
|
|||||||
catch block.
|
catch block.
|
||||||
- A basic block that is not a catch-end block may not include a
|
- A basic block that is not a catch-end block may not include a
|
||||||
'``catchendblock``' instruction.
|
'``catchendblock``' instruction.
|
||||||
|
- Exactly one catch block may unwind to a ``catchendblock``.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
""""""""
|
""""""""
|
||||||
@ -5251,7 +5252,7 @@ Semantics:
|
|||||||
|
|
||||||
The '``catchret``' instruction ends the existing (in-flight) exception
|
The '``catchret``' instruction ends the existing (in-flight) exception
|
||||||
whose unwinding was interrupted with a
|
whose unwinding was interrupted with a
|
||||||
:ref:`catchblock <i_catchblock>` instruction and transfer control to
|
:ref:`catchblock <i_catchblock>` instruction and transfers control to
|
||||||
``normal``.
|
``normal``.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@ -5301,6 +5302,7 @@ Example:
|
|||||||
|
|
||||||
.. code-block:: llvm
|
.. code-block:: llvm
|
||||||
|
|
||||||
|
cleanupret void unwind to caller
|
||||||
cleanupret { i8*, i32 } %exn unwind label %continue
|
cleanupret { i8*, i32 } %exn unwind label %continue
|
||||||
|
|
||||||
.. _i_terminateblock:
|
.. _i_terminateblock:
|
||||||
@ -5314,21 +5316,20 @@ Syntax:
|
|||||||
::
|
::
|
||||||
|
|
||||||
terminateblock [<args>*] unwind label <exception label>
|
terminateblock [<args>*] unwind label <exception label>
|
||||||
|
terminateblock [<args>*] unwind to caller
|
||||||
|
|
||||||
Overview:
|
Overview:
|
||||||
"""""""""
|
"""""""""
|
||||||
|
|
||||||
The '``terminateblock``' instruction is used by `LLVM's exception handling
|
The '``terminateblock``' instruction is used by `LLVM's exception handling
|
||||||
system <ExceptionHandling.html#overview>`_ to specify that a basic block
|
system <ExceptionHandling.html#overview>`_ to specify that a basic block
|
||||||
is a terminate block --- one where a personality routine attempts to transfer
|
is a terminate block --- one where a personality routine may decide to
|
||||||
control to terminate the program.
|
terminate the program.
|
||||||
The ``args`` correspond to whatever information the personality
|
The ``args`` correspond to whatever information the personality
|
||||||
routine requires to know if this is an appropriate place to terminate the
|
routine requires to know if this is an appropriate place to terminate the
|
||||||
program. Control is tranfered to the ``exception`` label if the
|
program. Control is tranfered to the ``exception`` label if the
|
||||||
``terminateblock`` is an appropriate handler for the in-flight exception.
|
personality routine decides not to terminate the program for the
|
||||||
If the ``terminateblock`` is not an appropriate handler, execution of
|
in-flight exception.
|
||||||
the program is terminated via
|
|
||||||
:ref:`personality function <personalityfn>` specific means.
|
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
""""""""""
|
""""""""""
|
||||||
@ -5336,7 +5337,7 @@ Arguments:
|
|||||||
The instruction takes a list of arbitrary values which are interpreted
|
The instruction takes a list of arbitrary values which are interpreted
|
||||||
by the :ref:`personality function <personalityfn>`.
|
by the :ref:`personality function <personalityfn>`.
|
||||||
|
|
||||||
The ``terminateblock`` must be provided an ``exception`` label to
|
The ``terminateblock`` may be given an ``exception`` label to
|
||||||
transfer control to if the in-flight exception matches the ``args``.
|
transfer control to if the in-flight exception matches the ``args``.
|
||||||
|
|
||||||
Semantics:
|
Semantics:
|
||||||
|
@ -2408,8 +2408,8 @@ void Verifier::visitCallInst(CallInst &CI) {
|
|||||||
void Verifier::visitInvokeInst(InvokeInst &II) {
|
void Verifier::visitInvokeInst(InvokeInst &II) {
|
||||||
VerifyCallSite(&II);
|
VerifyCallSite(&II);
|
||||||
|
|
||||||
// Verify that there is an exception block instruction is the first non-PHI
|
// Verify that the first non-PHI instruction of the unwind destination is an
|
||||||
// instruction of the 'unwind' destination.
|
// exception handling instruction.
|
||||||
Assert(
|
Assert(
|
||||||
II.getUnwindDest()->isEHBlock(),
|
II.getUnwindDest()->isEHBlock(),
|
||||||
"The unwind destination does not have an exception handling instruction!",
|
"The unwind destination does not have an exception handling instruction!",
|
||||||
|
@ -2654,23 +2654,27 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void visitCleanupBlockInst(CleanupBlockInst &I) {
|
void visitCleanupBlockInst(CleanupBlockInst &I) {
|
||||||
setShadow(&I, getCleanShadow(&I));
|
if (!I.getType()->isVoidTy()) {
|
||||||
setOrigin(&I, getCleanOrigin());
|
setShadow(&I, getCleanShadow(&I));
|
||||||
|
setOrigin(&I, getCleanOrigin());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitCatchBlock(CatchBlockInst &I) {
|
void visitCatchBlock(CatchBlockInst &I) {
|
||||||
setShadow(&I, getCleanShadow(&I));
|
if (!I.getType()->isVoidTy()) {
|
||||||
setOrigin(&I, getCleanOrigin());
|
setShadow(&I, getCleanShadow(&I));
|
||||||
|
setOrigin(&I, getCleanOrigin());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitTerminateBlock(TerminateBlockInst &I) {
|
void visitTerminateBlock(TerminateBlockInst &I) {
|
||||||
setShadow(&I, getCleanShadow(&I));
|
DEBUG(dbgs() << "TerminateBlock: " << I << "\n");
|
||||||
setOrigin(&I, getCleanOrigin());
|
// Nothing to do here.
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitCatchEndBlockInst(CatchEndBlockInst &I) {
|
void visitCatchEndBlockInst(CatchEndBlockInst &I) {
|
||||||
setShadow(&I, getCleanShadow(&I));
|
DEBUG(dbgs() << "CatchEndBlock: " << I << "\n");
|
||||||
setOrigin(&I, getCleanOrigin());
|
// Nothing to do here.
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitGetElementPtrInst(GetElementPtrInst &I) {
|
void visitGetElementPtrInst(GetElementPtrInst &I) {
|
||||||
|
Loading…
Reference in New Issue
Block a user