| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
This reduces coalescing time on siod Mac OS X PPC by 35%. Also remove the back ptr from VNInfo to LiveInterval and other tweaks.
llvm-svn: 41729
|
|
|
|
|
|
|
|
| |
may be the same as the first label for the following
invoke. Remove a micro-optimization which was wrong
in this case.
llvm-svn: 41720
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
labels are generated bracketing each call (not just
invokes). This is used to generate entries in
the exception table required by the C++ personality.
However it gets in the way of tail-merging. This
patch solves the problem by no longer placing labels
around ordinary calls. Instead we generate entries
in the exception table that cover every instruction
in the function that wasn't covered by an invoke
range (the range given by the labels around the invoke).
As an optimization, such entries are only generated for
parts of the function that contain a call, since for
the moment those are the only instructions that can
throw an exception [1]. As a happy consequence, we
now get a smaller exception table, since the same
region can cover many calls. While there, I also
implemented folding of invoke ranges - successive
ranges are merged when safe to do so. Finally, if
a selector contains only a cleanup, there's a special
shorthand for it - place a 0 in the call-site entry.
I implemented this while there. As a result, the
exception table output (excluding filters) is now
optimal - it cannot be made smaller [2]. The
problem with throw filters is that folding them
optimally is hard, and the benefit of folding them is
minimal.
[1] I tested that having trapping instructions (eg
divide by zero) in such a region doesn't cause trouble.
[2] It could be made smaller with the help of higher
layers, eg by having branch folding reorder basic blocks
ending in invokes with the same landing pad so they
follow each other. I don't know if this is worth doing.
llvm-svn: 41718
|
|
|
|
| |
llvm-svn: 41712
|
|
|
|
| |
llvm-svn: 41676
|
|
|
|
|
|
|
|
| |
syntax of debug info on mingw32. Also, cleanup
some stuff.
llvm-svn: 41675
|
|
|
|
| |
llvm-svn: 41669
|
|
|
|
|
|
|
|
| |
Implement some constant folding in SelectionDAG and
DAGCombiner using APFloat. Remove double versions
of constructor and getValue from ConstantFPSDNode.
llvm-svn: 41664
|
|
|
|
| |
llvm-svn: 41650
|
|
|
|
| |
llvm-svn: 41645
|
|
|
|
| |
llvm-svn: 41641
|
|
|
|
|
|
| |
defined by copy from the other live range. Minor compile time win when number of val# is large.
llvm-svn: 41640
|
|
|
|
|
|
|
| |
Use APFloat interfaces for more references, mostly
of ConstantFPSDNode.
llvm-svn: 41632
|
|
|
|
| |
llvm-svn: 41598
|
|
|
|
|
|
|
|
|
| |
Add APFloat interfaces to ConstantFP, SelectionDAG.
Fix integer bit in double->APFloat conversion.
Convert LegalizeDAG to use APFloat interface in
ConstantFPSDNode uses.
llvm-svn: 41587
|
|
|
|
| |
llvm-svn: 41584
|
|
|
|
|
|
|
| |
Changes related modules so VNInfo's are not copied. This decrease
copy coalescing time by 45% and overall compilation time by 10% on siod.
llvm-svn: 41579
|
|
|
|
| |
llvm-svn: 41578
|
|
|
|
|
|
| |
scheduling.
llvm-svn: 41556
|
|
|
|
|
|
|
|
| |
1. Eliminate the costly live interval "swapping".
2. Change ValueNumberInfo container from SmallVector to std::vector. The former
performs slowly when the vector size is very large.
llvm-svn: 41536
|
|
|
|
|
|
| |
where both pointers have non-zero offsets.
llvm-svn: 41491
|
|
|
|
|
|
| |
to not alias each other, it can be translated as an llvm.memcpy.
llvm-svn: 41489
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
gcc exception handling: if an exception unwinds through
an invoke, then execution must branch to the invoke's
unwind target. We previously tried to enforce this by
appending a cleanup action to every selector, however
this does not always work correctly due to an optimization
in the C++ unwinding runtime: if only cleanups would be
run while unwinding an exception, then the program just
terminates without actually executing the cleanups, as
invoke semantics would require. I was hoping this
wouldn't be a problem, but in fact it turns out to be the
cause of all the remaining failures in the LLVM testsuite
(these also fail with -enable-correct-eh-support, so turning
on -enable-eh didn't make things worse!). Instead we need
to append a full-blown catch-all to the end of each
selector. The correct way of doing this depends on the
personality function, i.e. it is language dependent, so
can only be done by gcc. Thus this patch which generalizes
the eh.selector intrinsic so that it can handle all possible
kinds of action table entries (before it didn't accomodate
cleanups): now 0 indicates a cleanup, and filters have to be
specified using the number of type infos plus one rather than
the number of type infos. Related gcc patches will cause
Ada to pass a cleanup (0) to force the selector to always
fire, while C++ will use a C++ catch-all (null).
llvm-svn: 41484
|
|
|
|
| |
llvm-svn: 41482
|
|
|
|
| |
llvm-svn: 41409
|
|
|
|
|
|
|
| |
over uses in DAGCombiner. Fix interfaces to work
with APFloats.
llvm-svn: 41407
|
|
|
|
|
|
|
| |
know how to handle them. This fixes
test/CodeGen/Generic/asm-large-immediate.ll
llvm-svn: 41388
|
|
|
|
|
|
| |
immediate operands.
llvm-svn: 41386
|
|
|
|
|
|
|
|
|
| |
.set Lset0,___gxx_personality_v0-.
.long Lset0
on some targets. Make it so!
llvm-svn: 41385
|
|
|
|
|
|
| |
changing the interface to allow for future changes.
llvm-svn: 41384
|
|
|
|
|
|
| |
This means backing out the preceding change to Constants.cpp, alas.
llvm-svn: 41378
|
|
|
|
| |
llvm-svn: 41372
|
|
|
|
| |
llvm-svn: 41316
|
|
|
|
| |
llvm-svn: 41286
|
|
|
|
|
|
| |
scheduler implementations.
llvm-svn: 41191
|
|
|
|
|
|
|
| |
*) The needed information is propagated to the DAG
*) The X86-64 backend detects it and aborts
llvm-svn: 41179
|
|
|
|
| |
llvm-svn: 41163
|
|
|
|
| |
llvm-svn: 41143
|
|
|
|
| |
llvm-svn: 41139
|
|
|
|
|
|
| |
instruction to align the stack ptr before the decrement.
llvm-svn: 41133
|
|
|
|
|
|
|
|
|
| |
the alignment argument is ignored.
- *Always* round up the size of the allocation to multiples of stack
alignment to ensure the stack ptr is never left in an invalid state after a dynamic_stackalloc.
llvm-svn: 41132
|
|
|
|
|
|
| |
to turn off remat for debugging.
llvm-svn: 41118
|
|
|
|
|
|
| |
Fix PR1287.
llvm-svn: 41112
|
|
|
|
|
|
| |
essentially a load from stack slot. It's ok to mark the stack slot value as available for reuse. But it should not be clobbered since the destination of the move is live.
llvm-svn: 41109
|
|
|
|
|
|
|
| |
- If the defs of a spilled rematerializable MI are dead after the spill store is deleted, delete
the def MI as well.
llvm-svn: 41086
|
|
|
|
|
|
| |
its sub-registers may overlap with the interval of the copy that's being coalesced.
llvm-svn: 41084
|
|
|
|
|
|
| |
dead, mark the def operand as isDead.
llvm-svn: 41083
|
|
|
|
|
|
|
| |
no more uses within the MBB and the spilled value isn't live out of the MBB.
Then it's safe to delete the spill store.
llvm-svn: 41069
|
|
|
|
|
|
| |
spilled value is available for reuse.
llvm-svn: 41067
|
|
|
|
| |
llvm-svn: 41064
|