| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
We have to be careful when splitting the landing pad block, because the
landingpad instruction is required to remain as the first non-PHI of an invoke's
unwind edge. To retain this, we split the block into two blocks, moving the
predecessors within the loop to one block and the remaining predecessors to the
other. The landingpad instruction is cloned into the new blocks.
llvm-svn: 138015
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SplitLandingPadPredecessors is similar to SplitBlockPredecessors in that it
splits the current block and attaches a set of predecessors to the new basic
block. However, it differs from SplitBlockPredecessors in that it's specifically
designed to handle landing pad blocks.
Two new basic blocks are created: one that is has the vector of predecessors as
its predecessors and one that has the remaining predecessors as its
predecessors. Those two new blocks then receive a cloned copy of the landingpad
instruction from the original block. The landingpad instructions are joined in a
PHI, etc. Like SplitBlockPredecessors, it updates the LLVM IR, AliasAnalysis,
DominatorTree, DominanceFrontier, LoopInfo, and LCCSA analyses.
llvm-svn: 138014
|
|
|
|
| |
llvm-svn: 138008
|
|
|
|
| |
llvm-svn: 137985
|
|
|
|
|
|
| |
aren't from an indirect branch need to be dominated by the loop header.
llvm-svn: 137981
|
|
|
|
|
|
| |
function.
llvm-svn: 137979
|
|
|
|
| |
llvm-svn: 137978
|
|
|
|
|
|
| |
of debug info.
llvm-svn: 137972
|
|
|
|
| |
llvm-svn: 137959
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 137926
|
|
|
|
|
|
| |
and b) doing a separate pass over dbg.value instructions.
llvm-svn: 137908
|
|
|
|
|
|
| |
named mdnode.
llvm-svn: 137890
|
|
|
|
| |
llvm-svn: 137888
|
|
|
|
|
|
|
|
| |
PRE needs the landing pads to have their critical edges split. Doing this for a
landing pad is non-trivial. Abandon the attempt to perform PRE when we come
across a landing pad. (Reviewed by Owen!)
llvm-svn: 137876
|
|
|
|
| |
llvm-svn: 137872
|
|
|
|
|
|
|
|
| |
One way to exit the loop is through an unwind edge. However, that may involve
splitting the critical edge of the landing pad, which is non-trivial. Prevent
the transformation from rewriting the landing pad exit loop block.
llvm-svn: 137871
|
|
|
|
|
|
| |
so requires more care than this generic algorithm should handle.
llvm-svn: 137866
|
|
|
|
|
|
| |
instruction should be marked as potentially reading and/or writing memory.
llvm-svn: 137863
|
|
|
|
|
|
|
|
|
|
| |
here, be a bit more defensive
with unknown instructions.
Fixes PR10687.
llvm-svn: 137836
|
|
|
|
|
|
|
|
|
| |
making random bad assumptions about instructions which are not explicitly listed.
Includes fix for rdar://9956541, a version of "undef ^ undef should return
0 because it's easier than arguing with users".
llvm-svn: 137777
|
|
|
|
|
|
| |
this with a normal pass pipeline, but fixing for completeness.)
llvm-svn: 137755
|
|
|
|
|
|
| |
check for a LandingPadInst.
llvm-svn: 137745
|
|
|
|
| |
llvm-svn: 137743
|
|
|
|
|
|
|
|
| |
ends can use without needing to be aware of the plugin (or the plugin be aware of the front end).
Before 3.0, I'd like to add a mechanism for automatically loading a set of plugins from a config file. API suggestions welcome...
llvm-svn: 137717
|
|
|
|
| |
llvm-svn: 137712
|
|
|
|
|
|
| |
load/store.
llvm-svn: 137702
|
|
|
|
|
|
| |
to be wrong (or at least somewhat suspect). Leave a FIXME for Bill.
llvm-svn: 137694
|
|
|
|
| |
llvm-svn: 137693
|
|
|
|
|
|
|
|
| |
This commit includes a mention of the landingpad instruction, but it's not
changing the behavior around it. I think the current behavior is correct,
though. Bill, can you double-check that?
llvm-svn: 137691
|
|
|
|
| |
llvm-svn: 137690
|
|
|
|
|
|
| |
if necessary.
llvm-svn: 137679
|
|
|
|
| |
llvm-svn: 137672
|
|
|
|
| |
llvm-svn: 137667
|
|
|
|
| |
llvm-svn: 137664
|
|
|
|
|
|
| |
write to memory.) Marking it as such makes some checks for immobility go away.
llvm-svn: 137655
|
|
|
|
|
|
| |
Simon Moll on llvmdev.
llvm-svn: 137654
|
|
|
|
| |
llvm-svn: 137648
|
|
|
|
| |
llvm-svn: 137642
|
|
|
|
| |
llvm-svn: 137629
|
|
|
|
| |
llvm-svn: 137627
|
|
|
|
| |
llvm-svn: 137626
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This builds off of the current scheme, but instead of llvm.eh.exception and
llvm.eh.selector, it uses the landingpad instruction. And instead of
llvm.eh.resume, it uses the resume instruction.
Because of the invariants in the landing pad instruction, a lot of code that's
currently needed to find the appropriate intrinsic calls for an invoke
instruction won't be needed once we go to the new EH scheme. The "FIXME"s tell
us what to remove after we switch.
llvm-svn: 137576
|
|
|
|
| |
llvm-svn: 137575
|
|
|
|
| |
llvm-svn: 137572
|
|
|
|
|
|
| |
when combining add and sub instructions. Patch by Pranav Bhandarkar!
llvm-svn: 137570
|
|
|
|
|
|
|
|
|
|
|
|
| |
This implements the 'landingpad' instruction. It's used to indicate that a basic
block is a landing pad. There are several restrictions on its use (see
LangRef.html for more detail). These restrictions allow the exception handling
code to gather the information it needs in a much more sane way.
This patch has the definition, implementation, C interface, parsing, and bitcode
support in it.
llvm-svn: 137501
|
|
|
|
| |
llvm-svn: 137480
|
|
|
|
|
|
| |
when building with assertions disabled.
llvm-svn: 137460
|
|
|
|
|
|
| |
is returned through a bitcast.
llvm-svn: 137402
|
|
|
|
|
|
|
|
|
| |
the retains and releases all use the same SSA pointer value.
Also, don't let CFG hazards disrupt nested retain+release pair
optimizations.
llvm-svn: 137399
|