|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| | llvm-svn: 70872 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | ThreadEdge directly.  This shares the code, but is just a refactoring.
* Make JumpThreading compute the set of loop headers and avoid threading
  across them.  This prevents jump threading from forming irreducible 
  loops (goodness) but also prevents it from threading in other cases that
  are beneficial (see the comment above FindFunctionBackedges).
llvm-svn: 70820 | 
| | 
| 
| 
| 
| 
| | FindFunctionBackedges function.
llvm-svn: 70819 | 
| | 
| 
| 
| | llvm-svn: 70661 | 
| | 
| 
| 
| 
| 
| | them to bool.
llvm-svn: 70653 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | makes ScalarEvolution::deleteValueFromRecords, and it's code that
subtly needed to be called before ReplaceAllUsesWith, unnecessary.
It also makes ValueDeletionListener unnecessary.
llvm-svn: 70645 | 
| | 
| 
| 
| 
| 
| | a default value, and will hopefully be going away soon.
llvm-svn: 70642 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | of returning a list of pointers to Values that are deleted. This was
unsafe, because the pointers in the list are, by nature of what
RecursivelyDeleteDeadInstructions does, always dangling. Replace this
with a simple callback mechanism. This may eventually be removed if
all clients can reasonably be expected to use CallbackVH.
Use this to factor out the dead-phi-cycle-elimination code from LSR
utility function, and generalize it to use the
RecursivelyDeleteTriviallyDeadInstructions utility function.
This makes LSR more aggressive about eliminating dead PHI cycles;
adjust tests to either be less trivial or to simply expect fewer
instructions.
llvm-svn: 70636 | 
| | 
| 
| 
| 
| 
| 
| | deleting it.  This will let ScalarEvolution be more complete about
updating its records.
llvm-svn: 70632 | 
| | 
| 
| 
| | llvm-svn: 70630 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | of LSR. This makes the AddUsersIfInteresting phase of LSR a pure
analysis instead of a phase that potentially does CFG modifications.
The conditions where this code would actually perform a split are
rare, and in the cases where it actually would do a split the split
is usually undone by CodeGenPrepare, and in cases where splits
actually survive into codegen, they appear to hurt more often than
they help.
llvm-svn: 70625 | 
| | 
| 
| 
| 
| 
| 
| 
| | target hooks canLosslesslyBitCastTo and isTruncateFree. This allows
targets to avoid worrying about handling all combinations of integer
and pointer types.
llvm-svn: 70555 | 
| | 
| 
| 
| | llvm-svn: 70551 | 
| | 
| 
| 
| | llvm-svn: 70546 | 
| | 
| 
| 
| | llvm-svn: 70427 | 
| | 
| 
| 
| | llvm-svn: 70416 | 
| | 
| 
| 
| | llvm-svn: 70262 | 
| | 
| 
| 
| | llvm-svn: 70247 | 
| | 
| 
| 
| 
| 
| 
| | between the comparison's iv stride and the candidate stride is
exactly -1.
llvm-svn: 70244 | 
| | 
| 
| 
| | llvm-svn: 70054 | 
| | 
| 
| 
| 
| 
| 
| | into unsigned ones when the operands are known to have the same
sign bit value.
llvm-svn: 70053 | 
| | 
| 
| 
| | llvm-svn: 69946 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | with the persistent insertion point, and change IndVars to make
use of it. This fixes a bug where IndVars was holding on to a
stale insertion point and forcing the SCEVExpander to continue to
use it.
This fixes PR4038.
llvm-svn: 69892 | 
| | 
| 
| 
| | llvm-svn: 69844 | 
| | 
| 
| 
| | llvm-svn: 69842 | 
| | 
| 
| 
| | llvm-svn: 69836 | 
| | 
| 
| 
| 
| 
| 
| 
| | the predecessors themselves.  This halves the time
to optimize the testcase, beyond what my previous patch did.
llvm-svn: 69792 | 
| | 
| 
| 
| 
| 
| | testcase from PR3549.  More improvements to come.
llvm-svn: 69788 | 
| | 
| 
| 
| | llvm-svn: 69752 | 
| | 
| 
| 
| | llvm-svn: 69680 | 
| | 
| 
| 
| 
| 
| | and SCEVSignExtendExpr.
llvm-svn: 69649 | 
| | 
| 
| 
| 
| 
| | the code to minimize dependencies on TargetData.
llvm-svn: 69644 | 
| | 
| 
| 
| 
| 
| | GEP's don't usually become instructions.
llvm-svn: 69631 | 
| | 
| 
| 
| 
| 
| | pointer type, make sure that the pointer size is a valid sequential index type.
llvm-svn: 69574 | 
| | 
| 
| 
| | llvm-svn: 69450 | 
| | 
| 
| 
| | llvm-svn: 69402 | 
| | 
| 
| 
| 
| 
| | This fixes a --enable-expensive-checks problem.
llvm-svn: 69353 | 
| | 
| 
| 
| 
| 
| 
| | regression in 403.gcc in PIC_CODEGEN=1 and DISABLE_LTO=1
mode.
llvm-svn: 69344 | 
| | 
| 
| 
| 
| 
| | to get the correct answer for pointer types.
llvm-svn: 69321 | 
| | 
| 
| 
| 
| 
| | incoming edges for a block with many predecessors.
llvm-svn: 69312 | 
| | 
| 
| 
| 
| 
| 
| | targets with pointers larger than 64 bits, due to the code not
yet being APInt clean.
llvm-svn: 69296 | 
| | 
| 
| 
| 
| 
| | optimizer, which just happen to frequently involve optimizing GEPs.
llvm-svn: 69295 | 
| | 
| 
| 
| 
| 
| | since the operand is always a constant.
llvm-svn: 69291 | 
| | 
| 
| 
| 
| 
| | new instruction with SCEVExpander::InsertCastOfTo.
llvm-svn: 69290 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.
Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.
Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.
llvm-svn: 69258 | 
| | 
| 
| 
| 
| 
| 
| 
| | and sext over (iv | const), if a longer iv is
available.  Allow expressions to have more than
one zext/sext parent.  All from OpenSSL.
llvm-svn: 69241 | 
| | 
| 
| 
| 
| 
| 
| | if a longer iv is available.  These subscript forms are
not common; they're a bottleneck in OpenSSL.
llvm-svn: 69215 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | sext around sext(shorter IV + constant), using a
longer IV instead, when it can figure out the
add can't overflow.  This comes up a lot in
subscripting; mainly affects 64 bit.
llvm-svn: 69123 | 
| | 
| 
| 
| 
| 
| | destinations have phi nodes.
llvm-svn: 69121 | 
| | 
| 
| 
| 
| 
| | llvm.dbg.region.end instrinsic. This nested llvm.dbg.func.start/llvm.dbg.region.end pair now enables DW_TAG_inlined_subroutine support in code generator.
llvm-svn: 69118 |